ansible playbook

  • Post author:
  • Post category:其他


playbook基本使用

相当于把模块写入到配置文件里面,例:

[root@geenk03 ~]# cat /etc/ansible/test.yml
---
- hosts: 192.168.1.204
  remote_user: root
  tasks:
    - name: test_playbook
      shell: touch /tmp/huansheng.txt

结果;在192.168.1.204上的tmp目录下创建一个huansheng.txt文件

说明: 第一行需要有三个杠,hosts参数指定了对哪些主机进行参作,如果是多台机器可以用逗号作为分隔,也可以使用主机组,在/etc/ansible/hosts里定义;

user参数指定了使用什么用户登录远程主机操作;

tasks指定了一个任务,其下面的name参数同样是对任务的描述,在执行过程中会打印出来,shell是ansible模块名字

执行:ansible-playbook /etc/ansible/test.yml

playbook中的变量使用

创建一个test用户

[root@geenk03 ~]# cat /etc/ansible/test_user.yml
---
- name: create_user
  hosts: 192.168.1.204
  user: root
#  能让gather_facts在前台不显示,可以减轻ansible压力
  gather_facts: false
  vars:
#声明变量
    - user: "test"
  tasks:
    - name: create_user
#{{ user}} 相当于shell中的$
      user: name="{{ user }}"

结果:在192.168.1.204上创建一个test用户

说明:name参数对该playbook实现的功能做一个概述,后面执行过程中,会打印 name变量的值 ,可以省略;gather_facts参数指定了在以下任务部分执行前,是否先执行setup模块获取主机相关信息,这在后面的task会使用到setup获取的信息时用到;vars参数,指定了变量,这里指字一个user变量,其值为test ,需要注意的是,变量值一定要用引号引住;user提定了调用user模块,name是user模块里的一个参数,而增加的用户名字调用了上面user变量的值。

playbook循环

[root@geenk03 ~]# cat /etc/ansible/test_while.yml
---
- hosts: 192.168.1.204
  user: root
  tasks:
    - name: change mode for files
#{{ itme}} 可以理解为$item
      file: path=/tmp/{{ item }} state=touch mode=600
#定义items变量
      with_items:
        - 1.txt
        - 2.txt
        - 3.txt

结果:在192.168.1.204上创建3个txt,并且授权为600

说明: with_items为循环的对象

Ansible playbook中的条件判断

[root@geenk03 ~]# cat /etc/ansible/when.yml
---
- hosts: testhost
  user: root
  gather_facts: True
  tasks:
    - name: use when
      shell: touch /tmp/when.txt
#如果ip为192.168.1.204就创建文件
      when: ansible_eth0.ipv4.address == "192.168.1.204"

结果:在192.168.1.204上创建了讴歌when.txt, 192.168.1.203上,没有创建

说明:ansible 192.168.1.204 -m setup 可以查看到所有的facter信息

playbook中的handlers

handlers 类似于shell中的 &&,前面执行成功了才会执行后面的

cat /etc/ansible/handlers.yml
---
- name: handlers test
  hosts: 192.168.1.204
  user: root
  tasks:
    - name: copy file
      copy: src=/etc/passwd dest=/tmp/aaa.txt
#定义hangdler名字,让下面的hangler模块调用
      notify: test handlers
  handlers:
    - name: test handlers
      shell: echo "11111" >> /tmp/aaa.txt

结果:在192.168.1.204上拷贝了passwd文件,名为aaa.txt,并追加内容“11111”

说明:只有copy模块真正执行后,才会去调用下面的handlers相关的操作。反正则不会, 这种比较操作适合配置文件发生更改后,重启服务的操作。



版权声明:本文为qq_25611295原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。