【2023】ansible-高级任务控制

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 【2023】ansible-高级任务控制

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的时候只运行被标记的任务,而跳过其它的任务。标签可以用于不同的场景:

  1. 部分更新:如果你只想更新一部分主机或者一部分任务,你可以给这些主机和任务打上相应的标签,然后只运行带这些标签的任务。这样可以避免无需的更新和不必要的执行。
  2. 调试:当你遇到一些问题,需要逐步调试任务,你可以给需要调试的一部分任务打上标签,然后只运行带有标签的任务,这样可以快速定位问题。
  1. 条件执行:当你需要在一些特定的条件下才运行某些任务时,你可以使用标签来控制,只有满足条件的任务才会被执行。

需要注意的是,标签并不是必须的,只有在需要的情况下才需要使用。

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的情况:

  1. 引用其他yaml文件:当你有一个大型playbook时,它可能会变得混乱和难以维护。你可以使用include来将文件拆分成小模块,方便理解和修改。
  2. 公共任务:如果你有两个不同的playbook需要完成相同的任务,你可以使用include来避免重复代码。
  1. 动态生成任务:有时你需要根据某些条件动态生成任务。在这种情况下,你可以使用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通常在以下情况下:

  1. 在Playbooks中使用敏感信息,如密码或机密的API密钥等。
  2. 在变量文件中存储敏感数据,如数据库密码、SSH密钥等。
  3. 存储敏感数据,如证书等。

在这些情况下,使用Ansible Vault可以帮助您保护敏感数据,防止它们被泄露或意外地暴露给其他人。

目录
相关文章
|
运维 Cloud Native Go
Ansible自动化:简化你的运维任务
Ansible自动化:简化你的运维任务
123 0
|
3月前
|
运维 Unix 应用服务中间件
自动化运维:使用Ansible简化日常任务
【8月更文挑战第4天】在现代IT架构中,自动化运维成为提升效率、减少人为错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化日常的运维任务,通过实际代码示例,展示配置管理、软件部署和系统更新等操作。我们将探索如何利用Ansible的简洁语法和强大功能来优化工作流程,从而为读者提供一套实用的自动化解决方案。
|
3月前
|
运维 监控 Devops
自动化运维的魔法:如何利用Ansible简化日常任务
【8月更文挑战第24天】在快速迭代的互联网时代,运维效率成为企业竞争力的关键。本文将介绍一种强大的自动化工具——Ansible,它如何通过简化配置管理和自动化部署来提升运维效率。你将了解到Ansible的基本概念、优势以及如何应用它来优化你的工作流程。让我们一起探索这个自动化的魔法世界,释放运维的潜能!
122 60
|
29天前
|
运维 应用服务中间件 数据库
自动化运维:使用Ansible简化日常任务
【10月更文挑战第2天】在快速迭代的软件开发周期中,运维工作往往变得重复而繁琐。本文将介绍如何使用Ansible这一强大的自动化工具来简化日常任务,从而提升效率并减少人为错误。从基础配置到复杂部署,我们将一步步展示如何通过编写简单的Playbook来实现自动化管理。
64 3
|
2月前
|
运维 Ubuntu 应用服务中间件
自动化运维:使用Ansible进行配置管理和任务自动化
【9月更文挑战第27天】在现代IT基础设施中,自动化运维是提高效率、减少人为错误和确保系统一致性的关键。本文将介绍如何使用Ansible,一个流行的开源IT自动化工具,来简化日常的运维任务。我们将探索Ansible的核心概念,包括它的架构、如何安装和使用它,以及一些实际的使用案例。无论你是新手还是有经验的运维专家,这篇文章都会提供有价值的见解和技巧,以帮助你更好地利用Ansible实现自动化。
|
2月前
|
运维 监控 安全
自动化运维:使用Ansible简化日常任务
【9月更文挑战第19天】在现代IT架构中,自动化运维是提升效率和减少人为错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化日常运维任务,包括安装软件、配置系统和应用部署等。通过实际的代码示例,我们将展示如何编写简单的Ansible playbook来实现这些任务,并讨论其在真实场景中的应用价值。
67 5
|
2月前
|
运维 应用服务中间件 nginx
自动化运维:使用Ansible简化日常任务
【9月更文挑战第2天】在快速迭代的软件开发周期中,高效可靠的运维成为项目成功的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化日常运维任务,从基础概念到实战应用,带你一步步构建自动化运维流程,解锁更高效的工作方式。
|
3月前
|
运维 Ubuntu 应用服务中间件
自动化运维:使用Ansible简化日常任务
【8月更文挑战第31天】告别繁琐,拥抱高效。本文带你领略Ansible的魅力,通过具体示例展示如何用它来自动化你的日常IT运维任务。准备好让你的服务器管理工作变得简单而有趣!
|
3月前
|
机器学习/深度学习 运维 Ubuntu
自动化运维:使用Ansible简化日常任务探索Python编程之美:从基础到进阶
【8月更文挑战第28天】在快速迭代的软件开发周期中,运维工作的效率至关重要。本文将介绍如何使用Ansible这一强大的自动化工具来简化日常的运维任务,通过代码示例展示如何配置和使用Ansible,以及它如何帮助提升工作效率和减少人为错误。文章将深入讨论Ansible的核心概念,包括Playbooks和Tasks,并探讨如何利用这些概念进行高效的系统管理。 【8月更文挑战第28天】在数字时代的浪潮中,编程已成为一门艺术和科学。本文将通过Python语言的镜头,带领读者踏上一段从零基础到熟练运用的旅程。我们将一起探索Python的简洁语法、强大库支持以及它在数据科学、网络开发等领域的应用。无论你
|
3月前
|
运维 JavaScript 安全
自动化运维:使用Ansible简化日常任务深入理解Node.js事件循环和异步编程
【8月更文挑战第27天】在快节奏的技术环境中,自动化不再是奢侈品,而是必需品。本文将引导你通过Ansible实现自动化运维,从基础到高级应用,解锁高效管理服务器群的秘诀,让你的IT操作更加流畅和高效。