自动化运维工具ansible

自动化运维工具ansible

目录

安装与配置

#yum安装
yum install epel-release -y
yum install ansible –y

#查看ansible版本
ansible --version

#管理节点与被管理节点建⽴SSH信任关系
1.生成私钥
[root@server ~]# ssh-keygen 
2.向主机分发私钥
[root@server ~]# ssh-copy-id root@192.168.37.122
[root@server ~]# ssh-copy-id root@192.168.37.133

#修改配置文件,创建主机清单文件 写在[]里的是组名,[ ]下面的是组内的主机名
[root@server ~]# vim /etc/ansible/hosts
[web]
192.168.37.122
192.168.37.133

命令行模块

ansible <ip组> -m <模块> -a <argument参数> [options]

命令的工作目录默认是远程用户的主目录(~),command 模块不会保留shell的环境状态(包括当前工作目录)

ping模块

ansible all -m ping

command模块

chdir=/etc/sysconfig  ---执行命令前先切换到指定目录
creates=/doc/1.txt:判断指定文件是否存在,如果存在,不执行后面的操作
removes:判断指定文件是否存在,如果存在,执行后面的操作
  • 注意,该命令不支持| 管道命令

ansible all -m command -a ‘removes=/etc/sysconfig/network-scripts/ifcfg-ens33 ip addr ’

shell模块

ansible all -m shell -a 'echo "niki_ansible" |cat >>1.txt

ansible webservers -m shell -a 'ifconfig | grep ens33’

ansible webservers -m shell -a 'ifconfig > /opt/kx.txt’

file模块

state  #状态,有以下选项:

directory:如果目录不存在,就创建目录
file:文件不存在,不会被创建
touch:文件不存在,创建新文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
link:创建软链接,hard:创建硬链接

ansible web -m file -a 'path=/data/app state=directory’ 创建目录

ansible web -m file -a 'path=/data/a state=absent’ 删除文件

ansible dbservers -m file -a ' group=root mode=644 path=/opt/host_ansible' #修改文件的属主属组权限等

copy模块-将文件复制到远程主机

src    #被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径。如果路径是一个目录,则会递归复制,用法类似于"rsync"
content   #用于替换"src",可以直接指定文件的值
dest    #必选项,将源文件复制到的远程主机的绝对路径
backup   #当文件内容发生改变后,在覆盖之前把源文件备份,备份文件包含时间信息
directory_mode    #递归设定目录的权限,默认为系统默认权限

ansible web -m copy -a 'content="I am keer\n" dest=/data/name mode=666’

fetch 模块-从远程主机获取文件到本地

dest:用来存放文件的目录
src:在远程拉取的文件,**并且必须是一个file**,不能是目录

ansible web -m fetch -a 'src=/data/hello dest=/data'

yum/apt 模块

name:要管理的包名
state:#present--->安装 latest--->安装最新的, absent---> 卸载软件。

playbook-剧本

playbook格式

playbook 是 ansible 用于配置,部署,和管理被控节点的剧本。类似于脚本

  1. p-:后必须空一格
  2. 大小写敏感,使用缩进表示层级关系
  3. 缩进时不允许使用tab键、只允许使用空格
  4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
---   
- name: Example playbook  
  hosts: all  # 指定此 Play 将在哪些主机上运行
  remote_user: root
  
  tasks:  
    - name: connect test  
      ping:    
  
    - name: new file  
      file: 
        group: root
        mode: 744
        path: /niki1/file1
        state: touch 
        
        
    #以上为普通形式,行数较多,但更容易操作。任务的关键字垂直堆叠,更容易区分。
    #以下可以运行但不推荐
    tasks:
      - name: shorthand form
        service: name=httpd enabled=true state=started

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

运行playbook

空运行 ansible-playbook -C pb.yml

直接运行 ansible-playbook pb.yml

语法验证 ansible-playbook --syntax-check pb.yml

指定从某个task开始运行ansible-playbook pb.yml --start-at-task='xxx'

| 绿色代表执行成功,系统保持原样

| 黄色代表系统代表系统状态发生改变

| 红色代表执行失败,显示错误输出

Handler-触发器

在特定条件下触发;接收到其它任务的通知notify时被触发

Handlers 最佳的应用场景是用来重启服务,或者触发系统重启操作.除此以外很少用到了.

Tag-标签

为tasks或play添加标记,选择性地执行playbook的特定部分。

错误处理

如果命令或脚本的退出码不为零,可以使用如下方式替代

tasks:
  -name: run this command and ignore the result
  shell: /usr/bin/somecommand || /bin/true
转错为正 如果命令失败则执行 true

或者使用ignore_errors来忽略错误信息
tasks:
    -name: run this command and ignore the result
    shell: /usr/bin/somecommand
    ignore_errors: True 忽略错误

Variable-变量

变量名:仅能由字母、数字和下划线组成,且只能以字母开头

变量定义:直接定义 key=value

1.系统自带:ansible setup模块   
  ansible all -m setup -a 'filter="ansible_nodename"'     #查询主机名
  
2./etc/ansible/hosts(主机清单)中定义变量

3.在playbook中定义
       vars:
        - var1: value1
        - var2: value2

4.在独立的变量YAML文件中定义
      vim vars.yml
      pack: vsftpd
      service: vsftpd
      
      引用变量文件
      vars_files:
        - vars.yml
        

变量调用:

通过{{ variable_name }} 调用变量
通过-e指定  
ansible-playbook test.yml -e "hosts=123"

示例

#调用变量文件   
---
- hosts: web
  name: vars_log file
  vars_files:
     - /niki2/vars.yml

  tasks:
    - name: new file
      file:
         path: /niki1/{{ name1 }}_log.txt
         mode: "{{ mode1 }}"
         state: touch

Template-模板

---
- hosts: all
  remote_user: root

  tasks:
    - name: install nginx  #安装nginx,若为centos7需要启用 EPEL 仓库
      yum:
        name: nginx
        state: present

    - name: copy template
      template:
        src: /etc/ansible/templates/nginx.conf.j2 
        #nginx.conf.j2模板设置worker_processes {{ ansible_processor_vcpus*2}};
        dest: /etc/nginx/nginx.conf
      notify: restart service
      
     
    - name: service start
      service:
        name: nginx
        state: started
        enabled: yes #开机自启

  handlers:
    - name: restart service
      service:
        name: nginx
        state: restarted

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值