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

4.0 KiB
Raw Blame History

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  # 自动读取配置的密钥文件