4.0 KiB
4.0 KiB
ansible配置文件
# ansible的默认库存文件是/etc/ansible/hosts文件,如果运行时不指定-i 库存文件则会使用默认文件,解决方法:在当前目录创建ansible.cfg文件,添加以下内容
[defaults]
inventory = ./inventory.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台主机
测试库存
# 以json格式显示清单
ansible-inventory -i inventory.yml --list
# 以树状显示清单
ansible-inventory -i inventory.yml --graph
# 对web组主机进行ping测试
ansible web -i inventory.yml -m ping
检查库存配置文件
ansible-playbook --check -i inventory.yml
playbook
执行特定任务
1.使用tags标签
# 示例任务定义
- name: 任务A
command: /bin/true
tags:
- task_a
- name: 任务B
command: /bin/true
tags:
- task_b
- name: 任务C
command: /bin/true
tags:
- task_c
# 只执行带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条件控制
- name: 可选执行的任务
command: /bin/echo "这是可选任务"
when: execute_optional_task is defined and execute_optional_task
# 执行该任务(传递变量)
ansible-playbook playbook.yml -e "execute_optional_task=true"
# 不执行该任务(不传递变量或设为false)
ansible-playbook playbook.yml
3.使用--start-at-task参数
# 从"任务B"开始执行(跳过之前的所有任务)
ansible-playbook playbook.yml --start-at-task "任务B"
创建包含加密内容的playbook
# playbook.yml
- hosts: all
vars_files:
- secrets.yml # 直接引用加密文件
tasks:
- name: 打印加密变量(仅示例,实际不要打印敏感信息)
debug:
msg: "Redhat用户: {{ rh_subscription_user }}"
ansible-vault加解密
交互式秘钥加解密(临时)
# 加密文件,后续加解密时会提示输入密码
ansible-vault encrypt 文件名
# 加密字符串,并命名
ansible-vault encrypt_string "my_redhat_password" --name "rh_subscription_pass"
秘钥文件加解密(推荐)
# 创建秘钥文件
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秘钥
# 交互式更换密钥(先输入旧密码,再输入新密码)
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
查看或编辑加密文件
# 查看加密文件内容(解密查看)
ansible-vault view secrets.yml --vault-password-file vault_pass.txt
# 编辑加密文件(会自动重新加密保存)
ansible-vault edit secrets.yml --vault-password-file vault_pass.txt
执行包含加密内容的palybook
# 执行时会提示输入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 # 相对或绝对路径
ansible-playbook playbook.yml # 自动读取配置的密钥文件