网上溜了半天没找到这个版本的破解方法,之前的办法都已经无效,自己琢磨了一下发现还是很好搞的。
Environment
OS: CentOS Linux release 7.9.2009 (Core)
Ansible Tower: 3.8.3
不要用于商业环境,律师函警告
先来个效果图:
路子很野
网上溜了半天没找到这个版本的破解方法,之前的办法都已经无效,自己琢磨了一下发现还是很好搞的。
Environment
OS: CentOS Linux release 7.9.2009 (Core)
Ansible Tower: 3.8.3
不要用于商业环境,律师函警告
先来个效果图:
步骤简述:
btw:不需要去官网申请Trial License
没什么好说的,setup.sh执行完了且不报错即可。说人话就是页面可以正常打开,没有任何报错。
该文件位于:
/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/utils/licensing.py
该文件内的方法是负责License验证的核心,将其用你熟悉的编辑器打开
找到validate方法,该方法就负责License的验证,在我这其位于该文件的409行。行数可能随着版本的升级或修改不一定准确,以方法名为主。
该方法原文如下:
def validate(self):
# Return license attributes with additional validation info.
attrs = copy.deepcopy(self._attrs)
type = attrs.get('license_type', 'none')
if (type == 'UNLICENSED' or False):
attrs.update(dict(valid_key=False, compliant=False))
return attrs
attrs['valid_key'] = True
if Host:
current_instances = Host.objects.active_count()
else:
current_instances = 0
available_instances = int(attrs.get('instance_count', None) or 0)
attrs['current_instances'] = current_instances
attrs['available_instances'] = available_instances
free_instances = (available_instances - current_instances)
attrs['free_instances'] = max(0, free_instances)
license_date = int(attrs.get('license_date', 0) or 0)
current_date = int(time.time())
time_remaining = license_date - current_date
attrs['time_remaining'] = time_remaining
if attrs.setdefault('trial', False):
attrs['grace_period_remaining'] = time_remaining
else:
attrs['grace_period_remaining'] = (license_date + 2592000) - current_date
attrs['compliant'] = bool(time_remaining > 0 and free_instances >= 0)
attrs['date_warning'] = bool(time_remaining < self.SUBSCRIPTION_TIMEOUT)
attrs['date_expired'] = bool(time_remaining <= 0)
return attrs
将其改成这个样子即可:
def validate(self):
# Return license attributes with additional validation info.
attrs = copy.deepcopy(self._attrs)
attrs['license_type'] = 'enterprise' # 设置License类型为企业版
attrs['instance_count'] = MAX_INSTANCES # 设置Host数量为MAX_INSTANCES,即9999999。扛不住就改成自己需要的数。
attrs['license_date'] = '2567433600' # 设置License过期日期为”2051-05-12 00:00:00“,Unix时间戳,有需要自己改
attrs['subscription_name'] = 'mxd' # 你猜
type = attrs.get('license_type', 'none')
# 注释掉下面的判断
#if (type == 'UNLICENSED' or False):
#attrs.update(dict(valid_key=False, compliant=False))
#return attrs
attrs['valid_key'] = True # 直接将 valid_key 设为 true
if Host:
current_instances = Host.objects.active_count()
else:
current_instances = 0
available_instances = int(attrs.get('instance_count', None) or 0)
attrs['current_instances'] = current_instances
attrs['available_instances'] = available_instances
free_instances = (available_instances - current_instances)
attrs['free_instances'] = max(0, free_instances)
license_date = int(attrs.get('license_date', 0) or 0)
current_date = int(time.time())
time_remaining = license_date - current_date
attrs['time_remaining'] = time_remaining
if attrs.setdefault('trial', False):
attrs['grace_period_remaining'] = time_remaining
else:
attrs['grace_period_remaining'] = (license_date + 2592000) - current_date
attrs['compliant'] = bool(time_remaining > 0 and free_instances >= 0)
attrs['date_warning'] = bool(time_remaining < self.SUBSCRIPTION_TIMEOUT)
attrs['date_expired'] = bool(time_remaining <= 0)
return attrs
ansible-tower-service restart
2 个评论
哈哈哈,用你的方法已经成功搞定了。不过我担心官方会很快封堵这个漏洞的,如果他们看到你的文章的话。(^_*)
被封了呀,这个不行了