ansible 判断 + 案例

When

判断运算符

“==” “!=” “>” “<” “>=” “<=” “and” “or” “not” is in

每次执行完一个任务,不管成功与失败,都会将执行的结果进行注册,可以使用这个注册的变量来when

判断变量的一些tests

Defined:判断变量是否已经定义,已定义则返真

Undefined:判断变量是否已经定义,未定义则返真

None:判断变量值是否为空,如果变量已经定义,但是变量值为空,则返真

示例:

[student@master ansible]$ vim s.yml 
---
- name: test
  hosts: node1
  vars:
    aa: 1
    cc:
  tasks:
    - name: 1
      debug:
        msg: 111
      when: aa is defined
        
    - name: 2
      debug:
        msg: 222
      when: cc is undefined
~  
[student@master ansible]$ ansible-playbook s.yml 
 
PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [debug] *******************************************************************
ok: [node1] => {
    "msg": 111
}

TASK [debug] *******************************************************************
skipping: [node1]

PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

[student@master ansible]$ vim s.yml 
---
- name: test
  hosts: node1
  vars:
    aa: 1
    cc:
  tasks:
    - name: test1
      debug:
        msg: 111
      when: aa is defined

    - name: test2
      debug:
        msg: 222
      when: cc is undefined
~          
[student@master ansible]$ ansible-playbook s.yml 

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [test1] *******************************************************************
ok: [node1] => {
    "msg": 111
}

TASK [test2] *******************************************************************
skipping: [node1]

PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

判断执行结果的一些tests

Success/successed:通过任务的返回信息判断执行状态,任务执行成功返回真

Failure/failed:通过执行任务的返回信息判断执行状态,任务执行失败则返回真

Change/changed:通过任务的返回信息判断执行状态,任务返回状态为changed则返回真

Skip/skipped:通过任务的返回信息判断执行状态,当任务没有满足条件,而被跳过执行,则返回真

实例:

[student@master ansible]$ vim a.yml 
---
- name: test
  hosts: node1
  vars:
    aa: 11
  tasks:
    - name: shell
      shell:
        cmd: ls /mnt
      when: aa == 11
      register: dd

    - name: create debug1 success
      debug:
        msg: shenyi success
      when: dd is success

    - name: create debug2 fail
      debug:
        msg: shenyi failed
      when: dd is failed

    - name: create debug3 change
      debug:
        msg: shenyi changed
      when: dd is changed

    - name: create debug4 skip
      debug:
        msg: shenyi skip
      when: dd is skip
~
[student@master ansible]$ ansible-playbook a.yml 

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [shell] *******************************************************************
changed: [node1]

TASK [create debug1 success] ***************************************************
ok: [node1] => {
    "msg": "shenyi success"
}

TASK [create debug2 fail] ******************************************************
skipping: [node1]

TASK [create debug3 change] ****************************************************
ok: [node1] => {
    "msg": "shenyi changed"
}

TASK [create debug4 skip] ******************************************************
skipping: [node1]

PLAY RECAP *********************************************************************
node1                      : ok=4    changed=1    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0   

判断路径的一些tests

注意:以下tests的判断均对ansible主机中的路径,与目标主机无关

file:判断路径是否是一个文件

directory:判断路径是否是一个目录

link:判断路径是否是一个软连接

mount:判断路径是否是一个挂载点

exists:判断路径是否存在

示例:

[student@master ansible]$ exit
logout
[root@master ~]# mkdir /test
[root@master ~]# cd /test/
[root@master test]# touch file1
[root@master test]# ln file1 hardlinka
[root@master test]# ln -s file1 softlinka
[root@master test]# su  - student 
[student@master ansible]$ vim a.yml 
---
- name: test
  hosts: node1
  vars:
    a1: /test/file1
    a2: /test/
    a3: /test/softlinka
    a4: /test/hardlinka
    a5: /boot/
  tasks:
    - name: debug1
      debug:
        msg: this is file
      when: a1 is file
 
    - name: debug2
      debug:
        msg: "this is directory"
      when: a2 is directory
 
    - name: debug3
      debug:
                      
        msg: "this is softlink"
      when: a3 is link
 
    - name: debug4
      debug:
        msg: "this is hardlink"
      when: a4 is link
 
    - name: debug5
      debug:
        msg: "this is mount directory"
      when: a5 is mount
 
    - name: debug6
      debug:
        msg: "this is exists"
      when: a1 is  exists
~
[student@master ansible]$ ansible-playbook a.yml 

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [debug1] ******************************************************************
ok: [node1] => {
    "msg": "this is file"
}

TASK [debug2] ******************************************************************
ok: [node1] => {
    "msg": "this is directory"
}

TASK [debug3] ******************************************************************
ok: [node1] => {
    "msg": "this is softlink"
}

TASK [debug4] ******************************************************************
skipping: [node1]

TASK [debug5] ******************************************************************
ok: [node1] => {
    "msg": "this is mount directory"
}

TASK [debug6] ******************************************************************
ok: [node1] => {
    "msg": "this is exists"
}

PLAY RECAP *********************************************************************
node1                      : ok=6    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

判断字符串的一些tests

lower:判断包含字母的字符串中的字母是否纯小写

upper:判断包含字母的字符串中的字母是否纯大写

示例:

[student@master ansible]$ vim a.yml 
---
- name: test
  hosts: node1
  vars:
    a1: abc
    a2: ABC
    a3: a1b
  tasks:
    - name: debug1
      debug:
        msg: this string is all lower
      when: a1 is lower
 
    - name: debug2
      debug:
        msg: this string is all upper
      when: a2 is upper
 
    - name: debug3
      debug:
        msg: shenyi
      when: a3 is lower
~   
[student@master ansible]$ ansible-playbook a.yml 

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [debug1] ******************************************************************
ok: [node1] => {
    "msg": "this string is all lower"
}

TASK [debug2] ******************************************************************
ok: [node1] => {
    "msg": "this string is all upper"
}

TASK [debug3] ******************************************************************
ok: [node1] => {
    "msg": "shenyi"
}

PLAY RECAP *********************************************************************
node1                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

其他的一些tests

string:判断对象是否是一个字符串

number:判断对象是否一个数字

示例:

[student@master ansible]$ vim a.yml 
---
- name: test
  hosts: node1
  vars:
    a1: 1
    a2: "1"
    a3: a
  tasks:
    - name: debug1
      debug:
        msg: this is number
      when: a1 is number
 
    - name: debug2
      debug:
        msg: this is string
      when: a2 is string
 
    - name: debug3
      debug:
        msg: this is string
      when: a3 is string
~
[student@master ansible]$ ansible-playbook a.yml 

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [debug1] ******************************************************************
ok: [node1] => {
    "msg": "this is number"
}

TASK [debug2] ******************************************************************
ok: [node1] => {
    "msg": "this is string"
}

TASK [debug3] ******************************************************************
ok: [node1] => {
    "msg": "this is string"
}

PLAY RECAP *********************************************************************
node1                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

block/rescue/always: 限制性block,如果执行失败,则执行rescue,无论是block还是rescue执行失败还是成功,在最后都执行always

例题:

创建一个名为/etc/ansible/lv.yml 的playbook,它将在所有受管节点上运行以执行下列任务:

​ 创建符合以下要求的逻辑卷:

​ 逻辑卷创建在research卷组中

​ 逻辑卷名称为data

​ 逻辑卷大小为1500MiB

​ 使用ext4文件系统格式化逻辑卷

​ 如果无法创建请求的逻辑卷大小,应显示错误消息

​ Could not create logical volume of that size,并且应改为使用大小 800MiB

​ 如果卷组research 不存在 ,应显示错误消息

​ Volume group does not exist

​ 不要以任何方式挂载逻辑卷

前提:在node1、node2上添加一块硬盘,然后新建卷组

Node1的卷组大小为2G 卷组名为research

Node2的卷组大小为1G 卷组名为research

[student@master ansible]$ vim repo.yml
---     
- name: repo
  hosts: all
  tasks:
    - name: repo1
      yum_repository:
        name: baseos
        description: aa1
        baseurl: http://ansible.example.com/rhel9/BaseOS
        enabled: yes
        gpgcheck: no
          
    - name: repo2
      yum_repository:
        name: appstream
        description: ee1
        baseurl: http://ansible.example.com/rhel9/AppStream
        enabled: yes
        gpgcheck: no
          
    - name: install lvm2
      yum:
        name: lvm2
        state: present
~    
[student@master ansible]$ ansible-playbook repo.yml 

PLAY [repo] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node5]
ok: [node1]
ok: [node4]
ok: [node3]
ok: [node2]

TASK [repo1] *******************************************************************
changed: [node3]
changed: [node4]
ok: [node2]
ok: [node1]
changed: [node5]

TASK [repo2] *******************************************************************
ok: [node1]
changed: [node5]
changed: [node3]
ok: [node2]
changed: [node4]

TASK [install lvm2] ************************************************************
ok: [node1]
ok: [node2]
changed: [node4]
changed: [node5]
changed: [node3]

PLAY RECAP *********************************************************************
node1                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node4                      : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node5                      : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[student@master ansible]$ vim vg.yml
---
- name: create vg for node1
  hosts: node1
  tasks:
    - name: create partition
      parted:
        device: /dev/vdb
        number: 1
        part_type: primary
        part_start: 10MiB
        part_end: 2010MiB
        state: present

    - name: create vg
      lvg:
        pvs: /dev/vdb1
        vg: research

- name: create vg for node2
  hosts: node2
  tasks:
    - name: create partition1
      parted:
        device: /dev/vdb
        number: 1
        part_type: primary
        part_start: 10MiB
        part_end: 1010MiB
        state: present

    - name: create vg
      lvg:
        pvs: /dev/vdb1
        vg: research
~ 
[student@master ansible]$ ansible-playbook vg.yml 

PLAY [create vg for node1] *****************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [create partition] ********************************************************
changed: [node1]

TASK [create vg] ***************************************************************
changed: [node1]

PLAY [create vg for node2] *****************************************************

TASK [Gathering Facts] *********************************************************
ok: [node2]

TASK [create partition1] *******************************************************
changed: [node2]

TASK [create vg] ***************************************************************
changed: [node2]

PLAY RECAP *********************************************************************
node1                      : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[student@master ansible]$ vim lv.yml
---
- name: create lv
  hosts: all
  tasks:
    - name: create lv1
      block:
        - name: create 1500 lv
          lvol:
            vg: research
            lv: data
            size: 1500
      rescue:
        - name: output fail meaasge
          debug:
            msg: Could not create logical volume of that size

        - name: create 800 lv
          lvol:
            vg: research
            lv: data
            size: 800

      always:
        - name: format lv
          filesystem:
            dev: /dev/research/data
            fstype: ext4
      when: "'research' in ansible_lvm.vgs"
        
    - name: output message
      debug:
        msg: Volume group does not exist
      when: "'research' not in ansible_lvm.vgs"
~  
[student@master ansible]$ ansible-playbook lv.yml 

PLAY [create lv] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node4]
ok: [node3]
ok: [node5]
ok: [node2]
ok: [node1]

TASK [create 1500 lv] **********************************************************
skipping: [node3]
skipping: [node4]
skipping: [node5]
ok: [node1]
fatal: [node2]: FAILED! => {"changed": false, "err": "  Insufficient free space: 175 extents needed, but only 49 available\n", "msg": "Unable to resize data to 1500m", "rc": 5}

TASK [output fail meaasge] *****************************************************
ok: [node2] => {
    "msg": "Could not create logical volume of that size"
}

TASK [create 800 lv] ***********************************************************
ok: [node2]

TASK [format lv] ***************************************************************
skipping: [node3]
skipping: [node4]
skipping: [node5]
ok: [node1]
ok: [node2]

TASK [output message] **********************************************************
skipping: [node1]
skipping: [node2]
ok: [node3] => {
    "msg": "Volume group does not exist"
}
ok: [node4] => {
    "msg": "Volume group does not exist"
}
ok: [node5] => {
    "msg": "Volume group does not exist"
}

PLAY RECAP *********************************************************************
node1                      : ok=3    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
node2                      : ok=4    changed=0    unreachable=0    failed=0    skipped=1    rescued=1    ignored=0   
node3                      : ok=2    changed=0    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0   
node4                      : ok=2    changed=0    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0   
node5                      : ok=2    changed=0    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0   

判断与错误处理

fail模块可用于中断剧本,但我们一般是不会无故中断,除非在满足条件的情况下可以中断,经常和when一起用

示例:

[student@master ansible]$ vim a.yml 
---
- name: test
  hosts: node1
  tasks:
    - name: shell
      shell:
        cmd: echo 'this is a string for testing--error'
      register: return_value
        
    - name: fail
      fail:
        msg: Conditions established,Interrupt running playbook
      when: "'error' in return_value.stdout"
        
    - name: debug
      debug:
        msg: I never execute,because the playbook has stopped
~ 
[student@master ansible]$ ansible-playbook a.yml 

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [shell] *******************************************************************
changed: [node1]

TASK [fail] ********************************************************************
fatal: [node1]: FAILED! => {"changed": false, "msg": "Conditions established,Interrupt running playbook"}

PLAY RECAP *********************************************************************
node1                      : ok=2    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

[student@master ansible]$ vim a.yml 
---
- name: test
  hosts: node1
  tasks:
    - name: shell
      shell:
        cmd: echo 'this is a string for testing--error'
      register: return_value

    - name: fail
      fail:
        msg: Conditions established,Interrupt running playbook
      when: "'error' not in return_value.stdout"

    - name: debug
      debug:
        msg: I never execute,because the playbook has stopped
~            
[student@master ansible]$ ansible-playbook a.yml 

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [shell] *******************************************************************
changed: [node1]

TASK [fail] ********************************************************************
skipping: [node1]

TASK [debug] *******************************************************************
ok: [node1] => {
    "msg": "I never execute,because the playbook has stopped"
}

PLAY RECAP *********************************************************************
node1                      : ok=3    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

或者使用 failed_when

示例:

[student@master ansible]$ vim f.yml
---
- name: test
  hosts: node1
  vars:
    aa: 1
  tasks:
    - name: debug1
      debug:
        msg: 123
          
    - name: debug2
      debug:
        msg: 234
      failed_when: aa is defined
        
    - name: debug3
      debug:
        msg: 345
~                     
[student@master ansible]$ ansible-playbook f.yml 

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [debug1] ******************************************************************
ok: [node1] => {
    "msg": 123
}

TASK [debug2] ******************************************************************
fatal: [node1]: FAILED! => {
    "msg": 234
}

PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

ignore_errors: yes 跳过错误、忽略错误

示例:

[student@master ansible]$ vim f.yml 
---
- name: test
  hosts: node1
  tasks:
    - name: debug1
      debug:
        msg: 123

    - name: debug2
      shell:
        cmd: ls /mnttttt

    - name: debug3
      debug:
        msg: 345
~ 
[student@master ansible]$ ansible-playbook f.yml 

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [debug1] ******************************************************************
ok: [node1] => {
    "msg": 123
}

TASK [debug2] ******************************************************************
fatal: [node1]: FAILED! => {"changed": true, "cmd": "ls /mnttttt", "delta": "0:00:00.008733", "end": "2025-09-03 16:54:52.786915", "msg": "non-zero return code", "rc": 2, "start": "2025-09-03 16:54:52.778182", "stderr": "ls: cannot access '/mnttttt': No such file or directory", "stderr_lines": ["ls: cannot access '/mnttttt': No such file or directory"], "stdout": "", "stdout_lines": []}

PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

[student@master ansible]$ vim f.yml 
---
- name: test
  hosts: node1
  tasks:
    - name: debug1
      debug:
        msg: 123

    - name: debug2
      shell:
        cmd: ls /mnttttt
      ignore_errors: yes

    - name: debug3
      debug:
        msg: 345
~ 
[student@master ansible]$ ansible-playbook f.yml 

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [debug1] ******************************************************************
ok: [node1] => {
    "msg": 123
}

TASK [debug2] ******************************************************************
fatal: [node1]: FAILED! => {"changed": true, "cmd": "ls /mnttttt", "delta": "0:00:00.010255", "end": "2025-09-03 16:57:40.837774", "msg": "non-zero return code", "rc": 2, "start": "2025-09-03 16:57:40.827519", "stderr": "ls: cannot access '/mnttttt': No such file or directory", "stderr_lines": ["ls: cannot access '/mnttttt': No such file or directory"], "stdout": "", "stdout_lines": []}
...ignoring

TASK [debug3] ******************************************************************
ok: [node1] => {
    "msg": 345
}

PLAY RECAP *********************************************************************
node1                      : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=1   

Changed_when:可以修改任务执行后的最终状态

示例:

[student@master ansible]$ vim f.yml 
---
- name: test
  hosts: node1
  tasks:
    - name: debug1
      debug:
        msg: 123
      changed_when: true
        
    - name: debug2
      debug:
        msg: 234
~ 
[student@master ansible]$ ansible-playbook f.yml 

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [debug1] ******************************************************************
changed: [node1] => {
    "msg": 123
}

TASK [debug2] ******************************************************************
ok: [node1] => {
    "msg": 234
}

PLAY RECAP *********************************************************************
node1                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

或者可以让任务执行状态显示失败

示例:

[student@master ansible]$ vim f.yml 
---
- name: test
  hosts: node1
  tasks:
    - name: debug1
      debug:
        msg: 123
      changed_when: false

    - name: debug2
      debug:
        msg: 234
~                   
[student@master ansible]$ ansible-playbook f.yml 

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [debug1] ******************************************************************
ok: [node1] => {
    "msg": 123
}

TASK [debug2] ******************************************************************
ok: [node1] => {
    "msg": 234
}

PLAY RECAP *********************************************************************
node1                      : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

例题:

从 http://ansible.example.com/materials/newhosts.j2 下载模板文件
完成该模板文件,用来生成新主机清单(主机的显示顺序没有要求),结构如下:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.122.10 node1.example.com node1
192.168.122.20 node2.example.com node2
192.168.122.30 node3.example.com node3
192.168.122.40 node4.example.com node4
192.168.122.50 node5.example.com node5
创建剧本/home/student/ansible/newhosts.yml,它将使用上述模板在 test01 主机组的主机上
生成文件/etc/newhosts

[student@master ansible]$ curl -O http://ansible.example.com/materials/newhosts.j2
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:-100   158  100   158    0     0   7523      0 --:--:-- --:--:-- --:--:--  9875
[student@master ansible]$ vim newhosts.j2 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
{% for sy in groups.all %}
{{ hostvars[sy].ansible_default_ipv4.address }} {{ hostvars[sy].ansible_fqdn }}
{% endfor %}
~                
[student@master ansible]$ vim newhosts.yml
---
- name: get fact
  hosts: all
- name: cp file
  hosts: node1
  tasks:
    - name: cp file1
      template:
        src: /home/student/ansible/newhosts.j2
        dest: /etc/newhosts
~  
[student@master ansible]$ ansible-playbook newhosts.yml 

PLAY [get fact] ****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]
ok: [node4]
ok: [node3]
ok: [node2]
ok: [node5]

PLAY [cp file] *****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [cp file1] ****************************************************************
changed: [node1]

PLAY RECAP *********************************************************************
node1                      : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node4                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node5                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[student@master ansible]$ ansible node1 -m shell -a 'cat /etc/newhosts'
node1 | CHANGED | rc=0 >>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.122.10 node1.example.com
192.168.122.20 node2.example.com
192.168.122.30 node3.example.com
192.168.122.40 node4.example.com
192.168.122.50 node5.example.com

编写剧本修改远程文件内容
创建剧本 /home/student/ansible/newissue.yml,满足下列要求:
1)在所有清单主机上运行,替换/etc/issue 的内容
2)对于 test01 主机组中的主机,/etc/issue 文件内容为 test01
3)对于 test02 主机组中的主机,/etc/issue 文件内容为 test02
4)对于 web 主机组中的主机,/etc/issue 文件内容为 Webserver

[student@master ansible]$ vim inventory 
[test01]
node1

[test02]
node2

[web]
node3
node4

[test05]
node5

[webtest:children]
web
~ 
[student@master ansible]$ vim newissue.yml
---
- name: replace file
  hosts: all
  tasks:
    - name: test1
      copy:
        content: |
          {% if 'test01' in group_names %}
          test01
          {% elif 'test02' in group_names %}
          test02
          {% elif 'web' in group_names %}
          Webserver
          {% endif %}
        dest: /etc/issue
~ 
[student@master ansible]$ ansible-playbook newissue.yml 

PLAY [replace file] ************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]
ok: [node4]
ok: [node2]
ok: [node5]
ok: [node3]

TASK [test1] *******************************************************************
changed: [node2]
changed: [node3]
changed: [node5]
changed: [node4]
changed: [node1]

PLAY RECAP *********************************************************************
node1                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node2                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node3                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node4                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
node5                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[student@master ansible]$ ansible all -m shell -a 'cat /etc/issue'
node3 | CHANGED | rc=0 >>
Webserver
node2 | CHANGED | rc=0 >>
test02
node1 | CHANGED | rc=0 >>
test01
node4 | CHANGED | rc=0 >>
Webserver
node5 | CHANGED | rc=0 >>

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐