自动化运维工具Ansible教程(二)【进阶篇】

news2025/1/15 6:51:30

文章目录

  • 前言
  • Ansible 入门到精通
    • 自动化运维工具Ansible教程(一)【入门篇】
    • 自动化运维工具Ansible教程(二)【进阶篇】
    • 精通篇
  • 进阶篇
    • 1. Ansible 的高级主题(例如:角色、动态清单、变量管理等)
      • **1. 角色(Roles)**:
      • **2. 动态清单(Dynamic Inventory)**:
      • **3. 变量管理(Variable Management)**:
      • **4. 条件和循环(Conditionals and Loops)**:
      • **5. 模板和变量替换(Templates and Variable Substitution)**:
    • 2. 使用 Ansible Vault 进行加密和解密
    • 3. Ansible 远程执行和连接方式
    • 4. 高级 Ansible Playbook 技巧及示例
    • 5. 使用 Ansible 进行系统配置和部署
    • 6. Ansible 的容器和云集成
    • 7. Ansible 自动化测试和检查
    • 8. Ansible 运维和故障排除
  • 参考文档

在这里插入图片描述

前言

ansible 学习大纲
在这里插入图片描述
Ansible 是一个开源的自动化工具,用于配置管理、应用部署和任务执行。它以简单、可读性强的 YAML 格式的 Playbooks 为基础,使得自动化任务变得简单、可维护和可扩展。

  1. 简单易用:Ansible 的设计目标之一是简单易用。它使用 YAML 语法定义任务和配置,无需编写复杂的脚本或编程代码。初学者可以快速上手,同时也适用于复杂的自动化需求。

  2. 无代理:Ansible 使用 SSH 协议进行远程连接和执行任务,无需在远程主机上安装任何代理程序。这使得部署和管理变得简单,同时减少了对目标主机的依赖和配置要求。

  3. 基于模块化:Ansible 基于模块化的架构,提供了丰富的模块来管理各种不同类型的系统、服务和应用。这些模块可以执行各种任务,如安装软件包、配置文件、启动服务等。

  4. 声明式语法:Ansible Playbooks 使用声明式语法描述所需的状态和配置,而不是编写特定的步骤和命令。这使得配置管理和自动化任务的维护更加直观和可读性强。

  5. 可扩展性:Ansible 可以轻松扩展以适应不同规模和复杂度的环境。它支持分组管理、变量管理、角色和插件等功能,可以构建复杂的自动化流程和组织结构。

  6. 强大的生态系统:Ansible 拥有庞大的社区和活跃的贡献者,提供了大量的模块、角色和插件。Ansible Galaxy 是一个社区驱动的集市,提供了现成的角色和模块,可用于加速和共享自动化任务的开发。

Ansible 的应用场景广泛,可以用于服务器配置管理、应用部署、云基础设施管理、网络设备配置、持续集成/持续部署 (CI/CD) 等。它的简单性、可读性和可扩展性使得 Ansible 成为许多组织和开发团队的首选自动化工具。

Ansible 入门到精通

自动化运维工具Ansible教程(一)【入门篇】

  1. Ansible 简介
  2. 安装 Ansible
  3. Ansible 的基本概念和核心组件
  4. 编写和运行第一个 Ansible Playbook
  5. 主机清单和组织结构
  6. Ansible 常用模块和任务
  7. Ansible 变量和模板
  8. Ansible 条件和循环

自动化运维工具Ansible教程(二)【进阶篇】

  1. Ansible 的高级主题(例如:角色、动态清单、变量管理等)
  2. 使用 Ansible Vault 进行加密和解密
  3. Ansible 远程执行和连接方式
  4. 高级 Ansible Playbook 技巧
  5. 使用 Ansible 进行系统配置和部署
  6. Ansible 的容器和云集成
  7. Ansible 自动化测试和检查
  8. Ansible 运维和故障排除

精通篇

  1. Ansible 在企业级环境中的应用和扩展
  2. Ansible 与其他自动化工具的集成
  3. Ansible 最佳实践和实际案例分析
  4. Ansible 性能优化和容错机制
  5. Ansible 社区和资源

进阶篇

1. Ansible 的高级主题(例如:角色、动态清单、变量管理等)

Ansible 的一些高级主题:

  1. 角色(Roles):角色是一种组织和重用 Ansible Playbooks 的方式。角色允许将任务、变量和文件组织成逻辑单元,以便更好地管理和复用代码。通过角色,可以将复杂的 Playbooks 拆分成可维护和可扩展的组件。

  2. 动态清单(Dynamic Inventory):动态清单是一种动态生成 Ansible 主机清单的方法。它允许从外部源(如云提供商、配置管理数据库、API 等)获取主机信息,并将其用于 Ansible 的执行。动态清单使得管理大规模和动态变化的环境变得更加灵活和自动化。

  3. 变量管理(Variable Management):Ansible 中的变量用于存储和传递数据,以便在 Playbooks 和模板中使用。变量可以是全局的、主机特定的或任务特定的。Ansible 提供了多种方式来定义和管理变量,如主机变量、组变量、剧本变量、角色变量等。

  4. 条件和循环(Conditionals and Loops):条件和循环允许根据条件执行特定的任务或重复执行一系列任务。Ansible 提供了条件语句(如 when)和循环语句(如 loop)来实现这些功能。条件和循环可以帮助根据不同的情况执行不同的任务或迭代处理列表和字典。

  5. 模板和变量替换(Templates and Variable Substitution):Ansible 允许使用模板引擎(如 Jinja2)来生成配置文件和脚本。模板中可以包含变量,并且在执行过程中会根据变量的值进行替换。这使得配置文件的生成和管理更加灵活和可定制。

  6. 错误处理和异常处理(Error Handling and Exception Handling):Ansible 提供了一些机制来处理错误和异常情况。可以使用 failed_when 条件来检测任务的失败,使用 ignore_errors 参数来忽略错误,并使用 blocks 结构来定义异常处理的任务块。

1. 角色(Roles)

在 Ansible 中创建一个角色,例如名为 webserver 的角色,可以包含以下文件和目录结构:

roles/
└── webserver
    ├── tasks/
    │   └── main.yml
    ├── files/
    ├── templates/
    ├── vars/
    │   └── main.yml
    └── meta/
        └── main.yml

tasks/main.yml 中,可以定义执行的任务:

- name: Install Apache
  apt:
    name: apache2
    state: present

- name: Start and enable Apache service
  service:
    name: apache2
    state: started
    enabled: true

然后,在 Playbook 中使用 webserver 角色:

- name: Configure web servers
  hosts: web_servers
  roles:
    - webserver

2. 动态清单(Dynamic Inventory)

创建一个动态清单脚本,例如 dynamic_inventory.py,从外部源(如云提供商)获取主机信息:

#!/usr/bin/env python

import requests

response = requests.get('http://api.example.com/servers')
data = response.json()

# 将数据转换为 Ansible 动态清单格式
inventory = {
    'web_servers': {
        'hosts': [],
        'vars': {}
    }
}

for server in data['servers']:
    inventory['web_servers']['hosts'].append(server['ip_address'])

print(json.dumps(inventory))

然后,在 Ansible 命令中使用动态清单:

ansible-playbook -i dynamic_inventory.py playbook.yml

3. 变量管理(Variable Management)

在 Ansible Playbook 中使用变量,例如在 vars/main.yml 文件中定义变量:

# vars/main.yml

web_server_port: 80
web_server_document_root: /var/www/html

然后,在 Playbook 中使用这些变量:

- name: Configure web server
  hosts: web_servers
  vars_files:
    - vars/main.yml
  tasks:
    - name: Configure Apache
      template:
        src: templates/apache.conf.j2
        dest: /etc/apache2/apache.conf

在模板文件 templates/apache.conf.j2 中,可以引用这些变量:

# templates/apache.conf.j2

Listen {{ web_server_port }}
DocumentRoot {{ web_server_document_root }}

4. 条件和循环(Conditionals and Loops)

在 Ansible Playbook 中使用条件和循环,例如使用 when 条件和 loop 循环:

- name: Install packages based on OS
  apt:
    name: "{{ item }}"
    state: present
  loop:
    - apache2
    - nginx
  when: ansible_distribution == 'Ubuntu'

此任务将仅在目标主机的操作系统为 Ubuntu 时执行,并循环安装 Apache 和 Nginx 软件包。

5. 模板和变量替换(Templates and Variable Substitution)

在 Ansible Playbook 中使用模板和变量替换,例如在模板文件中引用变量:

- name: Configure Nginx
  hosts: nginx_servers
  tasks:
    - name: Create Nginx configuration file
      template:
        src: templates/nginx.conf.j2
        dest: /etc/nginx/nginx.conf

在模板文件 templates/nginx.conf.j2 中,可以引用变量:

# templates/nginx.conf.j2

user nginx;
worker_processes {{ num_worker_processes }};

在 Playbook 中定义 num_worker_processes 变量:

- name: Configure Nginx
  hosts: nginx_servers
  vars:
    num_worker_processes: 4
  tasks:
    - name: Create Nginx configuration file
      template:
        src: templates/nginx.conf.j2
        dest: /etc/nginx/nginx.conf

2. 使用 Ansible Vault 进行加密和解密

Ansible Vault 是 Ansible 提供的一种机制,用于对敏感数据(如密码、证书、密钥等)进行加密和解密。使用 Ansible Vault 可以确保在 Playbooks 和变量文件中存储的敏感信息在版本控制和共享时得到保护。

Ansible Vault 进行加密和解密的步骤:

1. 创建加密文件

要创建一个加密文件,可以运行以下命令:

ansible-vault create mysecrets.yml

此命令将打开一个文本编辑器,你可以在其中输入敏感数据。保存并关闭编辑器后,Ansible Vault 将提示你设置一个密码来加密文件。

2. 编辑加密文件

要编辑一个已加密的文件,可以运行以下命令:

ansible-vault edit mysecrets.yml

此命令将提示你输入密码以解密文件,并在文本编辑器中打开文件。你可以编辑文件中的内容并保存更改。保存并关闭编辑器后,文件将再次被加密。

3. 加密已有文件

要加密一个已有的非加密文件,可以运行以下命令:

ansible-vault encrypt mysecrets.yml

此命令将提示你设置一个密码来加密文件。

4. 解密文件

要解密一个已加密的文件,可以运行以下命令:

ansible-vault decrypt mysecrets.yml

此命令将提示你输入密码以解密文件。

5. 执行 Playbook 包含加密文件

如果你的 Playbook 包含了加密文件,你需要在执行时提供密码以解密文件。可以使用 --ask-vault-pass 参数来指定密码,例如:

ansible-playbook --ask-vault-pass playbook.yml

或者,你可以将密码存储在一个单独的文件中,并使用 --vault-password-file 参数指定密码文件的路径,例如:

ansible-playbook --vault-password-file=vault_pass.txt playbook.yml

这些命令将使用提供的密码解密包含加密文件的 Playbook。

3. Ansible 远程执行和连接方式

Ansible 提供了多种远程执行和连接方式,以便与目标主机进行通信和执行任务。以下是 Ansible 中常用的远程执行和连接方式:

1. SSH 连接

SSH(Secure Shell)是 Ansible 默认的远程连接方式。Ansible 使用 SSH 协议与目标主机建立安全的连接,并通过 SSH 执行命令和传输文件。要使用 SSH 连接,确保目标主机上已启用 SSH,并且 Ansible 控制节点可以通过 SSH 访问目标主机。

2. 密码认证

使用密码认证方式,Ansible 可以使用目标主机的用户名和密码进行身份验证。这种方式需要在 Ansible 的配置文件中指定目标主机的用户名和密码。

3. 密钥认证

使用密钥认证方式,Ansible 可以使用目标主机的 SSH 密钥进行身份验证。你需要将 Ansible 控制节点上的 SSH 公钥添加到目标主机的 ~/.ssh/authorized_keys 文件中,以实现无密码的 SSH 连接。

4. 提权(Becoming)

有时,你可能需要在目标主机上通过一个用户身份连接,然后切换到另一个用户身份来执行特权操作。Ansible 的提权功能允许你在 Playbook 中指定一个特权用户,通过 SSH 连接到目标主机,并使用 becomebecome_user 参数切换到另一个用户。

5. 连接插件(Connection Plugins)

Ansible 提供了多个连接插件,用于与不同类型的目标主机进行通信。这些插件可以与 SSH 连接方式结合使用,或者使用其他协议和机制与目标主机进行通信。一些常见的连接插件包括 paramiko(Python SSH 库)、winrm(Windows 远程管理)和 docker(Docker 容器)等。

要选择特定的远程执行和连接方式,你可以在 Ansible 的配置文件中设置相应的选项,如 ansible_connectionansible_useransible_passwordansible_ssh_private_key_file 等。
以下是五个示例 演示了 Ansible 中不同的远程执行和连接方式,包括 SSH 连接、密码认证、密钥认证、提权功能和连接插件。你可以根据实际情况选择适合的方式,并在 Playbook 中进行相应的配置。

1. SSH 连接示例
使用 SSH 连接方式与名为 web_servers 的主机进行通信。通过 SSH 连接,使用 apt 模块安装 Apache 软件包。

- name: Configure web servers
  hosts: web_servers
  tasks:
    - name: Install Apache
      apt:
        name: apache2
        state: present

2. 密码认证示例
使用密码认证方式与名为 web_servers 的主机进行通信。使用 remote_user 参数指定用户名为 ansible,并使用 vars 定义 ansible_password 变量来指定密码。然后使用 apt 模块安装 Apache 软件包。

- name: Configure web servers
  hosts: web_servers
  remote_user: ansible
  vars:
    ansible_password: your_password
  tasks:
    - name: Install Apache
      apt:
        name: apache2
        state: present

3. 密钥认证示例
使用密钥认证方式与名为 web_servers 的主机进行通信。使用 remote_user 参数指定用户名为 ansible,并在 Ansible 控制节点上配置了相应的 SSH 密钥。然后使用 apt 模块安装 Apache 软件包。

- name: Configure web servers
  hosts: web_servers
  remote_user: ansible
  tasks:
    - name: Install Apache
      apt:
        name: apache2
        state: present

4. 提权示例
使用 SSH 连接方式与名为 web_servers 的主机进行通信,并使用提权功能。通过设置 become 参数为 true,以及 become_user 参数为 root,在连接到目标主机后,切换到 root 用户,并使用 apt 模块安装 Apache 软件包。

- name: Configure web servers
  hosts: web_servers
  become: true
  become_user: root
  tasks:
    - name: Install Apache
      apt:
        name: apache2
        state: present

5. 连接插件示例
使用 Docker 连接插件与名为 web_servers 的 Docker 容器进行通信。通过设置 connection 参数为 docker,与 Docker 容器建立连接,并使用 apt 模块安装 Nginx 软件包。

- name: Configure web servers
  hosts: web_servers
  connection: docker
  tasks:
    - name: Install Nginx
      apt:
        name: nginx
        state: present

4. 高级 Ansible Playbook 技巧及示例

1. 使用变量和模板

示例:在 Playbook 中使用变量和模板生成配置文件。使用 Jinja2 模板来生成配置文件。templates/config.j2 文件包含了配置文件的模板,可以使用变量和控制结构来动态生成配置。

- name: Generate configuration file
  template:
    src: templates/config.j2
    dest: /etc/myapp/config.conf

2. 使用条件和循环

示例1:使用条件语句在特定条件下执行任务。只有当名为 myfile 文件的修改时间晚于当前时间时,才会执行重启服务的任务。

- name: Restart service if file is modified
  service:
    name: myservice
    state: restarted
  when: ansible_date_time.epoch > ansible_filemtime_myfile

示例2:使用循环语句迭代列表执行任务。通过循环迭代列表中的每个元素,并使用 apt 模块安装每个指定的软件包。

- name: Install packages
  apt:
    name: "{{ item }}"
    state: present
  loop:
    - package1
    - package2
    - package3

3. 错误处理和故障转移

示例:处理任务错误并采取故障转移措施。在这个示例中,尝试复制配置文件。即使复制任务失败,也会继续执行下一个任务。然后,基于结果的状态,判断是否执行回滚命令。

- name: Copy configuration file
  copy:
    src: files/config.conf
    dest: /etc/myapp/config.conf
  register: result
  ignore_errors: true

- name: Rollback if copy fails
  command: rollback_command
  when: result.failed

4. 使用角色(Roles)

示例:在 Playbook 中使用角色。示例引用了名为 webserver 的角色。角色是一个独立的 Playbook 集合,可以在 roles 声明中指定,以便在主 Playbook 中使用。

- name: Apply webserver role
  hosts: web_servers
  roles:
    - webserver

5. 使用标签(Tags)

示例:使用标签选择性地运行任务。将 packages 标签应用于任务。然后可以使用 --tags 参数选择性地运行带有特定标签的任务。

- name: Install packages
  apt:
    name: "{{ item }}"
    state: present
  loop:
    - package1
    - package2
  tags:
    - packages

5. 使用 Ansible 进行系统配置和部署

Ansible 是一个功能强大的自动化工具,可用于系统配置和部署。下面是使用 Ansible 进行系统配置和部署的一般步骤:

1. 安装 Ansible

首先,确保在控制节点上安装了 Ansible。可以使用适合操作系统的包管理器进行安装,或者按照官方文档提供的指引手动安装。

2. 创建 Ansible Inventory(清单)

Ansible Inventory 是一个包含目标主机信息的文件,用于标识要配置和管理的主机。创建一个 Inventory 文件,并在其中列出目标主机的 IP 地址或主机名。

示例 Inventory 文件:

[web_servers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11

[database_servers]
db1 ansible_host=192.168.1.20

3. 创建 Ansible Playbook

Playbook 是一个包含任务列表的 YAML 文件,用于定义要在目标主机上执行的操作。创建一个 Playbook 文件,并定义适合的系统配置和部署任务。

示例 Playbook 文件:

- name: Configure web servers
  hosts: web_servers
  tasks:
    - name: Install Apache
      apt:
        name: apache2
        state: present

    - name: Configure Apache
      template:
        src: templates/apache.conf.j2
        dest: /etc/apache2/apache.conf
      notify: restart apache

  handlers:
    - name: restart apache
      service:
        name: apache2
        state: restarted

在这个示例 Playbook 中,定义了两个任务:安装 Apache 和配置 Apache,然后定义了一个处理程序用于重启 Apache 服务。

4. 运行 Ansible Playbook

使用 ansible-playbook 命令来运行 Playbook,并指定 Inventory 文件和 Playbook 文件的路径。

示例命令:

ansible-playbook -i inventory.ini playbook.yml

运行命令后,Ansible 将连接到目标主机并执行在 Playbook 中定义的任务。

6. Ansible 的容器和云集成

Ansible 提供了与容器和云平台的集成,使得在这些环境中进行配置和部署的自动化变得更加便捷。下面是 Ansible 的容器和云集成的一些重要方面:

1. 容器集成

Ansible 可以与容器技术(如 Docker 和 Kubernetes)无缝集成,以便在容器环境中进行配置和部署。

  • 使用 Ansible 可以编写 Playbooks 来创建、启动和停止容器,设置容器的网络和存储配置,以及执行容器内的命令。
  • Ansible 可以与 Docker 模块一起使用,通过 Docker API 进行容器管理。可以使用 docker_container 模块来管理容器的生命周期、映像的构建和推送等操作。
  • 对于 Kubernetes 环境,Ansible 提供了 Kubernetes 模块,用于创建和管理 Kubernetes 资源,如部署、服务、配置映射等。

2. 云集成

Ansible 提供丰富的模块和插件,用于与各种云平台进行集成,包括 Amazon Web Services (AWS)、Microsoft Azure、Google Cloud Platform (GCP) 等。

  • 可以使用 Ansible 的云模块来创建和管理云资源,如虚拟机实例、存储、网络、负载均衡器等。这些模块提供了一致的接口,使得在不同云平台上进行自动化变得更加简单。
  • Ansible 提供了动态主机清单脚本和插件,可以根据云平台的实时状态动态生成主机清单。这意味着可以自动发现和管理云环境中的主机,而无需手动维护清单文件。

3. 常见模块和插件

  • ec2 模块:用于管理 AWS EC2 实例,包括创建、终止、启动、停止等操作。
  • azure_rm 模块:用于管理 Azure 资源,如虚拟机、存储账户、虚拟网络等。
  • gcp_compute 模块:用于管理 GCP 资源,如虚拟机实例、网络、防火墙规则等。
  • docker_container 模块:用于管理 Docker 容器的生命周期和配置。
  • k8s 模块:用于创建和管理 Kubernetes 资源,如部署、服务、配置映射等。

这些模块和插件使得 Ansible 可以与容器和云平台紧密集成,以实现自动化的容器编排和云资源管理。无论是在本地环境中使用容器,还是在云平台上进行部署,Ansible 都提供了强大的工具来简化和加速配置和部署过程。

7. Ansible 自动化测试和检查

Ansible 提供了一些功能和工具,可用于自动化测试和检查配置的正确性。下面是 Ansible 中常用的自动化测试和检查方法:

1. Ansible Playbook 的语法检查

Ansible Playbook 使用 YAML 语法编写,因此首先可以使用 ansible-playbook 命令的 --syntax-check 参数来检查 Playbook 文件的语法是否正确。这将帮助捕捉到一些常见的语法错误。

示例命令:

ansible-playbook --syntax-check playbook.yml

2. Ansible Lint 工具

Ansible Lint 是一个用于检查 Ansible Playbook 和角色的静态分析工具。它可以帮助发现潜在的问题和最佳实践违规情况。

首先,需要安装 ansible-lint 工具。然后,在 Playbook 文件所在的目录中运行 ansible-lint 命令,它将分析 Playbook 并给出相关建议和警告。

示例命令:

ansible-lint playbook.yml

3. Molecule 框架

Molecule 是一个用于测试 Ansible 角色的开发框架。它提供了创建和管理测试环境、运行测试剧本和验证角色配置的功能。

使用 Molecule,可以编写测试剧本(Test Playbooks)来验证角色的行为和配置。这些测试剧本可以包括各种场景、变量和断言,用于确保角色在不同环境和配置下的正确性。

Molecule 还支持使用各种虚拟化和容器化技术来创建测试环境,如 VirtualBox、Docker、Vagrant 等。

4. 自定义验证和测试任务

在 Ansible Playbook 中,可以编写自定义任务来验证配置的正确性。这些任务可以使用 Ansible 的模块和条件语句来执行各种检查和测试。

例如,可以使用 shell 模块执行命令来检查特定服务是否运行,使用 assert 模块来验证变量或条件是否满足预期,或者使用 uri 模块来测试网络连接。

示例:使用 shell 模块执行命令来检查名为 myservice 的服务是否在运行。然后,使用 assert 模块验证服务状态是否为 “active”。如果验证失败,Ansible 将引发错误并停止执行。

- name: Check if service is running
  shell: systemctl is-active myservice
  register: service_status
  changed_when: false

- name: Validate service status
  assert:
    that:
      - service_status.stdout == "active"

8. Ansible 运维和故障排除

Ansible 提供了一些功能和技巧,可用于运维和故障排除,帮助管理和维护基础设施的状态。下面是一些常用的 Ansible 运维和故障排除方法:

1. Ansible Ad-hoc 命令

Ansible Ad-hoc 命令是一种临时的、单次性的命令,可以在不编写 Playbook 的情况下直接在目标主机上执行。这对于快速运维任务和故障排除非常有用。

示例命令:

ansible <hosts> -m <module> -a <arguments>

其中,<hosts> 是目标主机或主机组的名称,<module> 是要执行的 Ansible 模块,<arguments> 是模块的参数。

例如,使用 ping 模块检查主机的连通性:

ansible all -m ping

2. Ansible 调试模式

Ansible 提供了调试模式,可用于详细跟踪和调试 Playbook 的执行过程。调试模式会输出更多的日志信息,帮助理解和排查问题。

可以通过在执行 Playbook 时添加 -vvv 参数来启用调试模式:

ansible-playbook -vvv playbook.yml

3. Ansible Facts

Ansible Facts 是一组关于主机的系统信息和状态的变量。可以使用 Ansible Facts 来获取主机的各种属性,如操作系统类型、网络接口、硬件信息等。

在 Playbook 中,可以使用 ansible_facts 变量来访问 Facts。例如,可以使用 debug 模块输出主机的操作系统版本:

- name: Print operating system version
  debug:
    var: ansible_facts['ansible_distribution_version']

4. Ansible 日志

Ansible 生成的日志文件记录了执行过程中的详细信息,可以帮助追踪和排查问题。Ansible 默认会将日志输出到控制台,但也可以通过设置 ansible.cfg 文件来配置日志的位置和级别。

ansible.cfg 文件中,可以设置 log_path 参数来指定日志文件的路径。另外,还可以设置 verbosity 参数来控制日志的详细级别。

5. 错误处理和失败处理

在 Playbook 中,可以使用 failed_whenignore_errors 参数来处理任务的失败情况。failed_when 参数允许自定义失败的条件,并根据条件来判断任务是否失败。ignore_errors 参数允许忽略特定任务的失败,继续执行其他任务。
在这个示例中,使用 shell 模块检查名为 myservice 的服务是否运行,如果服务状态不是 “active”,则将任务标记为失败。然后,使用 systemd 模块重启服务,即使重启过程中出现错误,也会忽略错误并继续执行其他任务。
示例:

- name: Check service status
  shell: systemctl is-active myservice
  register: service_status
  failed_when: service_status.stdout != "active"

- name: Restart service
  systemd:
    name: myservice
    state: restarted
  ignore_errors: yes

参考文档

  1. Ansible 官方文档 ↗: Ansible 官方文档是学习 Ansible 的最全面和权威的资源。它包含了 Ansible 的所有功能、模块和概念的详细说明,并提供示例和最佳实践指南。

  2. Ansible 官方示例 ↗: Ansible 官方示例库包含了一系列使用 Ansible 的示例 Playbooks,涵盖了各种常见的用例和场景。这些示例可以帮助学习和理解如何使用 Ansible 进行自动化配置和部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/986087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux-进程-execl族函数

exec函数的作用&#xff1a; 我们用fork函数创建新进程后&#xff0c;经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时&#xff0c;该进程被完全替换为新程序。因为调用exec函数并不创建新进程&#xff0c;所以前后进程的ID并没有改变。 简单来说就是&…

看完这篇 教你玩转渗透测试靶机Vulnhub——Momentum:1

Vulnhub靶机Momentum:1渗透测试详解 Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;漏洞发现&#xff1a;③&#xff1a;漏洞利用&#xff1a;④&#…

《Effective STL》读书笔记(二):vector和string

vector 和 string 优先于动态分配数组 当使用new动态分配内存时&#xff0c;我们需要关注以下内容 必须保证动态分配的内存会被delete&#xff0c;否则会造成资源泄露必须确保使用了正确的delete形式。如果分配了单个对象&#xff0c;则必须使用delete&#xff1b;如果分配了…

选择最适合您的Bug管理软件:市场比较与推荐

“Bug管理软件哪家好&#xff1f;市场上有许多优秀的Bug管理系统品牌如&#xff1a;Zoho Projects、JIRA、Redmine、Bugzilla、MantisBT。” 一款高效的Bug管理系统可以帮助团队更有效地发现、记录和解决软件中的问题&#xff0c;从而提高产品质量和用户满意度。本文将为您介绍…

JavaScript基础07——变量拓展-数组

哈喽&#xff0c;大家好&#xff0c;我是雷工! 每天打卡学习一点点&#xff0c;今天继续学习JavaScript基础知识&#xff0c;以下是学习笔记。 一、数组的基本介绍 数组 &#xff08;Array&#xff09;——一种将一组数据存储在单个变量名下的优雅方式。 数组的作用和变量一样…

【电源专题】典型设备的接地设计

在文章:【电源专题】接地的类型 中我们讲到不同的历史时期接地概念是不同的,有为了安全的电气接地和物理接地,也有为了提供参考电位的接地。 那么在设备接地的设计中,我们会怎么进行操作呢? 在文章【电源专题】接地的类型讲到一个混合接地的例子,我们可以把大功率的地接…

DF竞赛平台化身隐私计算大赛“超强助攻”,助力打造专业人才试炼场!

在技术可用性提升、应用需求增强以及政策大力支持的共同作用下&#xff0c;作为保障数据要素安全可信流通的有效技术手段&#xff0c;隐私计算技术火热发展&#xff0c;应用开始逐渐落地。在此背景下&#xff0c;中国信息通信研究院和中国通信学会联合行业多方力量&#xff0c;…

【MySQL】MySQL的安装,登录,配置和相关命令

文章目录 前言一. 卸载不需要的环境二. 获取MySQL的yum源三. 安装MySQL和启动四. 尝试登录MySQL方法1&#xff1a;获取临时root密码方法2&#xff1a;没有密码方法3&#xff1a;配置文件 五. 简单配置结束语 前言 本篇文章是基于云服务器&#xff1b;Linux&#xff1a;Centos7…

【excel密码】excel文件加密方法总结:

想要给Excel文件进行加密&#xff0c;方法有很多&#xff0c;今天分享三种Excel加密方法给大家。 打开密码 设置了打开密码的excel文件&#xff0c;打开文件就会提示输入密码才能打开excel文件&#xff0c;只有输入了正确的密码才能打开并且编辑文件&#xff0c;如果密码错误…

[A题]2023 年全国大学生数学建模比赛思路、代码更新中.....

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Java高并发系列: 使用wait - notify实现高效异步方法

1. 背景 在项目开发中, 通常会有异步执行操作, 例如: 提交一个异步清空一系列数据库中ID ${_id} 的记录, 这个时候通常的做法是主线程将任务添加到一个异步队列中, 后台维护一个线程不断地循环扫描这个队列, 如果有需要执行的任务, 则执行相应的逻辑. 如下图所示: 2. 一个简…

Discourse 附件无法显示的跟进

今天登录表以后&#xff0c;发现数据又被清理了部分。 然后我们又重新使用 SQL 导入了数据。 这个让我们感觉 Discourse 的系统中应该设置了自动清理程序&#xff0c;在这个自动清理程序中会对认为没有使用的附件或者图片进行清理。 因为我们更换了存储空间&#xff0c;所以这…

在Linux中使用shell指令完成文件打包、压缩、解压缩

一、写一个1.sh脚本&#xff0c;将以下内容放到脚本中 在家目录下创建目录文件dir在dir下创建dir1和dir2把当前目录下的所有文件拷贝到dir1中&#xff0c;把当前目录下的所有脚本文件拷贝到dir2中把dir2打包并压缩为dir2.tar.xz再把dir2.tar.xz移动到dir1中解压dir1中的压缩包…

triton 客戶端用https协议访问服务

背景 平时调用模型服务&#xff0c;都是用httpIP的链接调用。但由于笔者环境的特殊性&#xff0c;访问模型必须经过一个https的公网URL&#xff0c;所以&#xff0c;如何用triton client访问https链接成为了一个问题 参考 TensorRT&Triton学习笔记(一)&#xff1a;trito…

win7安装python3.8.10遇到的问题及解决办法和相关资源

在我的另一篇文章中&#xff0c;已经测试了win7安装不了python3.10.8 https://blog.csdn.net/kxltsuperr/article/details/132666737 那么&#xff0c;经过搜索&#xff0c;说win7最高可以安装python3.8.10&#xff0c;于是进行安装&#xff0c;结果报错&#xff0c;如下图&a…

【实战】React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(总结展望篇)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

结构型模式-过滤器模式

允许开发人员使用不同的标准来过滤一组对象&#xff0c;通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式&#xff0c;它结合多个标准来获得单一标准。 AllArgsConstructor Data public class Person {private String name;private String gender;p…

【Three.js】第二十一章 Physics 物理

介绍 物理是WebGL可以添加到项目体验中最酷的功能之一。人们喜欢真实物理感的物体&#xff0c;看到它们碰撞、倒塌、坠落和弹跳&#xff0c;就像我的作品集一样&#xff1a; https: //bruno-simon.com/ 有很多方法可以将物理功能添加到您的项目中&#xff0c;这取决于您想要实…

【脑机接口开源数据处理包】brainflowBrainFlow是一个库,旨在获取,解析和分析脑电图,肌电图,心电图和其他类型的数据从生物传感器。

BrainFlow是一个库&#xff0c;旨在获取&#xff0c;解析和分析脑电图&#xff0c;肌电图&#xff0c;心电图和其他类型的数据从生物传感器。 brainflow开源库官网地址 [https://brainflow.readthedocs.io/en/stable/](https://brainflow.readthedocs.io/en/stable/) 它提供了…

我发现了一个很好看的字体,霞鹜文楷!如何换windows和typora字体?

1、字体 官方地址如下&#xff0c;下载也很简单。 https://github.com/lxgw/LxgwWenKai 有1W多的stars。 方式&#xff1a; 直接打包下载。下载不来&#xff0c;可以联系我。 然后ttf的文件&#xff0c;全部安装就行了。 reg save "HKCU\Control Panel" .\res…