Ansible-tower 你还没用起来吗?

2021-11-15 17:27:37 浏览数 (1)

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
代码语言:javascript复制
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
代码语言:javascript复制
-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

参考

  1. https://blog.51cto.com/qiangsh/2410518
  2. https://www.cnblogs.com/kevingrace/p/11306540.html

0 人点赞