2-ansible基础元素介绍
ansible基础元素介绍
ansible配置文件解析
/etc/ansible:配置文件目录,Inventory主机配置清单,日常运维的所有的配置类操作也是基于此目录进行。ansible不是一种服务所以在修改配置文件后不需要进行重启等操作。
ansible自身的配置文件/etc/ansible/ansible.cfg
,文件遵循INI风格。
ansible.cfg配置文件可以有多个,读取顺序是当前命令执行目录ansible.cfg–>用户家目录ansible.cfg–>/etc/ansible/ansible.cfg。
[defaults]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#inventory = /etc/ansible/hosts #主机配置清单位置
#library = /usr/share/my_modules/ #库文件路径
#module_utils = /usr/share/my_module_utils/ #
#remote_tmp = ~/.ansible/tmp #远程主机存放临时文件目录
#local_tmp = ~/.ansible/tmp #本机存放临时文件目录
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml
#forks = 5 #同时操作多台主机时的并发数
#poll_interval = 15
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True
#ask_pass = True
#transport = smart
#remote_port = 22
#module_lang = C
#module_set_locale = False
#gathering = implicit
#gather_subset = all
# gather_timeout = 10
# inject_facts_as_vars = True
host_key_checking = False #首次连接是否需要key认证,建议将注释去掉,并设置为False
log_path = /var/log/ansible.log #ansible执行日志存放目录多数保持默认即可。
[privilege_escalation]
1
2
3
4#become=True #是否sudo
#become_method=sudo #sudo方式
#become_user=root #sudo后的用户
#become_ask_pass=False #sudo后是否验证密码[ssh_connection]
1
#pipelining = false #管道加速功能,要配合requiretty进行使用
[accelerate]
1
2
3
4
5#accelerate_port = 5099 #加速连接端口
#accelerate_timeout = 30 #命令执行超时时间
#accelerate_connect_timeout = 5.0 #连接超时时间
#accelerate_daemon_timeout = 30 #上一个活动连接的时间,单位分钟
#accelerate_multi_key = yes
除了修改host_key_checking = False
以及可能修改[accelerate]
其他配置保持默认即可,还有其他类的配置但是基本都是使用默认配置
ansible相关命令
ansible
临时性操作、非固化需求。
1 | ansible <host-pattern> [options] |
- <host-pattern>:配置清单中的ip、主机别名、组等
- [options]:
–version :显示版本以ansible的一些基础信息
-m NAME :指定使用的模块
-u USERNAME :指定远程主机以指定用户运行命令
-b :使远程主机以sudo方式执行命令
-v :详细过程 -vv -vvv更为详细
-k :提示输入ssh连接密码
-K :提示输入sudo时的口令
-i :使用指定的Inventory配置文件(默认使用/etc/ansible/hosts)
返回结果有三种颜色:红色(执行异常)、绿色(执行成功,但执行执行目标没有变化)、橘黄色(执行成功,但是执行目标有变化)。
例如:使用ansible远程修改一个文件,返回绿色说明命令执行成功,但是文件没有变化,也就是说原文件中的内容就是要修改后的样子,不需要进行修改;返回值橘黄色说明命令执行成功,且将文件按照要求进行修改了。
ansible-galaxy
可以简单的理解为github或者pip功能,可以使用该命令从galaxy.ansible.com下载Roles(一堆playbook的集合),默认存放在/etc/ansible/roles
。
1 | ansible-galaxy [ init | info | install | list | remove] [--help] [options] ROLE_NAME |
- [init | info | install | list | remove ]
init :初始化本地roles
info :列出指定roles的信息
install :安装指定roles到本地
list :列出已经安装的roles
remove :删除本地的roles
- [–help]
类似的ansible-galaxy init --help
查看ansible-galaxy init相关使用方式。 - [options]
根据ansible-galaxy xxx
使用执行的选项
ansible-doc
ansible模块文档说明。
ansible-doc -l :列出支持的模块
ansible-doc MODULE_NAME:显示模块用法说明
ansible-doc -v MODULE_NAME:显示模块版本号
ansible-playbook
日常应用中使用最多的命令,通过预先编写YML格式的playbook文件实现批量管理,playbook文件可以理解为是按照一定条件组成的ansible的任务集。ansible-playbook xxx.yml
ansible-vault
主要用于配置文件的加密,例如playbook文件中包含敏感信息,可以使用ansible-vault。
1 | ansible-vault [create|decrypt|edit|view|encrypt|encrypt_string|rekey] [--help] [options] |
- [ create | decrypt | edit | view | encrypt | encrypt_string | rekey]
create #创建新的加密文件
decrypt #解密加密文件
edit #编辑加密文件
view #查看加密文件
encrypt #加密YAML文件
encrypt_string #加密字符串
rekey #为加密文件重新设置加密
ansible-console(先了解)
交互式工具,用户可以在ansible-console虚拟出来的终端中执行各种内置命令。
Inventory配置清单
默认配置文件/etc/ansible/hosts
,该配置文件遵循INI、yaml、json,在/etc/ansible/hosts
尾部直接添加主机即可,建议在配置受控端时,先配置好控制端到受控端的免密。
在使用时可以将多个主机文件一并传递ansible-play xxx.yml -i Inventory1 -i Inventory2
可以将多个主机文件放在同一个目录下,当多个单个文件太长时,并不容易维护,可以将其进行分类,分别保存到不同的文件中,在同一个目录中进行保存,注意:在目录的多个文件中有父组关系时,必须先加载定义子组的文件。默认是按照ASCII顺序进行加载,尽量对多个文件进行编号来控制加载顺序。
1 | ll |
定义主机和组
- 可以直接是IP
1
192.168.27.7
使用方式: ansible 192.168.27.7 -m ping
- 可以是hostname 冒号后的数字表示端口号,默认22端口,此方式需要在
1
test3:22
/etc/hosts
中进行配置,例如:添加192.168.27.7 test3
使用方式: ansible test3 -m ping
- 分组 [testserver]表示一个叫testserver分组的开始,其分组成员包括192.168.27.5、192.168.27.6、192.168.27.7、testa、testb、testc。[5:9:2]则表示5、7、9。
1
2
3[testserver]
192.168.27.[5:7]
test[a:c]
使用方式: ansible testserver -m ping 会同时操作testserver组下的所有成员机器
定义组变量
类似于主机变量
1 | [test] |
这样就给test组所有的主机定义了http_prot=808变量
子组
1 | [test] |
这样hostname这个组就相当于test组和nginx组的集合,这个组实际有5个成员。
子组的变量将具有更高的优先级,将会覆盖父组的变量;合并变量,ansible将按照ASCII顺序合并同一级别的组,a组与b组合并变量,a组则相当于父组。all是所有组的父组
其他参数
1 | test1 ansible_host=192.168.163.171 ansible_port=22 ansible_user=root ansible_password=123456 |
ansible_host:指定test1的IP
ansible_port:指定ssh的端口
ansible_user:指定ssh远程的用户名
ansible_password:指定ssh用户的密码【不推荐使用这种明文密码的方式,推荐使用公私秘钥认证的方式】
逻辑运算与正则
- all
ansible all -m ping
检测使用的主机配置清单中所有的主机ansible 192.168.27.* -m ping
检测192.168.27网段的主机 - 逻辑或
ansible "test:nginx" -m ping
检测test和nginx组(或者是主机)的情况,合集 - 逻辑非
ansible "test:!nginx" -m ping
检测在test组但不在nginx组的主机,非 - 逻辑与
ansible "test:&nginx" -m ping
检测同时在test组和nginx组的主机,交集 - 域切割
可以理解为组的切片1
2
3
4[test]
nginx
zabbix
webansible test[2] -m ping
等同于ansible web -m ping
- 正则匹配
ansible ~正则表达式 -m -ping
~表示开启正则匹配功能。