跳转至

Ansible

1 Ansible 配置查找顺序

  • ansible配置设置-含环境变量,配置参数说明
  • ANSIBLE_CONFIG (environment variable if set)
  • ansible.cfg (in the current directory)
  • ~/.ansible.cfg (in the home directory)
  • /etc/ansible/ansible.cfg Ansible 将处理上面的列表并使用找到的 第一个文件,其他所有文件都被忽略。

2 Ansible host 文件

在 ansible. cfg 文件中会定义 inventory 参数,指定 host 文件位置,默认时 /etc/ansible/hosts

[shuhw@web138 ~]$ cat /etc/ansible/ansible.cfg |grep inventory|head -1 
#inventory      = /etc/ansible/hosts

在执行 ansible 命令时也可以通过 -i host文件 指定配置文件位置,如 ansible 10.20.29.136 -i ansible.host -m ping - 示例

[shuhw@web138 ~]$ cat ansible.host 
[web]
10.20.29.136
10.20.29.137
10.20.29.138
[shuhw@web138 ~]$ ansible web -i  ansible.host -m ping 
10.20.29.136 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
10.20.29.137 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
10.20.29.138 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

3 ansible 命令参数

  • 功能:针对一组主机定义并运行单个任务或 'playbook'。
  • 语法:ansible [pattern] -m [module] -a "[module options]" [other options]
    • [pattern] :匹配操作的机器,可以是 ip、域名、分组名,其中 ip、域名可以使用正则匹配,关键字 all 表示所有主机。
    • -i [inventory] :指定清单主机路径或逗号分隔的主机列表。(可以是文件路径,也可以是主机列表
    • -m [module] :指定使用的模块,默认是 command 模块,如:ping 模块。
    • -a "[module options]" :指定执行模块的额外参数,对于 command 模块,就完整的命令,如 -a "ls -l"
    • -u 'REMOTE_USER' :指定连接的机器上使用哪个用户执行命令。
    • -k :使用密码认证,而不采用 ssh 免密登录。
    • -K :如果需要特权(root 权限),提示输入密码。
    • -o or --one-line :用一行输出结果,多行使用 \n 连接
    • -f 'FORKS' :使用几个并行进程去执行
    • -C : don't make any changes; instead, try to predict some of the changes that may occur
    • --list or --list-hosts
  • 示例 1:-o、-u
$ ansible -i ansible.host -a "ls ~" -u shuhw -o 10.20.29.136
10.20.29.136 | CHANGED | rc=0 | (stdout) DMDB_PACKAGE_8.3.0.0_20230203.tar.gz\nenv\nfs\nncdss-v3\nzookeeper.out
  • 示例 2:-i
[shuhw@web138 ~]$ ansible -i ansible.host -a "ls ~" -u shuhw -o 10.20.29.136
10.20.29.136 | CHANGED | rc=0 | (stdout) DMDB_PACKAGE_8.3.0.0_20230203.tar.gz\nenv\nfs\nncdss-v3\nzookeeper.out
[shuhw@web138 ~]$ ansible -i 10.20.29.136,10.20.29.137 -a "ls ~" -u shuhw -o 10.20.29.136
10.20.29.136 | CHANGED | rc=0 | (stdout) DMDB_PACKAGE_8.3.0.0_20230203.tar.gz\nenv\nfs\nncdss-v3\nzookeeper.out
  • 示例 3:-k
shuhw@web138 ~]$ ansible 10.20.29.136 -i ansible.host -a "ls ~" -u shuhw2 -k 
SSH password: 
10.20.29.136 | CHANGED | rc=0 >>
  • 示例 4:-f
[shuhw@web138 ~]$ ansible -i ansible.host -a "ls ~" -o web -f 3
10.20.29.137 | CHANGED | rc=0 | (stdout) DMDB_PACKAGE_8.3.0.0_20230203.tar.gz\nenv\nfs\nncdss-v3\nzookeeper.out
10.20.29.136 | CHANGED | rc=0 | (stdout) DMDB_PACKAGE_8.3.0.0_20230203.tar.gz\nenv\nfs\nncdss-v3\nzookeeper.out
10.20.29.138 | CHANGED | rc=0 | (stdout) ansible.host\ncode\nDMDB\nDMDB_PACKAGE_8.3.0.0_20230203.tar.gz\nenv\nfs\nncdss-v3\nproject-ncdss\nrpmbuild\ntestdir\nzookeeper.out
  • 示例 5:-C
[shuhw@web138 ~]$ ansible -i ansible.host -a "ls ~" -C web 
10.20.29.137 | SKIPPED
10.20.29.136 | SKIPPED
10.20.29.138 | SKIPPED
  • 示例 6:--list
[shuhw@web138 ~]$ cat ansible.host 
[web]
10.20.29.136
10.20.29.137
10.20.29.138
[shuhw@web138 ~]$ ansible -i 10.20.29.136,10.20.29.137 all --list 
  hosts (2):
    10.20.29.136
    10.20.29.137
[shuhw@web138 ~]$ ansible -i ansible.host all --list 
  hosts (3):
    10.20.29.136
    10.20.29.137
    10.20.29.138
[shuhw@web138 ~]$ ansible -i ansible.host web --list 
  hosts (3):
    10.20.29.136
    10.20.29.137
    10.20.29.138

3.1 pattern 参数规则

  • pattern-官方文档
  • ip(正则扩展):如:10.20.29.* 将匹配清单列表中的 10.20.29. 任意主机
  • 域名(正则扩展)
  • 主机分组:如前文示例中 ansible. host 文件中列出的 web 分组
  • all :all 是一个关键字,表示清单里面的所有主机
  • 示例
[shuhw@web138 ~]$ ansible -i 10.20.29.136,10.20.29.137 -o -a "ls ~" 10.20.*
10.20.29.136 | CHANGED | rc=0 | (stdout) DMDB_PACKAGE_8.3.0.0_20230203.tar.gz\nenv\nfs\nncdss-v3\nzookeeper.out
10.20.29.137 | CHANGED | rc=0 | (stdout) DMDB_PACKAGE_8.3.0.0_20230203.tar.gz\nenv\nfs\nncdss-v3\nzookeeper.out
[shuhw@web138 ~]$ ansible -i 10.20.29.136,10.20.29.137 -o -a "ls ~" all
10.20.29.136 | CHANGED | rc=0 | (stdout) DMDB_PACKAGE_8.3.0.0_20230203.tar.gz\nenv\nfs\nncdss-v3\nzookeeper.out
10.20.29.137 | CHANGED | rc=0 | (stdout) DMDB_PACKAGE_8.3.0.0_20230203.tar.gz\nenv\nfs\nncdss-v3\nzookeeper.out