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