Ansible剧本流程控制

您所在的位置:网站首页 ansible使用手册 Ansible剧本流程控制

Ansible剧本流程控制

2023-01-21 06:12| 来源: 网络整理| 查看: 265

handlers触发器

notify:监控上面的模块执行是否发生变化 chufa:自定义的任务名称,自动去handlers里面匹配相对应的任务名称执行动作 下方是copy了/data/copy/下的文件到server2组里的主机/data/monster/handlers/下,notify监控发生了变化后触发chufa任务。

- hosts: server2 gather_facts: no tasks: - name: handlers触发器demo copy: src: /data/copy/ dest: /data/monster/handlers/ notify: - chufa handlers: - name: chufa shell: 'date >> /data/monster/handlers/time.log' [root@monster2 handlers]# cat /data/monster/handlers/time.log Wed Dec 28 17:20:15 EST 2022 [root@monster2 handlers]# when条件

下面剧本是所有主机里面,主机名叫monster2或monster3的就删除handlers目录 gather_facts需要设置开启或者直接不写这一行默认是开启,因为需要使用内置变量ansible_hostname验证主机名 如果只判断一台主机可以直接ansible_hostname == “monster2”

- hosts: all gather_facts: yes tasks: - name: when使用 shell: rm -rf /data/monster/handlers when: (ansible_hostname is match ("monster2|monster3"))

警告无视就行,它建议不要直接使用rm删除,通过文件模块用state=absent的方式 下面可以看见,138(mosnter2),139(mosnter3)两台主机都执行成功了,但是只有只有138有修改状态,因为monster3上面没有这个目录,skipped跳过。

在这里插入图片描述

with_items循环

删除所有/data/monster/下的monster.log 和monster.yml文件,变量名默认item没有s,with_items里面的变量全匹配后任务才执行完

- hosts: all gather_facts: no tasks: - name: with_items使用 shell: rm -rf /data/monster/{{item}} with_items: - monster.log - monster.yml with_items多变量循环

同样with_items里面的变量全匹配后任务才执行完 使用键值对key:value的形式 touch:创建,absent:删除

- hosts: all gather_facts: no tasks: - name: 创建目录with file: path: /data/monster/with state: directory - name: 循环创建文件monster1-5,最后再删掉文件2。 file: path: /data/monster/with/{{item.mulu}} state: "{{item.wenjian}}" with_items: - { mulu: 'monster1', wenjian: 'touch' } - { mulu: 'monster2', wenjian: 'touch' } - { mulu: 'monster3', wenjian: 'touch' } - { mulu: 'monster4', wenjian: 'touch' } - { mulu: 'monster5', wenjian: 'touch' } - { mulu: 'monster2', wenjian: 'absent' }

在这里插入图片描述 分发主机查看with目录结构,monster2最后被删了,只有1345

[root@monster2 with]# tree . ├── monster1 ├── monster3 ├── monster4 └── monster5 [root@mosnter3 with]# tree . ├── monster1 ├── monster3 ├── monster4 └── monster5 tags标签

写法和上面一样,和模块同级对其,使用 - 方式设置标签 可打多个标签,也可以重复标签

- hosts: server2 gather_facts: no tasks: - name: 分发到monster2主机 copy: src: /data/www/monster.cn/v0.0.10 dest: /data/www/monster.cn/ backup: yes tags: - v0.0.10 - hosts: server3 gather_facts: no tasks: - name: 分发到monster2主机 copy: src: /data/www/monster.cn/v0.0.9 dest: /data/www/monster.cn/ backup: yes tags: - v0.0.9

单独安标签执行剧本 -t 指定标签 剧本文件

[root@monster1 ~]# ansible-playbook -t v0.0.10 juben.yml

查看目录结构

[root@monster2 www]# tree . └── monster.cn └── v0.0.10 └── index.html 2 directories, 1 file

指定多个标签,标签之间用逗号隔开

[root@monster1 ~]# ansible-playbook -t v0.0.10,v0.0.9 juben.yml

刚才v0.0.10执行过了,138未做更改 如果目录没有修改,只修改里面的文件内容同样会识别到,重新分发 在这里插入图片描述

查看目录结构

[root@mosnter3 www]# tree . └── monster.cn └── v0.0.9 └── index.html 2 directories, 1 file [root@mosnter3 www]# ignore_errors忽略错误

忽略错误使用:同样在模块同级对其,ignore_errors:yes 如下在第一个任务创建目录的时候故意弄错,先把忽略错误注释掉,执行看看

- hosts: server2 gather_facts: no tasks: - name: monster2故意创建错的目录 file: path: /data/monster/error.log/ state: touch tags: - test_error # ignore_errors: yes - hosts: server3 gather_facts: no tasks: - name: 忽略monster2错误会执行此任务 file: path: /data/monster/error.log state: touch tags: - test_error

提示致命错误,然后就结束剧本了 在这里插入图片描述

把注释去掉后,仍能提示任务1的致命错误,但是紧接着后面…ignoring(忽略),然后任务2的接着执行了

[root@monster1 ~]# ansible-playbook -t test_error juben.yml ________________ < PLAY [server2] > ---------------- \ / \ //\ \ |\___/| / \// \\ /0 0 \__ / // | \ \ / / \/_/ // | \ \ @_^_@'/ \/_ // | \ \ //_^_/ \/_ // | \ \ ( //) | \/// | \ \ ( / /) _|_ / ) // | \ _\ ( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-. (( / / )) ,-{ _ `-.|.-~-. .~ `. (( // / )) '/\ / ~-. _ .-~ .-~^-. \ (( /// )) `. { } / \ \ (( / )) .----~-.\ \-' .~ \ `. \^-. ///.----..> \ _ -~ `. ^-` ^-_ ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~ /.-~ _________________________ < TASK [monster2故意创建错的目录] > ------------------------- \ / \ //\ \ |\___/| / \// \\ /0 0 \__ / // | \ \ / / \/_/ // | \ \ @_^_@'/ \/_ // | \ \ //_^_/ \/_ // | \ \ ( //) | \/// | \ \ ( / /) _|_ / ) // | \ _\ ( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-. (( / / )) ,-{ _ `-.|.-~-. .~ `. (( // / )) '/\ / ~-. _ .-~ .-~^-. \ (( /// )) `. { } / \ \ (( / )) .----~-.\ \-' .~ \ `. \^-. ///.----..> \ _ -~ `. ^-` ^-_ ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~ /.-~ fatal: [192.168.71.138]: FAILED! => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "msg": "Error, could not touch target: [Errno 21] Is a directory: '/data/monster/error.log/'", "path": "/data/monster/error.log/"} ...ignoring ________________ < PLAY [server3] > ---------------- \ / \ //\ \ |\___/| / \// \\ /0 0 \__ / // | \ \ / / \/_/ // | \ \ @_^_@'/ \/_ // | \ \ //_^_/ \/_ // | \ \ ( //) | \/// | \ \ ( / /) _|_ / ) // | \ _\ ( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-. (( / / )) ,-{ _ `-.|.-~-. .~ `. (( // / )) '/\ / ~-. _ .-~ .-~^-. \ (( /// )) `. { } / \ \ (( / )) .----~-.\ \-' .~ \ `. \^-. ///.----..> \ _ -~ `. ^-` ^-_ ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~ /.-~ ___________________________ < TASK [忽略monster2错误会执行此任务] > --------------------------- \ / \ //\ \ |\___/| / \// \\ /0 0 \__ / // | \ \ / / \/_/ // | \ \ @_^_@'/ \/_ // | \ \ //_^_/ \/_ // | \ \ ( //) | \/// | \ \ ( / /) _|_ / ) // | \ _\ ( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-. (( / / )) ,-{ _ `-.|.-~-. .~ `. (( // / )) '/\ / ~-. _ .-~ .-~^-. \ (( /// )) `. { } / \ \ (( / )) .----~-.\ \-' .~ \ `. \^-. ///.----..> \ _ -~ `. ^-` ^-_ ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~ /.-~ changed: [192.168.71.139] ____________ < PLAY RECAP > ------------ \ / \ //\ \ |\___/| / \// \\ /0 0 \__ / // | \ \ / / \/_/ // | \ \ @_^_@'/ \/_ // | \ \ //_^_/ \/_ // | \ \ ( //) | \/// | \ \ ( / /) _|_ / ) // | \ _\ ( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-. (( / / )) ,-{ _ `-.|.-~-. .~ `. (( // / )) '/\ / ~-. _ .-~ .-~^-. \ (( /// )) `. { } / \ \ (( / )) .----~-.\ \-' .~ \ `. \^-. ///.----..> \ _ -~ `. ^-` ^-_ ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~ /.-~ 192.168.71.138 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1 192.168.71.139 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 [root@monster1 ~]#


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3