02-Ansible配置

2020-01-15 11:13:21 浏览数 (1)

主机清单-inventory

查看ansible里的安装文件

代码语言:txt复制
[root@workstation ~]# rpm -ql ansible|less
/etc/ansible/ansible.cfg					#默认ansible的默认配置文件位置
/etc/ansible/hosts							#默认inventory主机清单位置
/etc/ansible/roles							#默认inventory角色位置
/usr/bin/ansible                			#ansible命令的文件
/usr/lib/python2.7/site-packages/ansible    #提供Python模块
/usr/share/man/man1/   						#帮助文档

简介

  • inventory是一个被管理主机的一个清单文件。
  • inventory里可以有单个主机,也可以有多个主机加起来的主机组。
  • inventory有静态的也有动态的

静态inventory

单个主机

可以是ip地址,也可以是域名

代码语言:txt复制
[student@workstation ansible]$ cat inventory
servera
192.168.1.100
192.168.1.123

主机组

格式
代码语言:txt复制
[组名]
主机1
主机2
主机3
...
示例
代码语言:txt复制
[student@workstation ansible]$ cat inventory 
localhost

[web-server]
servera
serverb

[balancer]
serverc

[data-server]
serverd
列出主机

all:代表所有主机

代码语言:txt复制
[student@workstation ansible]$ ansible -i inventory --list-hosts all
  hosts (5):
    localhost
    serverc
    servera
    serverb
    serverd

ungrouped:未分组主机

代码语言:txt复制
[student@workstation ansible]$ ansible -i inventory --list-hosts ungrouped
  hosts (1):
    localhost

嵌套组

格式
代码语言:txt复制
[组名:children]
组名1
组名2
示例

同一个(主机/组)可以出现在多个组中

代码语言:txt复制
[student@workstation ansible]$ cat inventory 
localhost
[web-server]
servera
serverb

[balancer]
serverc

[data-server]
serverd

[webs:children]
web-server
data-server

[bakend:children]
balancer
webs
列出主机
代码语言:txt复制
[student@workstation ansible]$ ansible -i inventory --list-hosts webs
  hosts (3):
    servera
    serverb
    serverd

[student@workstation ansible]$ ansible -i inventory --list-hosts bakend
  hosts (4):
    serverc
    servera
    serverb
    serverd

简化表达式

格式
代码语言:txt复制
[start:end]
示例

192.168.1.1:100

代表192.168.1.1-192.168.1.100

192.168.10:20.1:254

代表192.168.10.1-192.168.20.254

server01:20.domain.com

代表01,02,03...20

a:c.domain.com

代表a,b,c

代码语言:txt复制
[student@workstation ansible]$ cat inventory 
192.168.1.[1:100]
192.168.[10:20].[1:254]

[server]
server[01:20].domain.com

[mydomain]
[a:c].domain.com
列出主机
代码语言:txt复制
[student@workstation ansible]$ ansible -i inventory --list-hosts '192.168.12.25*'
  hosts (6):
    192.168.12.25
    192.168.12.250
    192.168.12.251
    192.168.12.252
    192.168.12.253
    192.168.12.254

[student@workstation ansible]$ ansible -i inventory --list-hosts server12.domain.com
  hosts (1):
    server12.domain.com

[student@workstation ansible]$ ansible -i inventory --list-hosts mydomain
  hosts (3):
    a.domain.com
    b.domain.com
    c.domain.com

模糊匹配

通配符在Ansible表示0个或多个任意字符,主要应用于一些模糊规则匹配。

*匹配

匹配所有主机,all或*号功能相同。如检测所有主机存活情况。

代码语言:txt复制
ansible all --list-hosts
ansible '*' --list-hosts
ansible '172.25.0.*' --list-hosts
ansible 'server*' --list-hosts 

逻辑或匹配

如我们希望同时对多台主机或多个组同时执行,相互之间用:(冒号)或者,逗号分隔即可。

代码语言:txt复制
ansible 'servera,prod' --list-host
ansible 'ba*,prod' --list-host 

逻辑与(&)匹配

逻辑与都匹配到的才执行。

代码语言:txt复制
ansible 'ser*,&prod' --list-hosts 

逻辑非匹配

逻辑非用感叹号(!)表示,主要针对多重条件的匹配规则,使用方式如下:

代码语言:txt复制
ansible 'web*,!prod' --list-hosts 

多条件组合

代码语言:txt复制
 ansible 'server*,&prod,!ba' --list-host 

正则匹配

Ansible同样完整支持正则匹配功能,~开始表示正则匹配。

代码语言:txt复制
ansible '~server(a|b)' --list-host

使用正则检测 www.example.comnew.example.comblog.example.com的存活

代码语言:txt复制
ansible "~(www|new|blog).example.(com|org)" --list-hosts

Ansible配置文件

ansible配置文件默认位置:/etc/ansible/ansible.cfg

配置选项

查看ansible.cfg的配置项

代码语言:txt复制
[student@workstation ansible]$  grep "^[" /etc/ansible/ansible.cfg
[defaults]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]

常用两个选项解读

代码语言:txt复制
[defaults]
inventory    	= /home/student/ansible/inventory	#主机清单文件的位置
roles_path   	= /home/student/ansible/roles		#角色路径
remote_user  	= devops							#远程执行用户
ask_pass     	= Flase								#是否询问密码
forks		 	= 5									#并发数		
sudo_user	 	= root								#切换root用户
ask_sudo_pass	= True								#询问是否需要密码

[privilege_escalation]
become=True											#是否提权
become_method=sudo									#提权方式
become_user=root									#默认提权的用户
become_ask_pass=False								#提权是否需要密码

官网配置参考

配置注释

#

注释风格1

;

注释风格2

配置文件优先级

1

$ANSIBLE_CONFIG

环境变量

2

./ansible.cfg

当前目录

3

~/.ansible.cfg

用户家目录

4

/etc/ansible/ansible.cfg

默认配置

4.默认配置

代码语言:txt复制
[student@workstation /]$ ansible --version|grep "config file"
	config file = /etc/ansible/ansible.cfg

3.用户家目录

代码语言:txt复制
[student@workstation /]$ touch /home/student/.ansible.cfg
[student@workstation /]$ ansible --version|grep "config file"
  config file = /home/student/.ansible.cfg

2.当前目录

代码语言:txt复制
[student@workstation lala]$ pwd
/tmp/lala
[student@workstation lala]$ ansible --version|grep "config file"
  config file = /tmp/lala/ansible.cfg

1.环境变量

代码语言:txt复制
[student@workstation lala]$ export ANSIBLE_CONFIG=/opt/ansible.cfg
[student@workstation lala]$ echo $ANSIBLE_CONFIG
/opt/ansible.cfg

[student@workstation lala]$ sudo touch /opt/ansible.cfg
[student@workstation lala]$ ansible --version | grep "config file"
ansible 2.3.1.0
  config file = /opt/ansible.cfg

ad-hoc

简介

ad hoc 指的临时意思,就像在命令行写的shell命令就是临时命令,在文件中写的shell命令就是脚本

ad hoc 就是在命令行直接执行的内容

语法

ansible host-pattern -m 模块 -a ‘模块参数’

host-pattern是inventory中定义的主机或主机组,可以使用“.”或“*”或“:”等特殊字符的匹配型字符串,host-pattern是必须项,不可忽略。

模块

位置

Ansible模块存放位置:/usr/lib/python2.7/site-packages/ansible/modules。

官网模块描述信息

官网模块分类信息

帮助

ansible-doc -l 查看列表

ansible-doc modulename 查看模块帮助文件

维护

ansible-doc文档中METADATA描述了谁在维护该模块,status记录了模块开发状态。

supported_by

记录了哪些社区在维护该模块

core

Ansible核心开发人员维护

curated

社区的合作伙伴维护。curated模块需要Ansible社区审核才能提交变更。伴随ansible core模块一并打包

community

由其他开源社区维护,Ansible核心开发人员和合作伙伴不提供支持,伴随ansible core模块一并打包

详细信息参考

如果想实现自定义功能,可以自己编写模块;Ansible会从变量ANSIBLE_LIBRARY中查找模块。

如果该变量未设置,将会从ansible.cfg配置文件library=设置的位置查找模块;ansible命令也会在./library位置查找模块。

更多的信息参考

下一节将具体介绍更多的模块使用方法

0 人点赞