以下教程仅供学习参考,不承担任何法律责任

一、破解

文件位置

/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/utils/licensing.py

修改源代码

  • 原代码

    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
    28
    29
    30
    31
    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
  • 修改代码

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    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

二、重启服务

1
ansible-tower-service restart