- 指定hosts文件
- 默认 /etc/ansible/hosts
- 可以通过-i选项指定
- 关于facts
- 每台目标机器上可以配置一些属性,就是所谓的facts,配置目录:/etc/ansible/facts.d/
- 缓存facts:
- 参考:
- 可以缓存到文件或缓存到redis
- 设置为参考缓存
gathering 值设置为smart
smart 表示默认收集 facts,但 facts 已有的情况下不会收集,即使用缓存 facts;
implicit 表示默认收集 facts,要禁止收集,必须使用 gather_facts: False
explicit 则表示默认不收集,要显式收集,必须使用 gather_facts: Ture - 缓存到json文件:
12fact_caching = jsonfilefact_caching_connection = /tmp/ansible_facts_cachedir
需要手动创建目录,只要文件存在就不会再次获取,哪怕设置为不参考缓存,只要设置了缓存,也会写缓存的 - 缓存到redis:
123fact_caching_timeout = 86400fact_caching = redisfact_caching_connection = 127.0.0.1:6379
- 刷新缓存
- 对于文件缓存,可直接删除缓存文件
- 也可以直接 ansible -m setup, 这个会无视缓存文件而重新获取facts的
- 设置为参考缓存
- 设置持久连接
- ssh中只设置: -o ControlPath=/home/phpor/.ansible/cp/4206c512dc 而不设置 -o ControlPersist=3600s 是不能持久连接的
- 设置并发
- 1个playbook中可以设置多个任务,在多台机器上执行,可以通过serial: 1 让所有机器顺序执行
- 并行执行的情况下,是按照playbook中定义的任务一个任务一个任务的执行的,第一个任务在serial定义的数量的机器上执行以后,在执行下一个任务,如果serial没有定义,则现在所有的机器上执行完第一个任务,再在所有的机器上执行下一个任务;如果需要每个机器执行完所有任务后再在下一个机器上执行,则设置serial: 1 (注意: 不是 并发为1就行的,即使并发为1,如果没有serial设置的话,也是所有机器上执行完第一个任务再在所有机器上开启下一个任务,对于升级应用的时候非常有用,因为步骤通常是:摘掉负载均衡,升级,挂回到负载均衡; 如果一下子都摘掉就完蛋了)
- -f 选项可以指定同时在多少个机器上执行
- 通过 async 和poll可以同时在所有机器上执行
12345678910- hosts: alltasks:- name: Install mlocateyum: name=mlocate state=installed- name: Run updatedbcommand: /usr/bin/updatedbasync: 300poll: 10
你会发现当你使用上面的例子控制超过5台机器的时候,command.在上面yum模块会先在5台机器上跑,完成后再继续下面的机器.而上面command模块的任务会一次性在所有机器上都执行了,然后监听它的回调结果
- 限制并发: https://www.cnblogs.com/breezey/p/10996651.html
- playbook中的hosts可以定义在哪些机器上执行,可以通过–limit选项只在指定的机器上执行,不过limit指定的主机一定要是playbook中的hosts指定的主机的子集,不能是playbook中的hosts指定的主机的集合外的机器
- include_tasks: 包含子任务
- 参考: https://www.cnblogs.com/jinyuanliu/p/10655374.html
- 子任务的文件格式和playbook的格式不太一样,不能包含hosts属性,而playbook必须包含hosts属性
- 包含的任务地点文件名不能使用通配符
- 关于变量加载的约定:
- hosts文件旁边的 group_vars 和 host_vars 目录中的 .yml .yaml .json 扩展名或无扩展名的文件会被参考加载到对应的group和host的变量,执行playbook时,如果playbook dir(默认当前目录,可以通过–playbook-dir指定)中也存在 group_vars 或 host_vars 目录,则该目录的优先级更高,参考:https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#group-variables
- roles中的task中引用的文件默认是files,templates,tasks 子目录中的文件: 参考: https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html
如果tasks目录中和template目录中有相同文件名的文件,则引用的时候可能会搞错,所以,尽量不重名吧
- 变量引用:
- 关联数组中的变量可以用 arr[‘key’] 或 arr.key 两种不同的方式引用