自动化运维工具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 为基础,使得自动化任务变得简单、可维护和可扩展。
-
简单易用:Ansible 的设计目标之一是简单易用。它使用 YAML 语法定义任务和配置,无需编写复杂的脚本或编程代码。初学者可以快速上手,同时也适用于复杂的自动化需求。
-
无代理:Ansible 使用 SSH 协议进行远程连接和执行任务,无需在远程主机上安装任何代理程序。这使得部署和管理变得简单,同时减少了对目标主机的依赖和配置要求。
-
基于模块化:Ansible 基于模块化的架构,提供了丰富的模块来管理各种不同类型的系统、服务和应用。这些模块可以执行各种任务,如安装软件包、配置文件、启动服务等。
-
声明式语法:Ansible Playbooks 使用声明式语法描述所需的状态和配置,而不是编写特定的步骤和命令。这使得配置管理和自动化任务的维护更加直观和可读性强。
-
可扩展性:Ansible 可以轻松扩展以适应不同规模和复杂度的环境。它支持分组管理、变量管理、角色和插件等功能,可以构建复杂的自动化流程和组织结构。
-
强大的生态系统:Ansible 拥有庞大的社区和活跃的贡献者,提供了大量的模块、角色和插件。Ansible Galaxy 是一个社区驱动的集市,提供了现成的角色和模块,可用于加速和共享自动化任务的开发。
Ansible 的应用场景广泛,可以用于服务器配置管理、应用部署、云基础设施管理、网络设备配置、持续集成/持续部署 (CI/CD) 等。它的简单性、可读性和可扩展性使得 Ansible 成为许多组织和开发团队的首选自动化工具。
Ansible 入门到精通
自动化运维工具Ansible教程(一)【入门篇】
- Ansible 简介
- 安装 Ansible
- Ansible 的基本概念和核心组件
- 编写和运行第一个 Ansible Playbook
- 主机清单和组织结构
- Ansible 常用模块和任务
- Ansible 变量和模板
- Ansible 条件和循环
自动化运维工具Ansible教程(二)【进阶篇】
- Ansible 的高级主题(例如:角色、动态清单、变量管理等)
- 使用 Ansible Vault 进行加密和解密
- Ansible 远程执行和连接方式
- 高级 Ansible Playbook 技巧
- 使用 Ansible 进行系统配置和部署
- Ansible 的容器和云集成
- Ansible 自动化测试和检查
- Ansible 运维和故障排除
精通篇
- Ansible 在企业级环境中的应用和扩展
- Ansible 与其他自动化工具的集成
- Ansible 最佳实践和实际案例分析
- Ansible 性能优化和容错机制
- Ansible 社区和资源
进阶篇
1. Ansible 的高级主题(例如:角色、动态清单、变量管理等)
Ansible 的一些高级主题:
-
角色(Roles):角色是一种组织和重用 Ansible Playbooks 的方式。角色允许将任务、变量和文件组织成逻辑单元,以便更好地管理和复用代码。通过角色,可以将复杂的 Playbooks 拆分成可维护和可扩展的组件。
-
动态清单(Dynamic Inventory):动态清单是一种动态生成 Ansible 主机清单的方法。它允许从外部源(如云提供商、配置管理数据库、API 等)获取主机信息,并将其用于 Ansible 的执行。动态清单使得管理大规模和动态变化的环境变得更加灵活和自动化。
-
变量管理(Variable Management):Ansible 中的变量用于存储和传递数据,以便在 Playbooks 和模板中使用。变量可以是全局的、主机特定的或任务特定的。Ansible 提供了多种方式来定义和管理变量,如主机变量、组变量、剧本变量、角色变量等。
-
条件和循环(Conditionals and Loops):条件和循环允许根据条件执行特定的任务或重复执行一系列任务。Ansible 提供了条件语句(如
when
)和循环语句(如loop
)来实现这些功能。条件和循环可以帮助根据不同的情况执行不同的任务或迭代处理列表和字典。 -
模板和变量替换(Templates and Variable Substitution):Ansible 允许使用模板引擎(如 Jinja2)来生成配置文件和脚本。模板中可以包含变量,并且在执行过程中会根据变量的值进行替换。这使得配置文件的生成和管理更加灵活和可定制。
-
错误处理和异常处理(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 连接到目标主机,并使用 become
或 become_user
参数切换到另一个用户。
5. 连接插件(Connection Plugins)
Ansible 提供了多个连接插件,用于与不同类型的目标主机进行通信。这些插件可以与 SSH 连接方式结合使用,或者使用其他协议和机制与目标主机进行通信。一些常见的连接插件包括 paramiko
(Python SSH 库)、winrm
(Windows 远程管理)和 docker
(Docker 容器)等。
要选择特定的远程执行和连接方式,你可以在 Ansible 的配置文件中设置相应的选项,如 ansible_connection
、ansible_user
、ansible_password
、ansible_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_when
和 ignore_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
参考文档
-
Ansible 官方文档 ↗: Ansible 官方文档是学习 Ansible 的最全面和权威的资源。它包含了 Ansible 的所有功能、模块和概念的详细说明,并提供示例和最佳实践指南。
-
Ansible 官方示例 ↗: Ansible 官方示例库包含了一系列使用 Ansible 的示例 Playbooks,涵盖了各种常见的用例和场景。这些示例可以帮助学习和理解如何使用 Ansible 进行自动化配置和部署。
相关文章:
自动化运维工具Ansible教程(二)【进阶篇】
文章目录 前言Ansible 入门到精通自动化运维工具Ansible教程(一)【入门篇】自动化运维工具Ansible教程(二)【进阶篇】精通篇 进阶篇1. Ansible 的高级主题(例如:角色、动态清单、变量管理等)**1. 角色(Roles)**&#x…...
嵌入式Linux基础学习笔记目录
1. 嵌入式Linux应用开发基础知识 1.1 交叉编译 1.2 GCC编译器 1.3 makefire 1.4 文件I/O 1.5 Framebuffer应用编程 1.6 文字显示及图象显示 1.7 输入系统应用编程 1.8 网络编程 1.9 多线程编程 1.10 串口编程 1.11 I2C应用编程 2. 源码分析 2.1 MQTT源码 2.2 蓝牙源码 2.3 MJP…...
JVM | 垃圾回收器(GC)- Java内存管理的守护者
引言 在编程世界中,有效的内存管理是至关重要的。这不仅确保了应用程序的稳定运行,还可以大大提高性能和响应速度。作为世界上最受欢迎的编程语言之一,通过Java虚拟机内部的垃圾回收器组件来自动管理内存,是成为之一的其中一项必…...
yolov5添加ECA注意力机制
ECA注意力机制简介 论文题目:ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks 论文地址:here 基本原理 🐸 ECANet的核心思想是提出了一种不降维的局部跨通道交互策略,有效避免了降维对于通道注意…...
华为在高端智能手机市场再次撕开了一道深深的口子
智能手机市场趋于饱和,增长变得越来越难,智能手机厂商从被动卷走向了主动卷。 8月29日,华为宣布推出“HUAWEI Mate 60 Pro先锋计划”,并于当天中午在官方商城、部分线下门店上线销售新机Mate 60 Pro,它是全球首款支持卫…...
前端设计模式和设计原则之设计模式
作为前端开发,在code时,或多或少地都会践行设计模式,但是你清楚自己用到的是何种设计模式吗? 为什么前端开发一定要懂设计模式呢? code时不遵从设计模式,又能怎样呢? 上面的问题可以留作思考…...
提高在速卖通产品上的曝光率——自养号测评优势全面解析!
速卖通是国际贸易的一个平台,是国内外企业之间的一个桥梁。在速卖通中,如果要让产品得到更好地推广,就必须让产品得到更多的消费者认可。而产品的认可度除了品质保障和售后服务之外,评测也是非常重要的环节。 对于速卖通店铺销量…...
指针进阶(二)
指针进阶 5.函数指针6. 函数指针数组7. 指向函数指针数组的指针8. 回调函数案例:使用回调函数,模拟实现qsort(采用冒泡的方式)。案例:测试qsort排序结构体数据 5.函数指针 补: &函数名就是函数的地址 …...
【HCIE】03.BGP高级特性
每一条BGP路由都可以携带多个路径属性,针对其属性也有特有的路由匹配工具,包括:AS Path Filter和Community Filter。 import方向的属性,出现在如策略里面,加入到BGP路由表中,再传给路由表里,出去…...
单个处理数据祖籍列表层级关系
CREATE DEFINERroot% FUNCTION sys_organization_getAncestorsNames(deptId varchar(36)) RETURNS varchar(1000) CHARSET utf8DETERMINISTIC BEGINDECLARE parentDeptId varchar(36) default ; -- 父部门iddeclare parentDeptName varchar(100) default ; -- 父部门名称decla…...
Maven部署打包多环境(开发、测试、生产)配置教程
Maven打包多环境(开发、测试、生产)配置教程 1、多环境配置的必要性1.1 没有进行多环境配置进行的操作复杂性1.2 不影响运行时配置 2、配置方案2.1 添加profile属性2.1 添加两个插件2.3 主配置文件中添加插值变量 3、效果展示3.1 勾选prod环境3.2 控制台…...
【计算思维题】少儿编程 蓝桥杯青少组计算思维 数学逻辑思维真题详细解析第9套
蓝桥杯青少组计算思维 数学逻辑思维真题详细解析第9套 第十四届蓝桥杯省赛真题 1、要把下面4张图片重新排列成蜗牛的画像,该如何排列这些图片 A、 B、 C、 D、 答案:A 考点分析:主要考查小朋友们的观察能力空...
【Hello Algorithm】贪心算法
本篇博客介绍: 简单介绍下贪心算法 贪心算法 介绍贪心算法最小字典序的字符串拼接最多会议数切棍子的最小成本IPO灯塔问题 介绍贪心算法 贪心算法是一种极具有自然智慧的算法 它会使用以一种局部最功利的标准来做出一个当前看来最好的选择 如果说我们根据局部最优…...
TOP-K问题
目录 问题描述 解法及思想 第一种方式 算法思想 具体实现 第二种方式 算法思想 具体实现 问题描述 Top-K问题是一个十分经典的问题,一般有以下两种方式来描述问题: 在10亿的数字里,找出其中最大的100个数;在一个包含n个整…...
【保姆级从0到1】UE5 蓝图入门教程1:关卡、蓝图入门
20230113 1、新建项目 新建选择 UE 5.1 项目 选择蓝图,项目位置 改变编辑器布局,选择经典布局 2、关卡与蓝图 选择 File -> New Level 准备创建关卡 选择 Basic,点击 Create 进行创建 Ctrl S 保存新建的关卡 关卡蓝图的打开 鼠标右键&…...
【码银送书第六期】《ChatGPT原理与实战:大型语言模型的算法、技术和私有化》
写在前面 2022年11月30日,ChatGPT模型问世后,立刻在全球范围内掀起了轩然大波。无论AI从业者还是非从业者,都在热议ChatGPT极具冲击力的交互体验和惊人的生成内容。这使得广大群众重新认识到人工智能的潜力和价值。对于AI从业者来说…...
redis 报错 Redis protected-mode 配置文件没有真正启动
(error) DENIED Redis is running in protected mode because protected mode is enabled Redis protected-mode 是3.2 之后加入的新特性,在Redis.conf的注释中,我们可以了解到,他的具体作用和启用条件 链接redis 时只能通过本地localhost …...
解决a标签内容中img标签和p标签垂直方向间隔太大的问题
现象如下: 对应的html结构: 解决办法:给a标签设置:display: inline-block和line-height属性。 然后问题解决: 具体原理如下(由chatgpt回答): display: inline-block 可以减少垂直方…...
如何选择靠谱的全景平台?VR全景加盟从哪方面对比?
VR全景行业经过近几年的发展,已经逐渐普及开来,线下各个行业都有实体商家开始引入VR全景去做营销宣传推广了。不少老板也意识到线上线下双渠道的重要性,而VR全景的存在就刚好满足各行各业的需求,从这一点不难看出,VR全…...
CentOS系统环境搭建(十八)——CentOS7安装Docker20.10.12和docker compose v2
centos系统环境搭建专栏🔗点击跳转 CentOS7安装Docker20.10.12和docker compose v2 关于Docker旧版本和docker compose1.0版本的安装可以看这一篇CentOS系统环境搭建(三)——Centos7安装Docker&Docker Compose。 1.卸载旧版本 卸载do…...
NebulaGrap入门介绍和集群安装部署
长风破浪八千里,落日晚霞不回头。 ——大宁。 NebulaGrap——分布式图数据库 官方文档: NebulaGraph Database手册 官方文档 介绍 简介: NebulaGraph 一款开源、分布式图数据库,擅长处理超大规模数据集。 Nebula …...
thinkphp5.0 composer 安装oss提示php版本异常
场景复现: 本地 phpstudy 环境,安装的有7.0到7.3三个版本,首先确认composer已经安装 composer安装阿里云oss的命令为:composer require aliyuncs/oss-sdk-php 运行报错: Problem 1- Root composer.json requires php…...
AList dokcer安装及百度网盘挂载
AList是开源的网盘管理工具。本文介绍如何通过docker安装AList并挂载百度网盘 1、AList安装 1.1、系统安装 通过docker命令进行安装,命令如下: docker run -d --restartalways -v /etc/alist:/opt/alist/data -p 5244:5244 --name"alist" xhofe/alist:…...
whereIn 遇到了最大限制,临时表处理方式
当使用whereIn 遇到了限制,比如whereIn target ID 已经超过了10万级别,但是又没办法join其他库表时,可以使用临时表的方式解决,临时表是以一种会话的方式存在,意味着你断开了mysql 这个临时会话会自动销毁。 为了创建…...
基于SSM的校园快递代取系统设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
MySQL事务详细讲解
文章目录 什么是事务:1.事务有哪些特性2.并发事务会引起什么问题3.事务的隔离级别有哪些4.Read View在MVCC中如何工作Read View 有四个重要的字段使用 InnoDB 存储引擎的数据库表,它的聚簇索引记录中都包含下面两个隐藏列: 5.可重复读是怎么工作的6.读提…...
[linux] mmcv-full 安装的时候 Building wheel 卡住
(已解决)FileNotFoundError: [Errno 2] No such file or directory: ‘:/usr/local/cuda-11.8/bin/nvcc‘_鳗小鱼的博客-CSDN博客 安装mmcv一直卡在建车轮_梦想成为大佬的王老八的博客-CSDN博客 pip install -U openmim mim install mmcv...
Python怎么实现更高效的数据结构和算法? - 易智编译EaseEditing
要实现更高效的数据结构和算法,你可以考虑以下几个方面的优化: 选择合适的数据结构: 选择最适合你问题的数据结构至关重要。例如,如果需要频繁插入和删除操作,可能链表比数组更合适。如果需要高效查找操作࿰…...
03-zookeeper节点动态上下线案例
服务器动态上下线监听案例 需求 在分布式系统中,主节点可以有多台,可以动态上下线,任意一台客户端都能实时感知到主节点服务器的上下线。 需求分析 客户端能实时洞察到服务器上下线的变化 基本流程: 1.服务端启动时去注册…...
如何使用TensorFlow完成线性回归
线性回归是一种简单的预测模型,它试图通过线性关系来预测目标变量。在TensorFlow中,我们可以使用tf.GradientTape来跟踪我们的模型参数的梯度,然后用这个信息来优化我们的模型参数。 以下是一个简单的线性回归的例子: pythonimpo…...
做营销型网站一般要多少钱/企业营销策划书如何编写
24.1 场景问题24.1.1 发送提示消息考虑这样一个实际的业务功能:发送提示消息。基本上所有带业务流程处理的系统都会有这样的功能,比如某人有新的工作了,需要发送一条消息提示他。从业务上看,消息又分成普通消息、加急消息和特急…...
泰兴做网站公司/免费拓客软件哪个好用
问题 使用Tomcat时候控制台总是打印一些中文乱码,虽然不影响使用但是看着就难受。 包括:Server、Tomcat Localhost Log、Tomcat Catalina Log 原因分析 Windows环境下,中文编码为GBK 解决方案 修改文件,文件路径:%…...
物流网站开题报告/seo搜索引擎是什么
官方的说法是 MySQL 4.1 and up uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older clients. ..... 如果你升级mysql到4.1以上版本后遇到以上问题,请先确定你的mysql client 是4.1或者更高版本.(WINDOWS下…...
攻击网站常用方法/希爱力跟万艾可哪个猛
Java Swing教程 - Java Swing JSpinnerJSpinner组件组合来自JFormattedTextField和可编辑的JComboBox的函数。JSpinner可以有一个选择列表,同时,我们也可以应用一个格式到显示的值。它从选择列表中一次只显示一个值,它允许我们输入一个新值。…...
企业标志logo/seo课堂
目录 一、String 对象 1、属性 2、常用方法 二、Array 对象 1、属性 2、常用方法 三、Date 日期对象 1、创建 Date 日期对象 2、常用方法 四、Math 对象 一、String 对象 1、属性 length:表示字符串的长度 2、常用方法 【1】与 HTML 相关的方法 bold(…...
电商网站建设与管理/北京seo收费
使用tc限制所有流量匹配tcp(协议6)目标端口54000(256Kbits入站)到eth0的所有流量的示例…作为根……tc qdisc add dev eth0 handle ffff: ingresstc filter add dev eth0 parent ffff: protocol ip prio 50 u32 \match ip protocol 6 0xff \match ip dport 54000 0xffff police…...