Ansible自动化配置
清单、配置与Playbook编写
1. Ansible 清单 (Inventory)
概念: 一个文本文件(通常是INI或YAML格式),列出了所有受管节点,并可以对其进行分组和设置变量。
静态清单文件: 手动编写和维护的主机列表文件。
管理: 包括创建、编辑、组织主机和组,以及为不同组的主机设置不同的连接变量(如用户、端口)。
2. Ansible 配置文件 (ansible.cfg)
概念: 用于设置Ansible的默认行为。它包含各种配置参数,如默认清单文件位置、远程用户、是否提示输入密码等。
位置与优先级(从高到低):
ANSIBLE_CONFIG 环境变量指定的文件
当前工作目录下的 ./ansible.cfg
用户家目录下的 ~/.ansible.cfg
系统级的 /etc/ansible/ansible.cfg
Ansible会使用它找到的第一个配置文件。
3. 基础 Playbook 编写
YAML 结构: Playbook使用YAML格式,以 --- 开头,注重缩进(空格,非Tab)。
一个简单Playbook的构成:
---
- name: My first play # Play的名称
hosts: webservers # Play的目标主机组
become: yes # 在此Play中启用特权升级
tasks: # 任务列表开始
- name: Ensure httpd is installed
yum:
name: httpd
state: latest
- name: Ensure httpd is running and enabled
service:
name: httpd
state: started
enabled: yes
自动化内容导航器 (ansible-navigator): 一个基于文本的用户界面(TUI)工具,是红帽Ansible自动化平台的一部分,用于:
交互式地运行和调试Playbook。
浏览文档(:doc <module_name>)。
查看集合内容。
提供比命令行更直观的体验。
4. 高级 Playbook 编写
多个Play: 一个Playbook可以包含多个Play,通常用于在不同组的主机上执行不同的任务序列。
---
- name: Configure web servers
hosts: webservers
become: yes
tasks: ... # 配置Web服务器的任务
- name: Configure database servers # 第二个Play开始
hosts: dbservers
become: yes
tasks: ... # 配置数据库服务器的任务
特权升级 (Privilege Escalation): 让任务以非root用户连接,然后切换到root(或其他特权用户)执行特定命令。这是Ansible的安全最佳实践。
参数:
become: yes: 开启特权升级。
become_method: sudo(默认)/ su / pbrun等: 提权方式。
become_user: root(默认): 要切换到的目标用户。
使用新模块与集合 (Collections):
集合 (Collections): 一种打包和分发Ansible内容(模块、角色、插件等)的新格式。自Ansible 2.9+起,模块大多通过集合分发,而不是核心代码库。
流程:
使用 ansible-navigator :collections 或命令行 ansible-galaxy collection list 查看已安装集合。
使用 ansible-navigator :doc <module_name> 查找模块用法。
在Playbook中,使用完全限定集合名称(FQCN) 调用来自集合的模块,例如 community.general.ufw 或 ansible.builtin.yum。
安装集合: ansible-galaxy collection install <collection_name>