ansible2.7.5编写简单剧本playbook

playbook配置项说明:


---
  - hosts: webservers    # 执行任务的主机(all,组名称,ip...)
    vars:                          # 定义变量。引用方式:{{变量名}}
      http_port: 80
      max_clients: 200
    remote_user: root    # 在远程主机上执行任务的用户
    tasks:               # 要执行的任务列表
      - name: ensure apache is at the latest version    # 任务名称(注释)
        yum: pkg=httpd state=latest                     # 指定yum模块,并写入相应模块的使用语法
      - name: ensure apache is running
        service: name=httpd state=started
    handlers:            # 任务,与tasks不同的是只有在接受到通知时才会被触发
      - name: restart apache
        service: name=httpd state=restarted


使用剧本:

ansible-playbook -C 02-cron.yml    # 检查剧本,剧本中存在变量时检查会报错

ansible-playbook 02-cron.yml    # 执行剧本


举例:

---  

  - hosts: web

    tasks:      

      - name: show hostname    

        command: hostname


--- 

  - hosts: web

    tasks:

      - name: add cron

        cron: name="ansible test" minute=10 job="ntedate time.windows.com >/dev/null 2>&1" state=present


register类型变量:

---

  - hosts: web

    tasks:

      - name: show ip address

        shell: hostname -I | awk '{print $2}'

        register: ip

      - name: print ip var to file

        shell: echo {{ip}} > /tmp/ip


上面的剧本首先执行查ip的命令,将执行结果通过register变量赋值给变量ip,然后在将变量ip中的内容追加到文件中。


执行结果如下:

{
stderr_lines: [],
uchanged: True, 
uend: u2019-03-06 21:34:22.662536, 
failed: False,
ustdout: u172.16.1.7, 
ucmd: uhostname -I | awk '{print }', 
urc: 0, 
ustart: u2019-03-06 21:34:22.651661, 
ustderr: u, 
udelta: u0:00:00.010875, 
stdout_lines: [u172.16.1.7]
}

我们想要的结果是ip,其他的内容不需要,所以在调用变量得时候使用ip.stdout,即:

---
  - hosts: web
    tasks:
      - name: show ip address
        shell: hostname -I | awk '{print $2}'
        register: ip
      - name: print ip var to file
        shell: echo {{ip.stdout}} > /tmp/ip

在屏幕中显示剧本的执行结果:

---
  - hosts: web
    tasks:
      - name: show hostname
        command: hostname
        register: name
      - name: print hostname
        debug: msg={{name.stdout}}

这里用到debug模块,msg表示打印自定义消息,内容就是我们获取到结果的变量。


循环:

---
  - hosts: web
    tasks:
      - name: print loop debug
        debug: msg={{item}}
        with_items:
          - 1
          - 2
          - 3


判断:

---
  - hosts: all
    tasks:
      - name: yum install nfs-utils rpcbind
        yum: name=nfs-utils,rpcbind state=present
        when: ( ansible_hostname == "nfs01" ) or ( ansible_hostname == "backup" )


只有主机名是nfs01或backup时安装nfs-utils rpcbind

ansible_hostname等变量可以使用以下命令查询

ansilbe  ip -m setup

版权所有:《SoulChild随笔记》 => 《ansible2.7.5编写简单剧本playbook
本文地址:http://soulchild.cn/post-29.html
除非注明,文章均为 《SoulChild随笔记》 原创,欢迎转载!转载请注明本文地址,谢谢。

暧昧贴