def main():

    module = ForemanAnsibleModule(
        argument_spec=dict(
            resource=dict(type='str', required=True),
            search=dict(default=""),
            full_details=dict(type='bool', aliases=['info'], default='false'),
            params=dict(type='dict'),
            organization=dict(),
        ),
    )

    module_params = module.clean_params()
    resource = module_params['resource']
    search = module_params['search']
    params = module_params.get('params', {})

    module.connect()

    if 'organization' in module_params:
        params['organization_id'] = module.find_resource_by_name('organizations', module_params['organization'], thin=True)['id']

    response = module.list_resource(resource, search, params)

    if module_params['full_details']:
        resources = []
        for found_resource in response:
            resources.append(module.show_resource(resource, found_resource['id']))
    else:
        resources = response

    module.exit_json(changed=False, resources=resources)
Beispiel #2
0
def main():

    module = ForemanAnsibleModule(
        argument_spec=dict(
            resource=dict(type='str', required=True),
            search=dict(default=""),
            full_details=dict(type='bool', aliases=['info'], default='false'),
        ),
    )

    module_params = module.clean_params()
    resource = module_params['resource']
    search = module_params['search']

    module.connect()

    response = module.list_resource(resource, search)

    if module_params['full_details']:
        resources = []
        for found_resource in response:
            resources.append(module.show_resource(resource, found_resource['id']))
    else:
        resources = response

    module.exit_json(changed=False, resources=resources)
Beispiel #3
0
def main():
    module = ForemanAnsibleModule(
        argument_spec=dict(
            src=dict(required=True, type='path', aliases=['file']),
            repository=dict(required=True),
            product=dict(required=True),
            organization=dict(required=True),
        ),
        supports_check_mode=True,
    )

    entity_dict = module.parse_params()

    module.connect()

    entity_dict['organization'] = find_organization(
        module, name=entity_dict['organization'])
    entity_dict['product'] = find_product(
        module,
        name=entity_dict['product'],
        organization=entity_dict['organization'])
    entity_dict['repository'] = find_repository(module,
                                                name=entity_dict['repository'],
                                                product=entity_dict['product'])

    content_unit = None
    if entity_dict['repository'].content_type == "yum":
        name, version, release, arch = check_output(
            "rpm --queryformat '%%{NAME} %%{VERSION} %%{RELEASE} %%{ARCH}' -qp %s"
            % entity_dict['src'],
            shell=True).decode('ascii').split()
        query = "name = \"{}\" and version = \"{}\" and release = \"{}\" and arch = \"{}\"".format(
            name, version, release, arch)
        content_unit = find_package(module,
                                    query,
                                    repository=entity_dict['repository'],
                                    failsafe=True)
    elif entity_dict['repository'].content_type == "file":
        h = hashlib.sha256()
        with open(entity_dict['src'], "rb") as f:
            for chunk in iter(lambda: f.read(4096), b""):
                h.update(chunk)
        checksum = h.hexdigest()
        name = os.path.basename(entity_dict['src'])
        query = "name = \"{}\" and checksum = \"{}\"".format(name, checksum)
        content_unit = find_file(module,
                                 query,
                                 repository=entity_dict['repository'],
                                 failsafe=True)

    changed = False
    if not content_unit:
        try:
            changed = upload(module, entity_dict['src'],
                             entity_dict['repository'])
        except Exception as e:
            module.fail_json(msg=to_native(e))

    module.exit_json(changed=changed)
Beispiel #4
0
def main():

    module = ForemanAnsibleModule(
        argument_spec=dict(
            resource=dict(choices=nailgun_entites(), required=True),
            search=dict(default=""),
        ),
        supports_check_mode=True,
    )

    (server_params, module_params) = module.parse_params()
    entity = module_params['resource']
    search = module_params['search']

    try:
        (server_url, username, password, verify_ssl) = server_params
        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)

    entity_class = getattr(entities, entity)
    response = search_entities_json(entity_class, search)['results']

    module.exit_json(changed=False, resources=response)
def main():
    module = ForemanAnsibleModule(
        argument_spec=dict(
            name=dict(required=True),
            value=dict(),
        ),
        supports_check_mode=True,
    )

    (server_params, entity_dict) = module.parse_params()

    try:
        (server_url, username, password, verify_ssl) = server_params
        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)

    entity = find_setting(
        module,
        name=entity_dict['name'],
        failsafe=False,
    )

    if 'value' not in entity_dict:
        entity_dict['value'] = entity.default or ""

    entity_dict = sanitize_entity_dict(entity_dict, name_map)

    changed, entity = naildown_entity(Setting, entity_dict, entity, 'present', module, check_type=True)

    module.exit_json(changed=changed, foreman_setting=entity.to_json_dict())
Beispiel #6
0
def main():
    module = ForemanAnsibleModule(
        argument_spec=dict(
            name=dict(required=True),
            value=dict(),
        ),
        supports_check_mode=True,
    )

    entity_dict = module.parse_params()

    module.connect()

    entity = find_setting(
        module,
        name=entity_dict['name'],
        failsafe=False,
    )

    if 'value' not in entity_dict:
        entity_dict['value'] = entity.default or ""

    entity_dict = sanitize_entity_dict(entity_dict, name_map)

    changed, entity = naildown_entity(Setting,
                                      entity_dict,
                                      entity,
                                      'present',
                                      module,
                                      check_type=True)

    module.exit_json(changed=changed, foreman_setting=entity.to_json_dict())
Beispiel #7
0
def main():
    module = ForemanAnsibleModule(
        argument_spec=dict(
            name=dict(required=True),
            organization=dict(required=True),
            interval=dict(required=True),
            enabled=dict(required=True),
            sync_date=dict(required=True),
            products=dict(type='list', default=[]),
        ),
        supports_check_mode=True
    )

    module_params = module.parse_params()
    server_params = module.get_server_params()

    name = module_params['name']
    organization = module_params['organization']
    interval = module_params['interval']
    enabled = module_params['enabled']
    sync_date = datetime.strptime(module_params['sync_date'], '%Y-%m-%d %H:%M:%S').replace(tzinfo=pytz.UTC)
    products = module_params['products']

    (server_url, username, password, verify_ssl) = server_params
    server = ServerConfig(
        url=server_url,
        auth=(username, password),
        verify=verify_ssl
    )
    ng = NailGun(server, entities, module)

    # Lets make an connection to the server with username and password
    try:
        org = entities.Organization(server)
        org.search()
    except Exception as e:
        module.fail_json(msg="Failed to connect to Foreman server: %s " % e)

    try:
        changed = ng.sync_plan(name, organization, interval=interval, enabled=enabled, sync_date=sync_date, products=products)
        module.exit_json(changed=changed)
    except Exception as e:
        module.fail_json(msg=e)
Beispiel #8
0
def main():

    module = ForemanAnsibleModule(foreman_spec=dict(
        resource=dict(type='str', required=True),
        search=dict(default=""),
        full_details=dict(type='bool', aliases=['info'], default='false'),
        params=dict(type='dict'),
        organization=dict(),
    ), )

    module_params = module.foreman_params
    resource = module_params['resource']
    search = module_params['search']
    params = module_params.get('params', {})

    with module.api_connection():
        if resource not in module.foremanapi.resources:
            msg = "Resource '{0}' does not exist in the API. Existing resources: {1}".format(
                resource, ', '.join(sorted(module.foremanapi.resources)))
            module.fail_json(msg=msg)
        if 'organization' in module_params:
            params['organization_id'] = module.find_resource_by_name(
                'organizations', module_params['organization'],
                thin=True)['id']

        response = module.list_resource(resource, search, params)

        if module_params['full_details']:
            resources = []
            for found_resource in response:
                resources.append(
                    module.show_resource(resource, found_resource['id'],
                                         params))
        else:
            resources = response

        module.exit_json(resources=resources)
def main():
    module = ForemanAnsibleModule(argument_spec=dict(
        name=dict(required=True),
        value=dict(type='raw'),
    ), )

    entity_dict = module.clean_params()

    module.connect()

    entity = module.find_resource_by_name('settings',
                                          entity_dict['name'],
                                          failsafe=False)

    if 'value' not in entity_dict:
        entity_dict['value'] = entity['default'] or ''

    settings_type = entity['settings_type']
    new_value = entity_dict['value']
    # Allow to pass integers as string
    if settings_type == 'integer':
        new_value = int(new_value)
    entity_dict['value'] = parameter_value_to_str(new_value, settings_type)
    old_value = entity['value']
    entity['value'] = parameter_value_to_str(old_value, settings_type)

    changed, entity = module.ensure_entity('settings',
                                           entity_dict,
                                           entity,
                                           state='present',
                                           entity_spec=entity_spec)

    if entity:
        # Fake the not serialized input value as output
        entity['value'] = new_value

    module.exit_json(changed=changed, foreman_setting=entity)
Beispiel #10
0
def main():

    module = ForemanAnsibleModule(
        argument_spec=dict(
            resource=dict(choices=nailgun_entites(), required=True),
            search=dict(default=""),
        ),
        supports_check_mode=True,
    )

    module_params = module.parse_params()
    entity = module_params['resource']
    search = module_params['search']

    module.connect()

    entity_class = getattr(entities, entity)
    response = search_entities_json(entity_class, search)['results']

    module.exit_json(changed=False, resources=response)
def main():
    module = ForemanAnsibleModule(argument_spec=dict(
        organization=dict(required=True),
        product=dict(required=True),
        repository=dict(),
        synchronous=dict(type='bool', default=True),
    ), )

    params = module.parse_params()

    module.connect()

    try:
        organization = find_organization(module, params['organization'])
        product = find_product(module, params['product'], organization)
        if 'repository' in params:
            repository = find_repository(module, params['repository'], product)
        else:
            repository = None
    except Exception as e:
        module.fail_json(msg='Failed to find entity: %s ' % e)

    try:
        if repository is None:
            changed = product.sync(params['synchronous'])
        else:
            changed = repository.sync(params['synchronous'])
        module.exit_json(changed=changed)
    except Exception as e:
        module.fail_json(msg=e)
Beispiel #12
0
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)