初始文档

This commit is contained in:
2026-01-14 11:27:47 +08:00
parent 84a58e8daf
commit 564285cf07
62 changed files with 8729 additions and 0 deletions

151
Linux/Ansible自动化.md Normal file
View File

@@ -0,0 +1,151 @@
# 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 # 自动读取配置的密钥文件
```