ansible自动化运维第三章ansible组件介绍

22 篇文章 0 订阅

一、ansible inventory
配置要管理主机的信息。指定inventory的方式。

  • 默认是一个静态的INI格式的文件/etc/ansible/hosts。
  • 通过ANSIBLE_HOSTS环境变量指定。
  • 运行ansible和ansible-playbook时用-i参数临时设置。
    1、定义主机和主机组
172.17.42.101 ansible_ssh_pass=‘123456’
172.17.42.102 ansible_ssh_pass=‘123456’
[docker]
172.17.42.10[1:3]
[docker:vars]
ansible_ssh_pass='123456'#是ansible Inventory内置参数
[ansible:children]#定义了一个组叫ansible,其中包含docker组
docker

#分别针对不同的主机和主机组进行ansible的ping模块检测
ansible 172.17.42.101:172.17.42.102 -m ping -o
ansible docker -m ping
ansible ansible -m ping

2、多个Inventory列表
Ansible还支持多个Inventory文件,可以方便管理不同业务或者不同环境的机器。
使用方法:

  • 修改ansible.cfg中hosts文件的定义,或者使用ANSIBLE_HOSTS环境变量定义
  • 创建一个文件夹,里面存放多个inventory文件。
inventory/
|-docker
|-hosts

cat inventory/hosts
172.17.4.101 ansible_ssh_pass='123456'
172.17.4.101 ansible_ssh_pass='123456'

cat inventory/docker
[docker]
172.17.42.10[1:3]
[ansible:vars]
ansible_ssh_pass='123456'
[ansible:children]
docker

vim ansible.cfg
inventory = /root/inventory/

ansible 172.17.42.101:172.17.17.42.102 --list-hosts
ansible docker --list-hosts
ansible ansible --list-hosts

3、动态inventory
引用动态inventory配置,把ansible.cfg文件中的inventory的定义值改成一个执行脚本。
脚本可以是任何语言,脚本的使用参数和脚本的执行结果有要求。脚本需要支持两个参数:

  • –list或者-L,显示所有主机以及主机组的信息.(JSON)
  • –host或者-H,这个参数后需指定一个host,运行结果会返回这台主机的所有信息。(JSON)
    vim hosts.py
import argparse,sys,json
def lists():
	r = {}#创建一个字典
	h = ['172.17.42.10' + str(i) for i in range(1,4)]#创建一个主机list
	hosts = {'hosts':h}#把这个list放入字典
	r['docker'] = hosts#把这个字典放入list
	return json.dumps(r,indent=4)
def hosts(name):
	r = {'ansible_ssh_pass':'123456'}
	cpis=dict(r.items())
	return json.dumps(cpis)
parser = argparse.ArgumentParser()
parser.add_argument('-l','--list',help='hosts list',action='store_true')
parser.add_argument('-H','--host',help='hosts vars')
args = vars(parser.parse_args())
if args['list']:
	print(lists())
elif args['host']:
	print(hosts(args['host']))
else:
	parser.print_help()

运行测试

#运行python脚本
python hosts.py --list
python hosts.py -H 172.17.42.102
#运行ansible指定inventory动态脚本文件
ansible -i hosts.py 172.17.42.102:172.17.42.103 -m ping -o

4、inventory内置参数
在这里插入图片描述
二、ansible AD-Hoc
Ansible自带259个模块,使用ansible-doc -l显示所有自带模块。使用ansible-doc 模块名查看模块的介绍及案例。使用Ad-Hoc命令,ansible的facts,lookup插件无法使用。
1、执行命令
默认的并发数由ansib.cfg的forks值来控制。
也可以使用-f参数指定并发数。
也可以使用Ansible异步执行功能。

ansible docker -a 'hostname' -o
ansible docker -a 'uname -r' -f 5 -o#-f并发数为5,-o在一行内显示
#-P 0的情况下回直接返回job_id,然后针对主机根据job_id查询执行结果,(在后台运行)
ansible docker -B 120 -P 0 -a 'sleep 10;hostname' -f 5 -o
......'ansible_job_id':'404114810096.2386'......
#通过async_status模块查看异步任务的状态和结果
ansible 172.17.42.101 -m async_status -a 'jid=404114810096.2386'
#当-P参数大于0时,absible会自动根据job_id去轮询查询执行结果(前台运行)
ansible docker -B 12 -P 1 -m shell -a 'sleep 5;hostname' -f 5 -o

2、复制文件
使用copy模块来批量下发文件,文件的额变化通过MD5值来判断。

ansible docker -m copy -a 'src=hosts.py dest=/root/hosts.py owner=root group=root mode=644 backup=yes' -o
#验证文件下发功能
ansible docker -m shell -a 'md5sum /root/hosts.py' -f 5 -o

3、包和服务管理

#yum安装包,版本为最新,也可以是正常版本state=present
ansible docker -m yum -a 'name=httpd state=latest' -f 5 -o
#服务的启动
ansible docker -m service -a 'name=httpd state=started' -f 5 -o
#查看已经安装的包的版本
ansible dcoker -m shell -a 'rpm -qa httpd' -f 5 -o
#验证服务运行情况
ansible docker -m shell -a 'netstat -tpln|grep httpd' -f 5

4、用户管理
使用user模块批量新建用户:

#首先用openssl生成一个密码
echo ansible | openssl passwd -1 -stdin
#然后新建用户
ansible docker -m user -a 'name=shencan password="$1$f.Y3hZWM$gzZkwHYiG6IUQKC9wkPJU1"' -f 5 -o
#验证
ssh 172.17.42.103 -l shencan

三、Ansible playbook
Ad-Hoc命令能完成基本配置管理工作,在实际使用时其实大部分时间都是在编写playbook。
四、Ansible facts
facts组件是Ansible用于采集被管理机器设备信息的一个功能,我们可以使用setup模块查看机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在json格式中,最上层的值是ansible_facts。

ansible 172.17.42.101 -m setup
"ansible_facts":{......
}......
#值查看指定信息
ansible 172.17.42.101 -m setup -a 'filter=ansible_all_ipv4_addresses'

1、使用facter扩展facts信息

#查看是否安装
ansible 172.17.42.101 -m shell -a 'rpm -qa facter'
#运行facter模块查看facter信息
ansible 172.17.42.101 -m facter
#直接运行setup模块也会采集facter信息,所有的facter信息以facter_开头
ansible 172.17.42.101 -m facter

2、使用ohai扩展facts信息
ohai是Chef配置管理工具中检测节点属性的工具,ansible的facts也支持ohai信息的采集。需要被管理及其上安装ohai包。

#安装包
gem install ohai
ansible 172.17.42.1 -m shell -a 'gem list|grep ohai'
#直接运行ohai模块查看其属性
ansible 172.17.42.1 -m ohai
#直接娙setup模块,也会采集ohai信息
ansible 172.17.42.1 -m setup

五、Ansible role
在这里插入图片描述
这个role用来配置部署nginx服务。role所有文件都在nginx目录下。

  • site.yaml是role引用的入口文件,文件名可随意。
  • files目录里面放一些静态文件,比如页面主页。
  • handlers目录翻了task的handler。
  • task目录下是task。
  • templates目录下放jinja2模板文件。
  • vars目录下存放着变量文件。
cat site.yaml
---
- hosts: 192.168.198.101
  roles:
  - {role: nginx, version: 1.0.15}
cat roles/nginx/tasks/main.yaml
---
- name: Install nginx package
  yum: name=nginx-{{ version }} state=present
- name: Copy nginx.conf Template
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf  owner=root group=root backup=yes mode=0644
  notify: restart nginx
- name:Copy index.html
  copy: src=index.html dest=/usr/share/nginx/html/index.html
owner=root group=root backup=yes mode=0644
  - name: make sure nginx service running
    service: name=nginx state=started
cat    roles/nginx/handlers/main.yaml
---
- name: restart nginx
  service: name=nginx state=restarted
cat roles/nginx/templates/nginx.conf.j2|grep  '\{{' 
worker_processes {{ ansible_processesor_cores }};
cat roles/nginx/files/index.html
hello kugou
#执行这个role
ansible-playbook -i /root/hosts site.yaml
#curlnginx测试
curl 192.168.198.101

六、Ansible Galaxy
Galaxy是Ansible官方一个分享role的功能平台。可以把自己编写好的role上传,也可以下载。
也可以从github上下载role。在我们使用ansible-galaxy命令下载role时候,要了解role的运行平台和ansible依赖版本以及相关依赖。

#默认安装到/etc/ansible/roles目录下,引用方式和自己写的一样
ansible-galaxy install

七、本章小结
了解了ansible常用的组件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值