好久没有使用过了,再重新学习一下。
ansible使用起来很简单,不用安装agent, 使用ssh通信。相信都或多或少的了解,就不过多介绍了。
一、安装
https://docs.ansible.com/ansible/latest/installation_guide/index.html
- yum install ansible (推荐)
- pip install ansible # ansible就是python的模块,可以直接安装。
- https://releases.ansible.com/ansible or https://github.com/ansible/ansible.git 下载编译,python安装模块。
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不执行。