一、playbook循环
成都创新互联是网站建设专家,致力于互联网品牌建设与网络营销,专业领域包括网站制作、成都网站制作、电商网站制作开发、成都小程序开发、微信营销、系统平台开发,与其他网站设计及系统开发公司不同,我们的整合解决方案结合了恒基网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,且不断评估并优化我们的方案,为客户提供全方位的互联网品牌整合方案!# vi /etc/ansible/while.yml //加入如下内容 --- - hosts: yw02 user: root tasks: - name: change mode for files file: path=/tmp/{{ item }} mode=600 with_items: - 1.txt - 2.txt - 3.txt说明: 这里用到了一个file模块,后面是路径,如果是一个文件,可以写/tmp/1.txt,多个文件,可以用一个循环,with_items为循环的对象
执行:ansible-playbook while.yml
报错:对方机器没有这三个文件,在mode前增加state=touch,创建一个。
再执行:ansible-playbook while.yml
执行成功,先创建,再定义它的权限。
二、playbook中的条件判断
# vi /etc/ansible/when.yml //加入如下内容 --- - hosts: testhost user: root gather_facts: True tasks: - name: use when shell: touch /tmp/when.txt when: ansible_ens33.ipv4.address == "192.168.149.131"说明:
这里hosts写testhost,写一台机器就没有意义了。
这里收集了facts,这行也可以删除,默认就是收集,接下来要用到它了。
ansible yw02 -m setup 可以查看到所有的facter信息。
when就是一个条件判断,当这个条件成立的时候,才会执行这个shell。
从facts收集的信息里找出ansible_ens33下的ipv4的address是否为该IP,条件成立,则执行shell,如果没有这个条件,则会直接执行。
当有分级时,每一级下面的要打点,没有分级就直接写等号了。
when不仅仅是针对facts,还可以针对其他情况,比如判断文件、目录是否存在。
"ansible_facts": //最总的一级 "ansible_all_ipv4_addresses":[ //判断条件从这一级开始,这里是一个数组,把所有的ipv4列出来,但是它下面还有ipv6有两个,要判断的话得需判断两个,所以这不是想要的。 "192.168.98.134", "192.168.149.132" ], ... "ansible_ens33": { "active": true, "device": "ens33", ... "hw_timestamp_filters": [], "ipv4": { "address": "192.168.149.132", "broadcast": "192.168.149.255", "netmask": "255.255.255.0", "network": "192.168.149.0" }, ...[root@fuxi01 ansible]# ansible-playbook when.yml PLAY [testhost] ********************************************************************************************************************** TASK [Gathering Facts] *************************************************************************************************************** fatal: [yw02]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host yw02 port 22: No route to host", "unreachable": true} ok: [yw03] ok: [127.0.0.1] TASK [use when] ********************************************************************************************************************** skipping: [127.0.0.1] [WARNING]: Consider using the file module with state=touch rather than running 'touch'. If you need to use command because file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. changed: [yw03] PLAY RECAP *************************************************************************************************************************** 127.0.0.1 : ok=1 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0 yw02 : ok=0 changed=0 unreachable=1 failed=0 skipped=0 rescued=0 ignored=0 yw03 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0三、playbook中的handlers
执行task之后,服务器发生变化之后要执行的一些操作,比如我们修改了配置文件后,需要重启一下服务。
# vi /etc/ansible/handlers.yml//加入如下内容 --- - name: handlers test hosts: yw02 user: root tasks: - name: copy file copy: src=/etc/passwd dest=/tmp/aaa.txt notify: test handlers handlers: - name: test handlers shell: echo "111111" >> /tmp/aaa.txt说明:只有copy模块真正执行成功后,才会去调用下面的handlers相关的操作。也就是说如果1.txt和2.txt内容是一样的,并不会去执行handlers里面的shell相关命令。 这种比较适合配置文件发生更改后,重启服务的操作。类似于command1 && command2(handlers),前面的命令执行成功后,才执行这个handler,需要用notify关联起来。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。