152 lines
4.0 KiB
Markdown
152 lines
4.0 KiB
Markdown
# 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 # 自动读取配置的密钥文件
|
||
```
|