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

文章目录

  • 前言
  • 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 Apacheapt:name: apache2state: present- name: Start and enable Apache serviceservice:name: apache2state: startedenabled: true

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

- name: Configure web servershosts: web_serversroles:- webserver

2. 动态清单(Dynamic Inventory)

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

#!/usr/bin/env pythonimport requestsresponse = 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.ymlweb_server_port: 80
web_server_document_root: /var/www/html

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

- name: Configure web serverhosts: web_serversvars_files:- vars/main.ymltasks:- name: Configure Apachetemplate:src: templates/apache.conf.j2dest: /etc/apache2/apache.conf

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

# templates/apache.conf.j2Listen {{ web_server_port }}
DocumentRoot {{ web_server_document_root }}

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

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

- name: Install packages based on OSapt:name: "{{ item }}"state: presentloop:- apache2- nginxwhen: ansible_distribution == 'Ubuntu'

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

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

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

- name: Configure Nginxhosts: nginx_serverstasks:- name: Create Nginx configuration filetemplate:src: templates/nginx.conf.j2dest: /etc/nginx/nginx.conf

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

# templates/nginx.conf.j2user nginx;
worker_processes {{ num_worker_processes }};

在 Playbook 中定义 num_worker_processes 变量:

- name: Configure Nginxhosts: nginx_serversvars:num_worker_processes: 4tasks:- name: Create Nginx configuration filetemplate:src: templates/nginx.conf.j2dest: /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 servershosts: web_serverstasks:- name: Install Apacheapt:name: apache2state: present

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

- name: Configure web servershosts: web_serversremote_user: ansiblevars:ansible_password: your_passwordtasks:- name: Install Apacheapt:name: apache2state: present

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

- name: Configure web servershosts: web_serversremote_user: ansibletasks:- name: Install Apacheapt:name: apache2state: present

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

- name: Configure web servershosts: web_serversbecome: truebecome_user: roottasks:- name: Install Apacheapt:name: apache2state: present

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

- name: Configure web servershosts: web_serversconnection: dockertasks:- name: Install Nginxapt:name: nginxstate: present

4. 高级 Ansible Playbook 技巧及示例

1. 使用变量和模板

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

- name: Generate configuration filetemplate:src: templates/config.j2dest: /etc/myapp/config.conf

2. 使用条件和循环

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

- name: Restart service if file is modifiedservice:name: myservicestate: restartedwhen: ansible_date_time.epoch > ansible_filemtime_myfile

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

- name: Install packagesapt:name: "{{ item }}"state: presentloop:- package1- package2- package3

3. 错误处理和故障转移

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

- name: Copy configuration filecopy:src: files/config.confdest: /etc/myapp/config.confregister: resultignore_errors: true- name: Rollback if copy failscommand: rollback_commandwhen: result.failed

4. 使用角色(Roles)

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

- name: Apply webserver rolehosts: web_serversroles:- webserver

5. 使用标签(Tags)

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

- name: Install packagesapt:name: "{{ item }}"state: presentloop:- package1- package2tags:- 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 servershosts: web_serverstasks:- name: Install Apacheapt:name: apache2state: present- name: Configure Apachetemplate:src: templates/apache.conf.j2dest: /etc/apache2/apache.confnotify: restart apachehandlers:- name: restart apacheservice:name: apache2state: 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 runningshell: systemctl is-active myserviceregister: service_statuschanged_when: false- name: Validate service statusassert: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 versiondebug: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 statusshell: systemctl is-active myserviceregister: service_statusfailed_when: service_status.stdout != "active"- name: Restart servicesystemd:name: myservicestate: restartedignore_errors: yes

参考文档

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat修改配置文件

1.Tomcat启动乱码问题 1.1conf目录 说明&#xff1a;找到conf目录下logging.properties文件 1.2打开logging.properties文件 说明&#xff1a;将UTF-8修改成GBK 1.3.效果 2.端口冲突问题 2.1 conf目录 2.2打开 server.xml文件 2.3.修改端口 说明&#xff1a;port指的就是端…

LomBok常用注解及详细介绍

LomBok常用注解及详细介绍 前言 Lombok是一个作用于编辑器和构建工具的 Java 库&#xff0c;可以对编写的 Java 代码进行增强&#xff0c;比如说不用再写实体类的 getter 方法&#xff0c;equals 方法而是自动生成&#xff0c;自动生成日志输出变量等等&#xff0c;减少重复模…

vscode-server

1know_host清除 2 删除服务器里的home/user/.vscode-server&#xff08;不是根root下的vscode-server&#xff09;&#xff0c;删除时用户名保持一致。 3 ssh配置文件 /etc/ssh/sshd_config[想改变,使用root&#xff0c;修改文件权限] 4 删除修改后&#xff0c;重启Windows下…

解决 Axios 跨域问题,轻松实现接口调用

跨域是指访问另外一个域的资源&#xff0c;由于浏览器的同源策略&#xff0c;默认情况下使用 XMLHttpRequest 和 Fetch 请求时是不允许跨域的。跨域的根本原因是浏览器的同源策略&#xff0c;这是由浏览器对 JavaScript 施加的安全限制。 Axios 跨域常见报错 跨域请求被阻止 (…

网上办公系统设计与实现

目录 前言 1问题定义 1.1系统名称 1.2系统背景 1.3系统目标 2 可行性分析 2.1 经济可行性 2.2 技术可行性 2.3 操作可行性 2.4 法律可行性 2.5 可行性研究结论 2.6 用户组织机构图 2.7 目标系统业务流程图 2.8 接口设计 2.8.1外部接口 2.8.2 内部接口 3 需求分…

CentOS 安装HTTP代理服务器 Tinyproxy

Tinyproxy是一个小型的基于GPL的HTTP/SSL代理程序&#xff0c;非常适合小型网络而且便于快速部署。这个代理程序最大的优点就是占用系统资源比较少。这里使用的系统为CentOS7.6&#xff0c;可以直接 yum 方式安装。 yum install tinyproxy -y 如果提示找不到安装包&#xff0…

【100天精通Python】Day57:Python 数据分析_Pandas数据描述性统计,分组聚合,数据透视表和相关性分析

目录 1 描述性统计&#xff08;Descriptive Statistics&#xff09; 2 数据分组和聚合 3 数据透视表 4 相关性分析 1 描述性统计&#xff08;Descriptive Statistics&#xff09; 描述性统计是一种用于汇总和理解数据集的方法&#xff0c;它提供了关于数据分布、集中趋势和…

【Redis专题】一线大厂Redis高并发缓存架构实战与性能优化

目录 前言为什么要用Redis前置知识一、缓存问题1.1 缓存击穿1.2 缓存穿透1.3 缓存雪崩 二、缓存方案2.1 普通缓存2.2 冷热分离2.3 多级缓存2.4 缓存预热 *课程内容一、一个案例引发的思考&#xff08;电商场景&#xff09;二、代码优化方案的演进2.1 问题一&#xff1a;纯【读】…

IDM(Internet Download Manager)下载器2024最新版本如何下载?

IDM&#xff08;Internet Download Manager&#xff09;下载器能够兼容支持多种浏览器进行文件下载&#xff0c;很多时候只要复制一个地址IDM的下载弹窗就自动弹出来&#xff0c;有时候不需要下载的时候也会弹&#xff0c;时间久了就会感觉很烦&#xff0c;不过这个问题其实可以…

2019版本idea启动tomcat8.5版本控制台中文乱码

目录 一&#xff0c;检查tomcat安装 二&#xff0c;检查idea配置 前言: 最近使用idea去启动tomcat8.5版本时&#xff0c;控制台语句出现了乱码情况&#xff0c;最终解决了。 情况如下&#xff1a; 一&#xff0c;检查tomcat安装 第一步&#xff1a;检查安装的tomcat找到tomca…

【数据结构】串的模式匹配:简单的模式匹配算法,KMP算法

欢~迎~光~临~^_^ 目录 知识树 1、什么是串的模式匹配 2、简单的模式匹配算法 3、KMP算法 3.1 算法原理 3.2 C语言实现KMP算法 3.3 求next数组 3.4 KMP算法优化&#xff08;对next数组的优化&#xff09; 知识树 1、什么是串的模式匹配 串的模式匹配是在一个字符串中…

C#,数值计算——Hashfn1的计算方法与源程序

1 文本格式 using System; using System.Collections; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Hashfn1 { private Ranhash hasher { get; set; } new Ranhash(); private int n { get; set; } public Hash…