def main(): module = ForemanAnsibleModule( argument_spec=dict( name=dict(required=True), description=dict(), repositories=dict(type='list', default=[]), inclusion=dict(type='bool', default=False), content_view=dict(required=True), filter_type=dict(required=True, choices=['rpm', 'package_group', 'erratum', 'docker']), organization=dict(required=True), filter_state=dict(default='present', choices=['present', 'absent']), rule_state=dict(default='present', choices=['present', 'absent']), rule_name=dict(aliases=['package_name', 'package_group', 'tag']), date_type=dict(default='updated', choices=['issued', 'updated']), end_date=dict(), errata_id=dict(), max_version=dict(), min_version=dict(), start_date=dict(), types=dict(default=["bugfix", "enhancement", "security"], type='list'), version=dict(), ), supports_check_mode=False, ) entity_dict = module.parse_params() filter_state = entity_dict.pop('filter_state') rule_state = entity_dict.pop('rule_state') module.connect() organization = find_organization(module, name=entity_dict.pop('organization')) entity_dict['content_view'] = find_content_view(module, name=entity_dict['content_view'], organization=organization) if len(entity_dict['repositories']) > 0: entity_dict['repositories'] = find_repositories(module, entity_dict['repositories'], organization) content_view_filter_entity = find_content_view_filter(module, name=entity_dict['name'], content_view=entity_dict['content_view'], failsafe=True) content_view_filter_dict = sanitize_entity_dict(entity_dict, content_filter_map) content_view_filter_changed = naildown_entity_state(AbstractContentViewFilter, content_view_filter_dict, content_view_filter_entity, filter_state, module) if entity_dict['filter_type'] == 'erratum': entity_dict['rule_name'] = None elif 'rule_name' not in entity_dict: entity_dict['rule_name'] = entity_dict['name'] # Find content_view_filter again as it may have just been created entity_dict['content_view_filter'] = find_content_view_filter(module, name=entity_dict['name'], content_view=entity_dict['content_view'], failsafe=True) if entity_dict['content_view_filter'] is not None: if 'errata_id' in entity_dict: rule_map = content_filter_rule_erratum_id_map entity_dict['errata'] = find_errata(module, id=entity_dict['errata_id'], organization=organization) content_view_filter_rule_entity = find_content_view_filter_rule(module, content_view_filter=entity_dict['content_view_filter'], errata=entity_dict['errata'], failsafe=True) else: rule_map = globals()['content_filter_rule_%s_map' % (entity_dict['filter_type'])] content_view_filter_rule_entity = find_content_view_filter_rule(module, content_view_filter=entity_dict['content_view_filter'], name=entity_dict['rule_name'], failsafe=True) if entity_dict['filter_type'] == 'package_group': entity_dict['uuid'] = find_package_group(module, name=entity_dict['rule_name']).uuid content_view_filter_rule_dict = sanitize_entity_dict(entity_dict, rule_map) check_missing = ['min_version', 'max_version', 'version', 'start_date', 'end_date', 'architecture', 'date_type'] content_view_filter_rule_changed = naildown_entity_state(ContentViewFilterRule, content_view_filter_rule_dict, content_view_filter_rule_entity, rule_state, module, check_missing) changed = content_view_filter_changed or content_view_filter_rule_changed else: changed = content_view_filter_changed module.exit_json(changed=changed)
def main(): module = AnsibleModule( argument_spec=dict( server_url=dict(required=True), username=dict(required=True, no_log=True), password=dict(required=True, no_log=True), verify_ssl=dict(type='bool', default=True), name=dict(required=True), description=dict(), repositories=dict(type='list', default=[]), inclusion=dict(type='bool', default=False), content_view=dict(required=True), filter_type=dict( required=True, choices=['rpm', 'package_group', 'erratum', 'docker']), organization=dict(required=True), filter_state=dict(default='present', choices=['present', 'absent']), rule_state=dict(default='present', choices=['present', 'absent']), rule_name=dict(aliases=['package_name', 'package_group', 'tag']), date_type=dict(default='updated', choices=['issued', 'updated']), end_date=dict(), errata_id=dict(), max_version=dict(), min_version=dict(), start_date=dict(), types=dict(default=["bugfix", "enhancement", "security"], type='list'), version=dict(), ), supports_check_mode=False, ) if has_import_error: module.fail_json(msg=import_error_msg) entity_dict = dict([(k, v) for (k, v) in module.params.items() if v is not None]) server_url = entity_dict.pop('server_url') username = entity_dict.pop('username') password = entity_dict.pop('password') verify_ssl = entity_dict.pop('verify_ssl') filter_state = entity_dict.pop('filter_state') rule_state = entity_dict.pop('rule_state') try: create_server(server_url, (username, password), verify_ssl) except Exception as e: module.fail_json(msg="Failed to connect to Foreman server: %s " % e) ping_server(module) organization = find_organization(module, name=entity_dict.pop('organization')) entity_dict['content_view'] = find_content_view( module, name=entity_dict['content_view'], organization=organization) if len(entity_dict['repositories']) > 0: entity_dict['repositories'] = find_repositories( module, entity_dict['repositories'], organization) content_view_filter_entity = find_content_view_filter( module, name=entity_dict['name'], content_view=entity_dict['content_view'], failsafe=True) content_view_filter_dict = sanitize_entity_dict(entity_dict, content_filter_map) content_view_filter_changed = naildown_entity_state( AbstractContentViewFilter, content_view_filter_dict, content_view_filter_entity, filter_state, module) if entity_dict['filter_type'] == 'erratum': entity_dict['rule_name'] = None elif 'rule_name' not in entity_dict: entity_dict['rule_name'] = entity_dict['name'] # Find content_view_filter again as it may have just been created entity_dict['content_view_filter'] = find_content_view_filter( module, name=entity_dict['name'], content_view=entity_dict['content_view'], failsafe=True) if entity_dict['content_view_filter'] is not None: if 'errata_id' in entity_dict: rule_map = content_filter_rule_erratum_id_map entity_dict['errata'] = find_errata(module, id=entity_dict['errata_id'], organization=organization) content_view_filter_rule_entity = find_content_view_filter_rule( module, content_view_filter=entity_dict['content_view_filter'], errata=entity_dict['errata'], failsafe=True) else: rule_map = globals()['content_filter_rule_%s_map' % (entity_dict['filter_type'])] content_view_filter_rule_entity = find_content_view_filter_rule( module, content_view_filter=entity_dict['content_view_filter'], name=entity_dict['rule_name'], failsafe=True) if entity_dict['filter_type'] == 'package_group': entity_dict['uuid'] = find_package_group( module, name=entity_dict['rule_name']).uuid content_view_filter_rule_dict = sanitize_entity_dict( entity_dict, rule_map) check_missing = [ 'min_version', 'max_version', 'version', 'start_date', 'end_date', 'architecture', 'date_type' ] content_view_filter_rule_changed = naildown_entity_state( ContentViewFilterRule, content_view_filter_rule_dict, content_view_filter_rule_entity, rule_state, module, check_missing) changed = content_view_filter_changed or content_view_filter_rule_changed else: changed = content_view_filter_changed module.exit_json(changed=changed)