一.ansible 相关组建介绍
1.Ansible Inventory(主机清单)
机器的信息都存放在ansible的Inventory 组件里面。在我们工作中配置部署针对的主机必须先存放在Inventory 里面,这样才能使用Ansible对服务器进行操作。默认Ansible的Inventory是一个静态 的INI格式的文件/etc/ansible/hosts。还可以在运行ansible命令的时候用-i 参数临时指定 Inventory的配置文件或者通过ANSIBLE_HOSTS环境变量指定。
1.1.定义主机和主机组
/etc/ansbile/hosts
192.168.1.10 ansible_ssh_pass='123456'
192.168.1.11 ansible_ssh_pass='123456'
[zookeeper]
192.168.1.2[1:3]
[zookeeper:var]
ansible_ssh_pass='123456'
[ansible:children]
zookeeper
第1、2行定义了主机192.168.1.10和192.168.1.11,然后使用Inventory 内置参数ansible_ssh_pass定义了SSH登陆密码。
第3行定义了一个组叫zookeeper
第4行定义了zookeeper组下面三台主机192.168.1.21,192.168.1.22,192.168.1.23
第5行到第6行定义针对zookeeper组的ssh登陆密码。
第7行到第8行定义了一组ansible,下面包含zookeeper组
通过ping模块我们可以测试到该组是否可以通过ansible 连接
[root@zabbix ansible]# ansible zookeeper -m ping
192.168.1.21 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
192.168.1.22 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
192.168.1.23 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
1.2.多个Inventory列表
我们可以通过修改ansible.cfg 中inventory 参数指定inventory 为一个目录,默认为(inventory = /etc/ansible/host)
/etc/ansible/ansible.cfg 修改
inventory = /etc/ansible/inventory
[root@zabbix ansible]# mkdir inventory
[root@zabbix ansible]# tree inventory/
inventory/
├── redis
└── zookeeper
[root@zabbix inventory]# cat redis
[redis]
192.168.239.129
192.168.239.130
192.168.239.131
1.3.动态Inventory
在实际应用部署中会有大量的主机列表。如果手动维护这些列表将是一个非常繁琐的事情。其实Ansible还支持动态的Inventory里面的主机列表和变量信息都支持从外部拉取。比如我们可以从CMBD系统和zabbix监控系统拉取所有主机信息,然后使用ansible 进行管理 。
将ansible.cfg 中inventory 参数指定为一个可执行的脚本。这个脚本的内容不受任何编程语言限制,但是这个脚本使用参数的时候有一定的规范并且对脚本执行的结果也有要求。这个脚本需要支持两个参数:
*--list 或者-l ,这个参数运行后显示所有的主机以及主机组的信息(json格式)
*--host 或者-H,这个参数后面需要指定一个host,运行结果会返回这台主机的所有信息(包括认证信息,主机变量等),也是json 格式。
1.4.Inventory 内置参数
ansible_ssh_host 定义hosts ssh 地址
ansible_ssh_port 定义hosts ssh 端口
ansible_ssh_user 定义hosts ssh 用户
ansible_ssh_pass 定义hosts ssh 认证密码
ansible_sudo 定义hosts sudo 用户
ansible_sudo_pass 定义hosts sudo 密码
ansible_sudo_exe 定义hosts sudo 路径
ansible_connection 定义hosts连接方式
ansible_ssh_private_key_file 定义hosts私钥
ansible_shell_type 定义hosts shell 类型
ansible_python_interpreter 定义hosts任务执行python 路径
2.Ansible Ad-Hoc 命令
2.1.执行命令
shell 模块
ansible 默认执行shell
ansible hosts -a "command"
= ansible hosts -m shell -a "command"
2.2.复制文件
copy 模块
ansible hosts -m copy -a 'src=path dest=path owner=root group=root mode=644 backup=yes'
backup=yes备份远程节点上的原始文件,在拷贝之前。如果发生什么意外,原始文件还能使用。
2.3.包和服务管理
yum 模块
service 模块
Ansible 还支持直接使用Ad-Hoc命令来管理包和服务,如下所示:
ansible hosts -m yum -a 'name=httpd state=latest'
ansible hosts -m service -a 'name=httpd state=started'
2.4.用户管理
user模块
首先通过openssl 命令来生成一个密码,因为ansible user 的 password 参数需要接受加密后的值,如下所示:
[root@zabbix inventory]# echo ansible |openssl passwd -1 -stdin
$1$zWZPPBQu$uBau9cVX2ltqAyvNkCeAd1
使用user模块批量新建用户:
ansible hosts -m user -a 'name=test,password="$1$zWZPPBQu$uBau9cVX2ltqAyvNkCeAd1"
关于ansible 的其他Ad-Hoc模块或者模块用法,可以通过ansible-doc -l 和ansible-doc 模块名进行查看。
3.ansible playbook
playbook 是ansible 进行配置管理的组件,虽然ansible的日常Ad-Hoc命令功能很强大,能完成一些基本配置管理工作,但是Ad-Hoc命令无法支撑复杂环境的配置管理工作。在我们实际使用ansible的工作中,大部分时间都是在编写playbook,这是ansible非常重要的组件之一。
4.ansible facts
facts组件是ansible用于采集被管机器设备信息的一个功能,我们可以使用setup模块查机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个json格式的数据结构中,ansible_facts 是最上层的值。下面我们通过实际操作来简单了解facts的数据结构:
ansible hosts -m setup
facts 组件默认已经收集了很多的设备基础信息,这些信息可以在做配置管理的时候进行引用。
5.Ansible role
用role的方式管理playbook ,用来维护playbook 。
[root@zabbix ansible]# ls
ansible.cfg hosts install_zabbix_agent.retry install_zabbix_agent.yaml roles
[root@zabbix ansible]# tree roles/
roles/
└── install_zabbix_agent
├── files
│ └── zabbix-3.2.6.tar.gz
├── tasks
│ └── main.yaml
├── templates
│ ├── zabbix_agentd
│ └── zabbix_agentd.conf
└── vars
└── main.yaml
6.Ansible Galaxy
Ansible 的Galaxy 是ansible 官方一个分享role的功能平台,它的网址是https://galaxy.ansible.com/list#/roles 。可以把你编写的role通过ansible-galaxy 上传到Galaxy网站供其他人下载和使用。可以通过ansible-galaxy 命令很简单地实现role的分享和安装。当然Ansible 也支持从GitHub上下载role。在我们使用ansible-galaxy命令下载role的时候需要了解role的运行平台和Ansible依赖版本以及相关依赖。日常工作中我们使用ansible-galaxy install 就可以,默认会安装到/etc/ansible/roles目录下。
二.centos6 安装ansible
1.环境
python 2.6以上
paramiko 模块
PyYAML
Jinja2
httplib2
下载安装包
ansible下载地址:http://releases.ansible.com/ansible/
python 安装 http://www.jianshu.com/p/9cb04a70fade
[root@jumpserver ~]# python --version
Python 2.7.13
[root@jumpserver software]# wget http://releases.ansible.com/ansible/ansible-2.3.1.0.tar.gz
[root@jumpserver software]# tar -xf ansible-2.3.1.0.tar.gz
##修改pip源
[root@jumpserver software]# cat /root/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com
[root@jumpserver software]# pip install pycrypto==2.6
[root@jumpserver software]# pip install paramiko
[root@jumpserver software]# pip install Jinja2
[root@jumpserver software]# pip install httplib2
[root@jumpserver software]# pip install PyYAML
[root@jumpserver software]# cd ansible-2.3.1.0
[root@jumpserver ansible-2.3.1.0]# python setup.py install
[root@jumpserver ansible-2.3.1.0]# mkdir /etc/ansible
[root@jumpserver ansible-2.3.1.0]# cd examples/
[root@jumpserver examples]# ls
ansible.cfg hosts
[root@jumpserver examples]# cp ./* /etc/ansible/
[root@jumpserver examples]# whereis ansible
ansible: /etc/ansible /usr/local/bin/ansible
ansible 安装成功
三.相关网站
1.http://www.cnblogs.com/wsl222000/p/5724938.html
2.http://blog.csdn.net/hu_wen/article/details/56675735
3.https://github.com/hello-wn/ansible_zabbix
4.http://blog.csdn.net/wn_hello/article/details/52237755
5.http://www.cnblogs.com/yue-hong/p/6755709.html
6.http://www.jianshu.com/p/15b154c4b8cb
7.https://github.com/kuailemy123/Ansible-roles
8.http://blog.csdn.net/williamfan21c/article/details/53439307
网友评论