01
ansible tower实践应用
Ansible-Tower(之前叫做awx)是将ansible的指令界面化,简明直观,简单易用。Ansibke-tower其实就是一个图形化的任务调度,复杂服务部署,IT自动化的一个管理平台,属于发布配置管理系统,支持Api及界面操作,Django编写。Ansible-tower可以通过界面从github拉取最新playbook实施服务部署,提高生产效率。当然它也提供一个RESET API和命令行的CLI以供python脚本调用。听说实践是最快的学习方式,开始动手吧。
ansible-tower在不同的操作系统上安装使用是不同的,我会在文章中注意标注的,我们此时在测试环境中进行测试,因此关闭selinux,firewall等防火墙
02
安装环境
- centos 7. (python 2.7)
- ubuntu 16.04 (python2.7,python3.6)
2.1
关闭防火墙
代码语言:javascript复制sed -i 's/SELINUX=Enforing/SELINUX=disabled/g' /etc/sysconfig/selinux # 修改配置文件关闭selinux
setenforce 0 # 非重启关闭selinux
getenforce # 查看selinux状态
systemctl stop firewalld && systemctl disable firewalld && firewall-cmd --state # 关闭firewall
#若在生产环境,不建议修改防火墙状态 firewall-cmd --permanent --zone=public --add-port=80/tcp && systemctl restart firewalld.service
03
安装ansible
这个没啥需要强调的,看官网可查。
04
安装ansible-tower
代码语言:javascript复制#下载ansible-tower
wget https://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-3.5.0-1.tar.gz -O /usr/local/src/ansible-tower-setup-3.5.0-1.tar.gz
#解压到指定的目录下
cd /usr/local/src/ && tar -zvxf ansible-tower-setup-3.5.0-1.tar.gz -C /usr/local/
#修改配置文件
mv /usr/local/ansible-tower-setup-3.5.0-1 /usr/local/ansible-tower && cd $_
sed -i "s#password=''#password='admin123'#g" inventory #修改rabbitmq,postgresql,ansible-tower Dashboard的密码
sed -i "s#host=''#host='127.0.0.1'#g" inventory #修改postgresql的host
sed -i "s#port=''#port='5432'#g" inventory #修改postgresql的运行端口
mkdir -p /var/log/tower #创建ansible-tower的日志目录
./setup.sh #开始安装
注意在整个安装的过程中是使用ansible安装依赖的服务的,如果主机上没有Postgresql,rabbitmq这些都会被依赖自动的安装,整个过程不需要干预
此处我的测试主机的IP地址是172.16.132.134, ansible-tower管理访问地址为https://172.16.132.134
05
ansible-tower修改使用限制
- 修改ansible-tower的使用时间
- 修改ansible-tower的使用主机的数量
5.1
添加ansible-tower license
ansible-tower的初次登陆需要license,我们可以在<a href="https://www.ansible.com/license">ansible官网申请</a>一个免费10个主机的licence,申请完成之后,上传,此处有一个网上别人申请过的license,可以使用,将其保存为字母命名的.txt结尾的文件
代码语言:javascript复制{
"company_name": "alibaba",
"contact_email": "a842617364@gmail.com",
"contact_name": "Ma Yun",
"hostname": "4ecef0cbe6d542e48d938b8827df5590",
"instance_count": 10,
"license_date": 2139358945,
"license_key": "45a71e59df50020d37df63d7cd80c95503bc5b557b9d0eff9e1df038d5dd4276",
"license_type": "basic",
"subscription_name": "Ansible Tower by Red Hat, Self-Support (10 Managed Nodes)"
}
此时登陆到平台上在license处可以看到过期的时间,但是主机的使用量是10个,下一步我们修改主机的可用量
- 在Centos环境中需要修改的文件存储在: /var/lib/awx/venv/awx/lib/python2.7/site-packages/tower_license
ls -l cd /var/lib/awx/venv/awx/lib/python2.7/site-packages/tower_license
-rw-r--r-- 1 root root 10417 Aug 11 2019 __init__.py
-rw-r--r-- 1 root root 6352 Aug 11 2019 __init__.pyc
-rw-r--r-- 1 root root 6352 Aug 11 2019 __init__.pyo
- 在Ubuntu环境中需要修改的文件存储在 /var/lib/awx/venv/awx/lib/python3.6/site-packages/tower_license
-rw-r--r-- 1 root root 5885 Aug 18 22:22 __init__.pyc
drwxr-xr-x 2 root root 4096 Aug 17 23:24 __pycache__
观察以上两个操作系统的tower-license所在的位置是不一样的
Centos上修改路径下的`__init__.py`大概在119行的位置增加`return True`
代码语言:javascript复制.........
119 def _check_cloudforms_subscription(self):
120 return True # <<<
121 if os.path.exists('/var/lib/awx/i18n.db'):
122 return True
123 if os.path.isdir("/opt/rh/cfme-appliance") and os.path.isdir("/opt/rh/cfme-gemset"):
124 try:
.........
Ubuntu上只有一个__init__.pyc文件,因此我们需要将其反编译
代码语言:javascript复制apt-get install python-pip
pip install uncompyle6
uncompyle6 __init__.pyc > __init__.py
#-rw-r--r-- 1 root root 7219 Aug 18 22:21 __init__.py
#-rw-r--r-- 1 root root 5885 Aug 18 22:22 __init__.pyc
#-rw-r--r-- 1 root root 5885 Aug 18 22:22 __init__.pyo
#drwxr-xr-x 2 root root 4096 Aug 17 23:24 __pycache__
python -m py_compile __init__.py
python -O -m py_compile __init__.py
然后修改__init__.py文件 大概在71至83行之间
代码语言:javascript复制 71 if self._check_cloudforms_subscription():
72 self._generate_cloudforms_subscription()
73
74 def _generate_cloudforms_subscription(self):
75 self._attrs.update(dict(company_name='Red Hat CloudForms License', instance_count=9999999,
76 license_date=253370764800, #此处的253370764800L修改成253370764800
77 license_key='xxxx',
78 license_type='enterprise',
79 subscription_name='Red Hat CloudForms License'))
80
81 def _check_cloudforms_subscription(self):
82 return True # 此处增加行return True
83 if os.path.exists('/var/lib/awx/i18n.db'):
84 return True
85 else:
86 if os.path.isdir('/opt/rh/cfme-appliance'):
87 if os.path.isdir('/opt/rh/cfme-gemset'):
88 pass
89 try:
90 has_rpms = subprocess.call(['rpm', '--quiet', '-q', 'cfme', 'cfme-appliance', 'cfme-gemset'])
91 if has_rpms == 0:
92 return True
然后重启ansible-tower服务
代码语言:javascript复制ansible-tower-service restart
参考
- https://blog.51cto.com/qiangsh/2410518
- https://www.cnblogs.com/kevingrace/p/11306540.html