Files
docs/Linux/Ansible自动化.md
2026-01-14 11:27:47 +08:00

152 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ansible配置文件
```sh
# ansible的默认库存文件是/etc/ansible/hosts文件,如果运行时不指定-i 库存文件则会使用默认文件,解决方法:在当前目录创建ansible.cfg文件,添加以下内容
[defaults]
inventory = ./inventory.yml #库存文件路径
```
# 库存清单管理
## 库存配置示例
```yml
# yaml文件清单配置示例
all:
children:
web: #主机组
hosts:
192.168.1.10: #主机
ansible_user: root #主机变量
web.example.com:
vars:
anisble_user: root #主机组变量
ansible_port: 22
db:
hosts:
db[01:10].example.com: #批量定义10台主机
192.168.2.[100:200]: #批量定义100台主机
```
## 测试库存
```sh
# 以json格式显示清单
ansible-inventory -i inventory.yml --list
# 以树状显示清单
ansible-inventory -i inventory.yml --graph
# 对web组主机进行ping测试
ansible web -i inventory.yml -m ping
```
## 检查库存配置文件
```sh
ansible-playbook --check -i inventory.yml
```
# playbook
## 执行特定任务
### 1.使用tags标签
```yaml
# 示例任务定义
- name: 任务A
command: /bin/true
tags:
- task_a
- name: 任务B
command: /bin/true
tags:
- task_b
- name: 任务C
command: /bin/true
tags:
- task_c
```
```bash
# 只执行带task_a标签的任务
ansible-playbook playbook.yml --tags "task_a"
# 执行除task_b外的所有任务
ansible-playbook playbook.yml --skip-tags "task_b"
# 执行多个标签的任务
ansible-playbook playbook.yml --tags "task_a,task_c"
```
### 2.使用when条件控制
```yaml
- name: 可选执行的任务
command: /bin/echo "这是可选任务"
when: execute_optional_task is defined and execute_optional_task
```
```bash
# 执行该任务(传递变量)
ansible-playbook playbook.yml -e "execute_optional_task=true"
# 不执行该任务不传递变量或设为false
ansible-playbook playbook.yml
```
### 3.使用--start-at-task参数
```bash
# 从"任务B"开始执行(跳过之前的所有任务)
ansible-playbook playbook.yml --start-at-task "任务B"
```
## 创建包含加密内容的playbook
```yaml
# playbook.yml
- hosts: all
vars_files:
- secrets.yml # 直接引用加密文件
tasks:
- name: 打印加密变量(仅示例,实际不要打印敏感信息)
debug:
msg: "Redhat用户: {{ rh_subscription_user }}"
```
# ansible-vault加解密
## 交互式秘钥加解密(临时)
```sh
# 加密文件,后续加解密时会提示输入密码
ansible-vault encrypt 文件名
# 加密字符串,并命名
ansible-vault encrypt_string "my_redhat_password" --name "rh_subscription_pass"
```
## 秘钥文件加解密(推荐)
```sh
# 创建秘钥文件
echo "my_secure_vault_pass" > vault_pass.txt
# 限制文件权限
chmod 600 vault_pass.txt
# 使用密钥文件加密字符串
ansible-vault encrypt_string "my_redhat_password" --name "rh_subscription_pass" --vault-password-file vault_pass.txt
# 使用秘钥文件加密文件
ansible-vault encrypt secrets.yml --vault-password-file vault_pass.txt
```
## 修改vault秘钥
```sh
# 交互式更换密钥(先输入旧密码,再输入新密码)
ansible-vault rekey secrets.yml
# 使用旧密钥文件更换为新密钥文件
ansible-vault rekey secrets.yml --vault-password-file old_vault_pass.txt --new-vault-password-file new_vault_pass.txt
```
## 查看或编辑加密文件
```sh
# 查看加密文件内容(解密查看)
ansible-vault view secrets.yml --vault-password-file vault_pass.txt
# 编辑加密文件(会自动重新加密保存)
ansible-vault edit secrets.yml --vault-password-file vault_pass.txt
```
## 执行包含加密内容的palybook
```sh
# 执行时会提示输入Vault密码
ansible-playbook playbook.yml --ask-vault-pass
# 通过密钥文件提供密钥
ansible-playbook playbook.yml --vault-password-file vault_pass.txt
```ini
# 在ansible.cfg中配置默认秘钥文件路径
[defaults]
vault_password_file = ./vault_pass.txt # 相对或绝对路径
```
```sh
ansible-playbook playbook.yml # 自动读取配置的密钥文件
```