1、ansible目录结构
-
#rpm -ql ansible
-
/etc/ansible/ #配置文件目录
-
/usr/bin/ #执行文件目录
-
/usr/lib/python2.6/site-packages/ansible/ #lib库依赖目录
-
/usr/share/doc/ansible-1.9.4/ #help文档
-
/usr/share/man/man1/ #man文档目录
2、ansible配置文件ansible.cfg
-
[defaults]
-
# some basic default values...
-
-
inventory = /etc/ansible/hosts #定义inventory
-
#library = /usr/share/my_modules/ #自定义lib库存放目录
-
remote_tmp = $HOME/.ansible/tmp #临时文件远程主机存放目录或/tmp/.ansible/tmp(有写权限)
-
#forks = 5 #默认开启的并发数
-
poll_interval = 15 #默认轮询时间间隔
-
sudo_user = root #默认sudo用户
-
#ask_sudo_pass = True #是否需要ssh密码
-
#ask_pass = True #是否需要sudo密码
-
transport = smart #通信机制,默认为smart。
-
#remote_port = 8020 #远程ssh端口,默认22
-
module_lang = C #模块和系统之间通信的计算机语言,默认是C语言。
-
#gathering = implicit #控制默认facts手机(远程系统变量),默认值为implicit,每一次play,facts都会被收集。
-
#roles_path = /etc/ansible/roles #默认下载的roles存放的目录
-
host_key_checking = False #首次链接是否需要检查key认证,建议设为false
-
timeout = 30 #ssh超时时间
-
#remote_user = root #使用/usr/bin/ansible-playbook链接的默认用户名,如果不指定,会使用当前登录的用户名
-
#log_path = /var/log/ansible.log #执行日志存放目录
-
#module_name = command #默认执行的模块
-
#action_plugins = /usr/share/ansible/plugins/action #action插件存放目录
-
#callback_plugins = /usr/share/ansible/plugins/callback #callback插件的存放目录
-
#connection_plugins = /usr/share/ansible/plugins/connection #connection插件的存放目录
-
#lookup_plugins = /usr/share/ansible/plugins/lookup #lookup插件的存放目录
-
#vars_plugins = /usr/share/ansible/plugins/vars #vars插件的存放目录
-
#filter_plugins = /usr/share/ansible/plugins/filter #filter插件的存放目录
-
#test_plugins = /usr/share/ansible/plugins/test #test插件的存放目录
-
#fact_caching = memory #getfact缓存的主机信息存放方式。
-
#retry_files_enabled = False
-
#retry_files_save_path = ~/.ansible-retry #错误重启文件存放目录
-
[privilege_escalation]
-
#become=True #是否sudo
-
#become_method=sudo #sudo方式
-
#become_user=root #sudo后变为root用户
-
#become_ask_pass=False #sudo后是否验证密码
-
[paramiko_connection]
-
#record_host_keys=False #不记录新主机的key以提升效率
-
#pty=False #禁用sudo功能
-
[ssh_connection]
-
#pipelining = False #管道加速功能,需配合requiretty使用方可生效
-
[accelerate]
-
#accelerate_port = 5099 #加速连接端口
-
#accelerate_timeout = 30 #命令执行超时时间,单位秒
-
#accelerate_connect_timeout = 5.0 #连接超时时间,单位秒
-
#accelerate_daemon_timeout = 30 #上一个活动连接的时间,单位分钟
-
#accelerate_multi_key = yes
-
[selinux]
-
#special_context_filesystems=nfs,vboxsf,fuse,ramfs
3、ansible static inventory(静态库存)配置及详解
static Inventory指的是在文件/etc/ansible/hosts中指定的主机和组。
-
# Ex 1: Ungrouped hosts, specify before any group headers.
-
#未定义组的主机,指定在组前面。
-
## green.example.com
-
## blue.example.com
-
## 192.168.100.1
-
## 192.168.100.10
-
-
# Ex 2: A collection of hosts belonging to the 'webservers' group
-
#定义一个叫‘webservers’的组,里面的主机都属于这个组。
-
## [webservers]
-
## alpha.example.org
-
## beta.example.org
-
## 192.168.1.100
-
## 192.168.1.110
-
# If you have multiple hosts following a pattern you can specify
-
# them like this:
-
-
## www[001:006].example.com #[001:006]表示001~006之间所有的数字(包括001和006),如:www001.example.com、www002.example.com......www006.example.com
-
-
# Ex 3: A collection of database servers in the 'dbservers' group
-
-
## [dbservers]
-
##
-
## db01.intranet.mydomain.net
-
## db02.intranet.mydomain.net
-
## 10.25.1.56
-
## 10.25.1.57
-
## db-[a:z]-node.example.com #[a:z]表示a~z之间所有的字母。
-
-
[test]
-
127.0.0.1
-
192.168.3.251
-
#定义主机变量
-
[webservers]
-
web1.test.com http_port=8080 maxRequestsPerChild=801 #自定义http_port的端口号为8080,配置maxRequestsPerChild为801
-
#定义组变量
-
[groupserver]
-
web1.test.com
-
web2.test.com
-
-
[groupservers:vars]
-
ntp_server=ntp.test.com #定义groupservers组中所有主机ntp_server值为ntp.magedu
-
-
#定义嵌套及组变量
-
[apache]
-
[a:d].test.com
-
-
[nginx]
-
web[5:7].test.com
-
-
-
[webservers:children]
-
apache
-
nginx
-
-
#hosts文件中,变量会被定义在主机名的后面或组名的下方。
-
#为某台主机指定变量,作用范围仅限于当台主机
-
[bj]
-
app1.test.com proxy_state=present
-
app2.test.com proxy_state=absent
-
-
#为主机组指定变量,作用范围为整个主机组
-
[bj:vars]
-
bj_host=bj.static.test.com
-
api_version=3.0
-
-
3.1、定义主机和组:
-
#主机(hosts)可以使用域名、主机名、IP地址表示。
-
192.168.3.3
-
web1.test.com
-
#组(group)
-
[webservers]
-
192.168.3.4
-
web2.test.com
-
3.2、端口与别名:
-
192.168.3.5:6060
-
#dbserver为192.168.3.5:6060的别名。
-
dbserver ansible_ssh_port = 6060 ansible_ssh_host = 192.168.3.5
-
3.3、指定主机范围:
-
[webservers]
-
web[1:5].test.com
-
[daserver]
-
db-[a:e].test.com
-
3.4、查看系统变量(facts):
ansible test -m setup
-
ansible_ssh_host #要连接的主机名
-
ansible_ssh_port #要连接的端口号(默认ssh端口22)
-
ansible_ssh_user #ssh连接时指定的用户名
-
ansible_ssh_pass #ssh连接时用户登录密码
-
ansible_sudo_pass #使用sudo连接用户时的密码
-
ansible_ssh_private_key_file #密钥文件,如果不适用ssh-agent管理时可以使用此选项。
-
ansible_shell_type #shell类型,默认sh。
-
ansible_connection #ssh连接的类型:local,ssh,paramiko;ansible1.2之前默认是paramiko,以后版本优先使用基于controlpersist的ssh。
-
ansible_os_family #系统类型。
-
ansible_distribution_version #系统版本。
-
ansible_python_interpreter #用来指定python解释器的路径,也可以指定ruby、perl的路径。
-
#例:
-
[web1]
192.168.3.60 ansible_ssh_port=8020 ansible_ssh_user=root ansible_ssh_pass=123456
3.5、组内变量:
-
#变量也可以通过组名应用到组内的所有成员。
-
#web组中包含两台主机web1和web2,通过对web组指定vars变更,相应的web1和web2相当于指定了apache和nginx变量参数的值web1.test.com和web2.test.com。
-
[web]
-
web1
-
web2
-
[web:vars]
-
apache=web1.test.com
-
nginx=web2.test.com
3.6、组的子组与组内变量
-
-
[beijing]
-
host1
-
host2
-
[tianjin]
-
host3
-
host4
-
[northern:children]
-
beijing
-
tianjin
-
[northern:vars]
-
web_server=northern.test.com
-
web_port=6060
-
client_header_timeout=10
-
client_body_timeout=10
-
[china:children]
-
northern
-
southern
4、ansible dynamic inventory(动态库存)配置及详解
dynamic inventory指通过外部脚本获取主机列表,并按照ansible 所要求的格式返回给ansilbe命令的。这部分一般会结合CMDB资管系统、zabbix 监控系统、crobble安装系统、云计算平台等获取主机信息。由于主机资源一般会动态的进行增减,而这些系统一般会智能更新。我们可以通过这些工具提供的API 或者接入库查询等方式返回主机列表。
例1:通过一段python代码打印一个段json格式的主机信息:
-
#!/usr/bin/env python
-
# coding=utf-8
-
import json
-
host1 = ['192.168.3.60','192.168.3.61']
-
host2 = ['192.168.3.253']
-
group1 = 'test1'
-
group2 = 'test2'
-
hostdata = {group1:host1,group2:host2}
-
print json.dumps(hostdata,indent=4) #indent代表缩进,这里缩进4个空格。
执行结果:
-
root@ubuntu:/etc/ansible/roles# python host.py
-
{
-
"test1": [
-
"192.168.3.60",
-
"192.168.3.61"
-
],
-
"test2": [
-
"192.168.3.253"
-
]
-
}
-
-
root@ubuntu:/etc/ansible/roles# ansible -i host.py test1 -m ping -k
-
SSH password:
-
192.168.3.61 | SUCCESS => {
-
"changed": false,
-
"ping": "pong"
-
}
-
192.168.3.60 | SUCCESS => {
-
"changed": false,
-
"ping": "pong"
-
}
-
root@ubuntu:/etc/ansible/roles# ansible -i host.py test2 -m command -a 'uptime' -k
-
SSH password:
-
192.168.3.61 | SUCCESS | rc=0 >>
-
12:17:01 up 7 days, 22:26, 3 users, load average: 0.00, 0.00, 0.00
-
例2:通过一段较复杂的python代码打印一个段json格式的主机信息:
-
#!/usr/bin/env python
-
# coding=utf-8
-
import json
-
group1 = 'databases'
-
group2 = 'webservers'
-
group3 = 'test1'
-
group4 = 'test2'
-
group5 = 'test3'
-
host1 = ['192.168.3.60','192.168.3.61']
-
var1 = 'true'
-
host2 = ['192.168.3.62','192.168.3.63']
-
host3 = ['192.168.3.64','192.168.3.65','192.168.3.66']
-
var2 = 'false'
-
group6 = [group4,group5]
-
host4 = ['192.168.3.67']
-
host5 = ['192.168.3.68']
-
hostdata = {group1:{"hosts":host1,"vars":{"a":var1}},group2:host2,group3:{"hosts":host3,"vars":{"b":var2},"children":group6},group4:host4,group5:host5}
-
print json.dumps(hostdata,indent=4) #indent代表缩进
执行结果:
-
root@ubuntu:/etc/ansible/roles# python hosts.py
-
{
-
"webservers": [
-
"192.168.3.62",
-
"192.168.3.63"
-
],
-
"test1": {
-
"hosts": [
-
"192.168.3.64",
-
"192.168.3.65",
-
"192.168.3.66"
-
],
-
"children": [
-
"test2",
-
"test3"
-
],
-
"vars": {
-
"b": "false"
-
}
-
},
-
"test3": [
-
"192.168.3.68"
-
],
-
"test2": [
-
"192.168.3.67"
-
],
-
"databases": {
-
"hosts": [
-
"192.168.3.60",
-
"192.168.3.61"
-
],
-
"vars": {
-
"a": "true"
-
}
-
}
-
}
例:通过一段shell代码打印一个段json格式的主机信息:
-
#!/bin/bash
-
group='''
-
{
-
"test":[
-
"192.168.3.60",
-
"192.168.3.61"
-
]
-
}
-
'''
-
echo ${group}
执行结果:
-
root@ubuntu:/etc/ansible/roles# ansible -i host.sh test -m command -a 'uname -o' -k
-
SSH password:
-
192.168.3.61 | SUCCESS | rc=0 >>
-
GNU/Linux
-
-
192.168.3.60 | SUCCESS | rc=0 >>
-
GNU/Linux
阅读(2115) | 评论(0) | 转发(0) |