ansible 一、安装与命令行参数

大番茄 2020年02月06日 476次浏览

好久没有使用过了,再重新学习一下。
ansible使用起来很简单,不用安装agent, 使用ssh通信。相信都或多或少的了解,就不过多介绍了。

一、安装

https://docs.ansible.com/ansible/latest/installation_guide/index.html

yum 或 对应系统的包管理工具安装完以后包含配置文件,pip或手动安装没有配置文件, 可以从这个复制一份。
https://github.com/ansible/ansible/blob/devel/examples/ansible.cfg

二、命令参数介绍

官方文档: https://docs.ansible.com/ansible/latest/user_guide/command_line_tools.html

1、ansible

https://docs.ansible.com/ansible/latest/cli/ansible.html

ansible <host_pattern> options
常用格式:
ansible <host_pattern> [-m <module_name>] [-a ]

比如: ping目标主机

[root@lvs ansible]# ansible 172.100.101.190 -m ping
172.100.101.190 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

[root@lvs ansible]# ansible all -m ping

参数介绍

-m MODULE_NAME, --module-name MODULE_NAME

指定模块, 默认command模块。

-a MODULE_ARGS, --args MODULE_ARGS

指定模块参数

-v, --verbose, -vvv, -vvvv

-v 显示详细信息, -vvv更加详细, -vvvv 开启debug模式。

-t TREE, --tree TREE

保存输出结果到目录。 如:

[root@lvs ansible]# ansible 172.100.101.190 -m shell -a 'ls /' -t /tmp/123

[root@lvs ansible]# cat /tmp/123/172.100.101.190

-f FORKS, --forks FORKS

指定并发数,默认5个。

-i INVENTORY, --inventory INVENTORY

指定inventory文件。
如:

[root@lvs ansible]# ansible all -m ping -i hosts

-C, --check

不做具体的操作, 只是预测一下有可能发生的变化。

-D, --diff

更改小文件与模板是, 显示文件差异, 与–check一起使用效果很好

-e EXTRA_VARS, --extra-vars EXTRA_VARS

指定变量,这里指定的变量优先级最高。

--syntax-check

playbook语法检查,不会执行。

--list-hosts

列出符合主机模式的主机。如:

[root@lvs ansible]# ansible k8s_node --list-hosts
  hosts (3):
    172.100.101.193
    172.100.101.194
    172.100.101.190
[root@lvs ansible]# ansible ungrouped --list-hosts
  hosts (3):
    172.100.102.92
    172.100.102.90
    172.100.102.93

-u REMOTE_USER, --user REMOTE_USER

指定登录远程主机的用户

-k, --ask-pass

提示交互式输入登录远程主机的密码。

[root@lvs ansible]# ansible k8s_master -m ping -k
SSH password:
172.100.101.192 | SUCCESS => {
    "ansible_facts": {

--private-key PRIVATE_KEY_FILE, --key-file PRIVATE_KEY_FILE

指定秘钥登录的私钥位置。

-T TIMEOUT, --timeout TIMEOUT

连接主机的超时时间,默认10s。

-b, --become

提权执行操作。比如sudo执行命令。
比如下面以sst用户ls /root目录

[root@lvs ansible]# ansible 172.100.102.92 -a 'ls /root' -u sst -k
SSH password:
172.100.102.92 | FAILED | rc=2 >>
ls: 无法打开目录/root: 权限不够non-zero return code
[root@lvs ansible]# ansible 172.100.102.92 -a 'ls /root' -u sst -k -b
SSH password:
172.100.102.92 | FAILED! => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "module_stderr": "Shared connection to 172.100.102.92 closed.\r\n",
    "module_stdout": "sudo: 需要密码\r\n",
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
    "rc": 1
}

如果sudo需要密码, 需要下面的参数。

-K, --ask-become-pass

提示交互式数据提权(sudo)密码。
-k 是用户登录密码, -K是提权密码。

[root@lvs ansible]# ansible 172.100.102.92 -a 'ls /root' -u sst -k -b -K
SSH password:
BECOME password[defaults to SSH password]:
172.100.102.92 | CHANGED | rc=0 >>
anaconda-ks.cfg

--become-user BECOME_USER

提权到哪个用户, 默认root。 就是sudo 到哪个用户的权限。

--become-method BECOME_METHOD

提权方法, 默认 sudo。

-o, --one-line

单行显示 , 如:

[root@lvs ansible]# ansible 172.100.102.92 -a 'ls /root' -k -o
SSH password:
172.100.102.92 | CHANGED | rc=0 | (stdout) anaconda-ks.cfg
[root@lvs ansible]# ansible 172.100.102.92 -a 'ls /root' -k
SSH password:
172.100.102.92 | CHANGED | rc=0 >>
anaconda-ks.cfg

2、ansible-doc

https://docs.ansible.com/ansible/latest/cli/ansible-doc.html

显示插件的文档。模块是其中的一部分。 一般都是用来查看模块的参数。 如:

[root@lvs ansible]# ansible-doc yum

-l, --list

列出可用的模块

-j, --json

文档输出为json格式

-t

选择插件类型, 默认是module(模块)。可用插件类型:

become', 'cache', 'callback', 'cliconf', 'connection', 'httpapi', 'inventory', 'lookup', 'netconf', 'shell', 'module', 'strategy', 'vars'

比如,查看ansible连接插件ssh的信息。

[root@lvs ansible]# ansible-doc ssh -t connection

3、ansible-playbook

用来执行playbook的命令。
好多与ansible 相同, 这里只列出常用的, 主要是其他的一些参数也都没有用过, 测试还不好测试。

--list-tags

列出tags, 不执行playbook任务。

--list-tasks

列出task, 不执行playbook任务。

-t TAGS, --tags TAGS

只执行对应tag的任务。

--skip-tags SKIP_TAGS

除了指定的tag不执行, 其他的tag都执行。

--step

一步一确认

--syntax-check

playbook文件语法检查, 不执行实际操作。

-e EXTRA_VARS, --extra-vars EXTRA_VARS

定义变量

--start-at-task START_AT_TASK

在指定的task开始执行playbook。

ansible-playbook test.yml --start-at-task 'install nginx'

在name为install nginx的task位置开始按顺序执行, 上面的task不执行。