Tag:任务标签
tag用于标记一个或多个任务(task)或是一个或多个角色(role),以便在执行playbook时只运行被标记的任务或角色。这可以帮助我们精细控制playbook的执行范围,只执行我们想要执行的任务或角色,提高执行效率和安全性。
- 一个任务打一个标签
- 一个任务打多个标签
- 多个任务打一个标签
使用标签时:
- -t:指定某个标签
- –skip-tags:执行除此标签外的所有标签
示例:
- name: install nginx yum: name: nginx state: latest tags: - nginx
ansible-playbook playbook.yml --tags nginx
什么时候使用:
Ansible的标签(tag)用于标记一组任务或一部分特定的操作,使得我们可以在运行Ansible Playbook的时候只运行被标记的任务,而跳过其它的任务。标签可以用于不同的场景:
- 部分更新:如果你只想更新一部分主机或者一部分任务,你可以给这些主机和任务打上相应的标签,然后只运行带这些标签的任务。这样可以避免无需的更新和不必要的执行。
- 调试:当你遇到一些问题,需要逐步调试任务,你可以给需要调试的一部分任务打上标签,然后只运行带有标签的任务,这样可以快速定位问题。
- 条件执行:当你需要在一些特定的条件下才运行某些任务时,你可以使用标签来控制,只有满足条件的任务才会被执行。
需要注意的是,标签并不是必须的,只有在需要的情况下才需要使用。
Include:任务复用
Include用于将一个或多个文件或任务列表包含到当前任务或playbook中。它可以帮助我们组织和重用任务和playbook,提高代码的可读性和可维护性。
比如:A项目需要重启某服务,B项目也需要重启这个服务。那么就可以使用Include来减少工作量
案例:多任务调用相同task
- 定义一个restart的yml文件
vim restart_nginx.yml - name: Restart nginx systemd: name: nginx state: restarted
- A项目调用restart_nginx.yml
- hosts: web tasks: - name: A project command: echo "A" - name: Restart nginx include: restart_nginx.yml
- B项目调用restart_nginx.yml
- hosts: web tasks: - name: B project command: echo "B" - name: Restart nginx include: restart_nginx.yml
什么时候使用:
Ansible的include用于在playbook中引用其他文件或任务。它可以用来将大型playbook分解为可维护的模块,或在多个playbook之间共享任务和变量。
以下是一些使用include的情况:
- 引用其他yaml文件:当你有一个大型playbook时,它可能会变得混乱和难以维护。你可以使用include来将文件拆分成小模块,方便理解和修改。
- 公共任务:如果你有两个不同的playbook需要完成相同的任务,你可以使用include来避免重复代码。
- 动态生成任务:有时你需要根据某些条件动态生成任务。在这种情况下,你可以使用include和变量来创建基于条件的任务。
总的来说,使用include可以让你的playbook更加模块化和易于扩展,从而提高效率和可维护性。
Ignore_errors:错误处理关键字
当在执行Ansible任务时,设置"ignore_errors"参数为True,表示在执行该任务时,如果遇到错误,Ansible不会终止任务的执行,而是会将错误记录下来,然后继续执行后续任务。
这个参数通常用于在某些情况下,某些任务的失败并不会影响整个任务链的执行,需要继续执行后续任务的场景中。
示例:
--- - hosts: remote_user: root tasks: - name: Ignore False command: /bin/false ignore_errors: yes - name: touch file file: patch=/tmp/yyang.txt state=touch
这个示例是说,第一个name执行失败后,继续执行后面name,而不是停止。
什么时候使用:
ignore_errors
是 Ansible 中一个非常有用的参数,它用于在任务执行失败时继续处理并执行后续的任务,而不是停止执行并抛出错误。
通常当你需要在 playbook 中执行一些任务,但是不希望遇到错误时中止 playbook 的执行时,可以使用 ignore_errors
参数。例如,当你需要对多个主机进行部署时,其中某些主机可能不可达或者部署失败了,但是这些失败不应该影响其他主机的部署。
另外,ignore_errors
也可以与 register
结合使用,以在任务执行失败时仍然将其添加到变量中。这在某些情况下是非常有用的,特别是当你需要在 playbook 中记录某些操作的状态时。
但是需要注意的是,如果使用了 ignore_errors
参数,那么后续的任务将不会检查该任务的执行结果。因此,在使用 ignore_errors
时需要格外小心,确保后续的任务仍能够正常执行。
force_handlers
中途的task执行失败,强制执行handlers。
示例:
- hosts: force_handlers: yes tasks: - name: Touch file file: path=/tmp/handles state=touch notify: Restart nginx server - name: Installed packages yum: name: aaa state: latest handlers: - name: Restart nginx server systemd: name=nginx state=restarted
此示例说明第二个name执行会报错,但是依然会执行handlers。
什么时候使用:
force_handlers
是一个用于强制执行异常处理程序的参数。它可以在playbook
中的任务、剧本或role
级别上定义。当设置为True
时,它会在出现错误时强制执行异常处理程序,并覆盖其他异常处理程序的执行设置。
通常,force_handlers
用于在紧急情况下执行异常处理程序,例如在系统崩溃或重要服务停止响应时。在这些情况下,为了尽快解决问题,我们需要在异常处理程序的任何其他限制条件下执行处理程序,以便能够及时分析问题并采取必要的措施。
但是,force_handlers
应该谨慎使用。因为它会覆盖其他异常处理程序的执行设置,所以当在正常情况下使用时,它有可能会导致程序的异常处理程序没有按照预期执行,从而增加问题的解决难度。
change_when
change_when参数用于控制在何种条件下报告任务状态的更改。
默认情况下,如果任务对被管理系统进行了任何修改,Ansible会将任务报告为“已更改”。但是,有些情况下,您只希望在特定条件下才将任务报告为“已更改”,而不对被控端做出修改时输出ok。
changed_when: false
什么时候使用:
Ansible的when
关键字是用来控制条件执行的,而change_when
则是在任务执行发生改变时改变任务状态的。通常情况下,change_when
会在任务成功(即执行了改变)时设置为True,
而在任务失败或不执行改变时设置为False。使用change_when
可以改变任务的状态,例如将一个成功的任务标记为失败,或将一个失败的任务标记为成功。这通常用于特殊需求的情况下,例如当您需要在任务执行成功时执行其他任务,或者当您想要忽略一些不重要的警告消息时。change_when
通常与register
一起使用,因为这样可以方便地获取任务执行的结果并确定是否需要改变任务状态。
vault:数据加密
将敏感的数据文件进行加密,而非存放在明文的playbook中。
示例:
[root@localhost roles]# echo "hello world" >>hello.yml [root@localhost roles]# ansible-vault-2 encrypt hello.yml New Vault password: Confirm New Vault password: Encryption successful [root@localhost roles]# cat hello.yml $ANSIBLE_VAULT;1.1;AES256 35353638363039623231623338646562613363623031663262653162306664633939306437306134 3039666238623039383237623233613639646666346233360a663864313638636562333931656232 37616163323765373339376262343862396661363933613539646239636361663066653235663738 3362653964373464360a353030386536386238613932313936633765383232326237393566633430 3766
输入密码后再查看文件只能看到加密后的数据。
查看内容:需要输入密码
[root@localhost roles]# ansible-vault-2 view hello.yml Vault password: hello world
解除加密:需要输入密码
[root@localhost roles]# ansible-vault-2 decrypt hello.yml Vault password: Decryption successful [root@localhost roles]# cat hello.yml hello world
什么时候使用:
Ansible Vault是一种加密数据的工具,它可以用来加密Ansible Playbooks、变量文件和其他敏感数据,它的主要用途是为了保护机密数据的安全性。
使用Ansible Vault通常在以下情况下:
- 在Playbooks中使用敏感信息,如密码或机密的API密钥等。
- 在变量文件中存储敏感数据,如数据库密码、SSH密钥等。
- 存储敏感数据,如证书等。
在这些情况下,使用Ansible Vault可以帮助您保护敏感数据,防止它们被泄露或意外地暴露给其他人。