mirror of
https://github.com/ZwareBear/awx.git
synced 2026-04-09 01:21:49 -05:00
* Dynamic Inventory Source Template against ansible 2.3 dynamic inventory sources. The major change is removal of `rax.py`. Most upstream scripts except `foreman.py` has quite trivial coding style changes, or minor functional extensions that does not affect Tower inventory update runs. `foreman.py`, on the other hand, went through quite a major refactoring, but functionalities stay the same. Major python dependency updates include apache-libcloud (1.3.0 --> 2.0.0), boto (2.45.0 --> 2.46.1) and shade (1.19.0 --> 1.20.0). Minor python dependency updates include indirect updates via `pip-compile`, which are determined by base dependencies. Some minor `task.py` extensions: - `.ini` file for ec2 has one more field `stack_filter=False`, which reveals changes in `ec2.py`. - `.ini` file for cloudforms will catch these four options from `source_vars_dict` of inventory update: `'version', 'purge_actions', 'clean_group_keys', 'nest_tags'`. These four options have always been available in `cloudforms.py` but `cloudforms.ini.example` has not mentioned them until the latest version. For consistency with upstream docs, we should make these fields available for tower user to customize. - YAML file of openstack will catch ansible options `use_hostnames`, `expand_hostvars` and `fail_on_errors` from `source_vars_dict` of inventory update as a response to issue #6075. * Remove Rackspace support Supports of Rackspace as both a dynamic inventory source and a cloud credential are fully removed. Data migrations have been added to support arbitrary credential types feature and delete rackspace inventory sources. Note also requirement `jsonschema` has been moved from `requirements.txt` to `requirements.in` as a primary dependency to reflect it's usage in `/main/fields.py`. Connected issue: #6080. * `pexpect` major update `pexpect` stands at the very core of our task system and underwent a major update from 3.1 to 4.2.1. Although verified during devel, please still be mindful of any suspicious issues on celery side even after this PR gets merged. * Miscellaneous - requests now explicitly declared in `requirements.in` at version 2.11.1 in response to upstream issue - celery: 3.1.17 -> 3.1.25 - django-extensions: 1.7.4 -> 1.7.8 - django-polymorphic: 0.7.2 -> 1.2 - django-split-settings: 0.2.2 -> 0.2.5 - django-taggit: 0.21.3 -> 0.22.1 - irc: 15.0.4 -> 15.1.1 - pygerduty: 0.35.1 -> 0.35.2 - pyOpenSSL: 16.2.0 -> 17.0.0 - python-saml: 2.2.0 -> 2.2.1 - redbaron: 0.6.2 -> 0.6.3 - slackclient: 1.0.2 -> 1.0.5 - tacacs_plus: 0.1 -> 0.2 - xmltodict: 0.10.2 -> 0.11.0 - pip: 8.1.2 -> 9.0.1 - setuptools: 23.0.0 -> 35.0.2 - (requirements_ansible.in only)kombu: 3.0.35 -> 3.0.37
54 lines
2.5 KiB
Python
54 lines
2.5 KiB
Python
import logging
|
|
|
|
from django.db.models import Q
|
|
|
|
logger = logging.getLogger('awx.main.migrations')
|
|
|
|
|
|
def remove_manual_inventory_sources(apps, schema_editor):
|
|
'''Previously we would automatically create inventory sources after
|
|
Group creation and we would use the parent Group as our interface for the user.
|
|
During that process we would create InventorySource that had a source of "manual".
|
|
'''
|
|
# TODO: use this in the 3.3 data migrations
|
|
InventorySource = apps.get_model('main', 'InventorySource')
|
|
# see models/inventory.py SOURCE_CHOICES - ('', _('Manual'))
|
|
logger.debug("Removing all Manual InventorySource from database.")
|
|
InventorySource.objects.filter(source='').delete()
|
|
|
|
|
|
def remove_rax_inventory_sources(apps, schema_editor):
|
|
'''Rackspace inventory sources are not supported since 3.2, remove them.
|
|
'''
|
|
InventorySource = apps.get_model('main', 'InventorySource')
|
|
logger.debug("Removing all Rackspace InventorySource from database.")
|
|
InventorySource.objects.filter(source='rax').delete()
|
|
|
|
|
|
def rename_inventory_sources(apps, schema_editor):
|
|
'''Rename existing InventorySource entries using the following format.
|
|
{{ inventory_source.name }} - {{ inventory.module }} - {{ number }}
|
|
The number will be incremented for each InventorySource for the organization.
|
|
'''
|
|
Organization = apps.get_model('main', 'Organization')
|
|
InventorySource = apps.get_model('main', 'InventorySource')
|
|
|
|
for org in Organization.objects.iterator():
|
|
for i, invsrc in enumerate(InventorySource.objects.filter(Q(inventory__organization=org) |
|
|
Q(deprecated_group__inventory__organization=org)).distinct().all()):
|
|
|
|
inventory = invsrc.deprecated_group.inventory if invsrc.deprecated_group else invsrc.inventory
|
|
name = '{0} - {1} - {2}'.format(invsrc.name, inventory.name, i)
|
|
logger.debug("Renaming InventorySource({0}) {1} -> {2}".format(invsrc.pk, invsrc.name, name))
|
|
invsrc.name = name
|
|
invsrc.save()
|
|
|
|
|
|
def remove_inventory_source_with_no_inventory_link(apps, schema_editor):
|
|
'''If we cannot determine the Inventory for which an InventorySource exists
|
|
we can safely remove it.
|
|
'''
|
|
InventorySource = apps.get_model('main', 'InventorySource')
|
|
logger.debug("Removing all InventorySource that have no link to an Inventory from database.")
|
|
InventorySource.objects.filter(Q(inventory__organization=None) & Q(deprecated_group__inventory=None)).delete()
|