Ansible

用于配置管理、应用程序部署、任务自动化

ansible主机清单

定义组

[webservers] # 定义组
xxx.xxx.com
xxx.xxx.com

[dbserver] # 定义组
xxx.xxx.com
xxx.xxx.com

[dce5_nodes]
10.70.49.17[2:4]

[all:vars] # 定义全局变量适用于全部主机

# Ansible SSH 用户名,用于连接到目标主机
ansible_ssh_user: guest2admin

# Ansible SSH 密码,用于连接到目标主机
ansible_ssh_pass: @users

# Ansible 使用的 Python 解释器路径
ansible_python_interpreter: /usr/bin/python

# SSH 连接的通用参数,这里指定了加密算法为 AES-256-CBC
ansible_ssh_common_args: -c aes256-cbc

# 指定 Ansible 连接到主机的方式,这里使用 SSH
ansible_connection: ssh

# 提权操作时使用的密码(例如切换到 root 用户时的密码)
ansible_become_password: root@root@su

# 提权方法,这里使用 su 命令切换用户
ansible_become_method: su

# 提权执行命令,这里指定了使用 sudo su - 命令来切换到超级用户
ansible_become_exe: sudo su -

# 还可以组别变量
[webserver:vars]

o打

  1. Ping 模块

    ansible all -m ping

    通过 Ping 模块测试所有主机是否可达。

  2. Shell 模块

    ansible all -m shell -a 'uptime'

    在所有主机上执行 uptime 命令。

  3. Command 模块

    ansible all -m command -a 'ls /tmp'

    使用 command 模块列出 /tmp 目录下的文件。

  4. Copy 模块

    ansible all -m copy -a 'src=/path/to/source dest=/path/to/destination'

    将本地文件复制到远程主机。

  5. File 模块

    ansible all -m file -a 'path=/tmp/testfile state=touch'

    在远程主机上创建一个空文件。

  6. Service 模块

    ansible all -m service -a 'name=httpd state=started'

    启动所有主机上的 httpd 服务。

  7. User 模块

    ansible all -m user -a 'name=johndoe state=present'

    创建一个名为 johndoe 的用户。

常用选项

  • -i <inventory>:指定主机清单文件。例如 -i hosts
  • --list-hosts:列出将运行任务的主机。
  • -l <subset>:指定要执行任务的主机子集。例如 -l webservers
  • -u <user>:指定远程主机用户。例如 -u root
  • -k:提示输入 SSH 密码。
  • --ask-become-pass:提示输入 sudo 密码。
  • -e <extra_vars>:传递额外变量。例如 -e "var1=value1 var2=value2"

示例详解

  1. 列出主机

    ansible all --list-hosts

    列出所有在清单中的主机。

  2. 指定用户和密码执行命令

    ansible all -m shell -a 'df -h' -u root -k

    使用 root 用户执行 df -h 命令,并提示输入密码。

  3. 传递额外变量

    ansible all -m shell -a 'echo {{ var_name }}' -e 'var_name=HelloWorld'

    传递变量 var_name,并在命令中使用。

高级用法

  1. 使用标签

    ansible all -m shell -a 'systemctl restart httpd' --tags "restart"

    使用标签来组织和执行特定的任务。

  2. 检查主机连通性

    ansible all -m ping -i inventory/hosts

    使用指定的主机清单文件检查连通性。