Ansible-Tower部署and破解

kionf

ansibke-tower他是一个图形化的任务调度,复杂服务部署,IT自动化的一个管理平台。可以通过界面从github拉取最新playbook实施服务部署,提高生产效率。当然,它也提供一个RESET API和命令行的CLI以供python脚本调用。

0x00 前言

ansible-tower关于此类的文章比较少,踩过坑,16年那会儿有听过就装上研究了一发,现在做个迟来的笔记, 包括部署,和免费版10台机器限制的破解。

支持的操作系统:

  • Red Hat Enterprise Linux 7.2 or later 64-bit
  • CentOS 7.2 or later 64-bit
  • Ubuntu 14.04 LTS 64-bit
  • Ubuntu 16.04 LTS 64-bit

推荐最低内存为2GB。

0x01 安装

整个申请流程也是麻烦的很,尤其是申请免费license。这里直接给出官网下载链接Ansible-Tower

这里使用的是最新版(3.1.4)

1
2
3
4
5
6
7
wget http://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-latest.tar.gz -P /data/tower/
cd /data/tower/
tar xvf ansible-tower-setup-latest.tar.gz -C ./
cd ansible-tower-setup-3.1.4/

目录结构,安装非常简单,这也要得益于ansible的playbook。

1
2
3
4
5
6
7
8
9
10
11
12
[[email protected] ansible-tower-setup-3.1.4]# ll
total 60
-rw-r--r--. 1 root root 2526 Jul 10 13:59 README.md
-rw-r--r--. 1 root root 129 Jul 10 13:59 backup.yml
drwxr-xr-x. 2 root root 4096 Jul 10 13:59 group_vars
-rw-r--r--. 1 root root 10 Jul 25 03:03 install.retry
-rw-r--r--. 1 root root 5571 Jul 10 13:59 install.yml
-rw-r--r--. 1 root root 379 Jul 25 03:03 inventory
drwxr-xr-x. 2 root root 12288 Jul 10 13:59 licenses
-rw-r--r--. 1 root root 944 Jul 10 13:59 restore.yml
drwxr-xr-x. 18 root root 4096 Jul 10 13:59 roles
-rwxr-xr-x. 1 root root 9628 Jul 10 13:59 setup.sh

编辑inventory配置文件如下

vim inventory

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[tower]
localhost ansible_connection=local
[database]
[all:vars]
#ansible-tower登录密码
admin_password='admin'
#PostgreSQL监听地址端口
pg_host='127.0.0.1'
pg_port='5432'
pg_database='awx'
pg_username='awx'
#here
pg_password='awx'
rabbitmq_port=5672
rabbitmq_vhost=tower
rabbitmq_username=tower
#here
rabbitmq_password='tower'
rabbitmq_cookie=cookiemonster
# Needs to be true for fqdns and ip addresses
rabbitmq_use_long_name=false

运行安装脚本

1
sh setup.sh

脚本会自动安装,熟悉的执行playbook任务界面。

安装成功

1
localhost : ok=41 changed=5 unreachable=0 failed=0

0x02导入license文件

注意从3.2.x版本开始ansible-tower破解方式更改,无需申请license文件

更改文件/var/lib/awx/venv/awx/lib/python2.7/site-packages/tower_license/__init__.py第120行如下

119 def _check_cloudforms_subscription(self):
120 return True
121 if os.path.isdir("/opt/rh/cfme-appliance") and os.path.isdir("/opt/rh/cfme-gemset"):
122 try:
123 has_rpms = subprocess.call(["rpm", "--quiet", "-q", "cfme", "cfme-appliance", "cfme-gemset"])
124 if has_rpms == 0:
125 return True
126 except OSError:
127 pass
128 return False

HOSTS限制破解

反汇编/var/lib/awx/venv/awx/lib/python2.7/site-packages/tower_license/__init__.pyc

1
2
cd /var/lib/awx/venv/awx/lib/python2.7/site-packages/tower_license/; uncompyle6 __init__.pyc >__init__.py
rm -f __init__.pyc __init__.pyo

更改文件 /var/lib/awx/venv/awx/lib/python2.7/site-packages/tower_license/__init__.pyc

更改低153行如下
153
154
155
#available_instances = int(attrs.get('instance_count', None) or 0)
available_instances = 100000
attrs['current_instances'] = current_instances

访问tower:https://192.168.99.188/,默认用户名为admin密码为inventory文件中设置的admin_password='admin'

kionf

重点来了,这里会提示让选择license文件,申请这个很是麻烦,so这里分享下我自己申请下来的license文件直接导入就ok。仅供实验测试使用,请勿用于其它用途!

kionf

0x03 破解10个hosts限制

申请的免费版license最多只能添加10个主机。

1
HOSTS AVAILABLE 10

首先下载python反编译工具

1
pip install uncompyle2

反编译文件task_engine.pyc

1
2
3
4
5
6
7
8
9
#查找文件
[email protected]:~# find / -name task_engine.pyc
/usr/lib/python2.7/dist-packages/awx/main/task_engine.pyc
cd /usr/lib/python2.7/dist-packages/awx/main/
#反编译文件
uncompyle6 task_engine.pyc >task_engine.py

更改task_engine.pyc文件

修改内容 available_instances = int(self.attributes['instance_count'])available_instances = 10000,大约在162行

删除task_engine.pyc task_engine.pyo,重启tower

kionf

0x04

至此安装破解都已完成。简单的试用了下,很方便,通过git来获取更新任务playbook文件,图形化配置playbook参数,任务审计记录。结合ansible进行主机管理,服务部署,很方便。
写了个zookeeper集群部署的playbook deploy_zk。:P