foreman_helper
module¶
- class foreman_helper.ForemanAnsibleModule(**kwargs)¶
Baseclass for all foreman related Ansible modules. It handles connection parameters and adds the concept of the foreman_spec. This adds automatic entities resolution based on provided attributes/ sub entities options.
It adds the following options to foreman_spec ‘entity’ and ‘entity_list’ types:
search_by (str): Field used to search the sub entity. Defaults to ‘name’ unless parent was set, in which case it defaults to title.
search_operator (str): Operator used to search the sub entity. Defaults to ‘=’. For fuzzy search use ‘~’.
resource_type (str): Resource type used to build API resource PATH. Defaults to pluralized entity key.
resolve (boolean): Defaults to ‘True’. If set to false, the sub entity will not be resolved automatically
ensure (boolean): Defaults to ‘True’. If set to false, it will be removed before sending data to the foreman server.
- _copy_entity(resource, desired_entity, current_entity, params)¶
Copy a given entity
- Parameters
- Returns
The new current state of the entity
- Return type
- _create_entity(resource, desired_entity, params, foreman_spec)¶
Create entity with given properties
- Parameters
- Returns
The new current state of the entity
- Return type
- _delete_entity(resource, current_entity, params)¶
Delete a given entity
- _patch_content_uploads_update_api()¶
This is a workaround for the broken content_uploads update apidoc in Katello. See https://projects.theforeman.org/issues/27590
- _patch_cv_filter_rule_api()¶
This is a workaround for missing params of CV Filter Rule update controller in Katello. See https://projects.theforeman.org/issues/30908
- _patch_location_api()¶
This is a workaround for the broken taxonomies apidoc in foreman. see https://projects.theforeman.org/issues/10359
- _patch_organization_update_api()¶
This is a workaround for the broken organization update apidoc in Katello. See https://projects.theforeman.org/issues/27538
- _patch_subnet_externalipam_group_api()¶
This is a workaround for the broken subnet apidoc for External IPAM. See https://projects.theforeman.org/issues/30890
- _patch_subnet_rex_api()¶
This is a workaround for the broken subnet apidoc in foreman remote execution. See https://projects.theforeman.org/issues/19086 and https://projects.theforeman.org/issues/30651
- _patch_subscription_index_api()¶
This is a workaround for the broken subscriptions apidoc in Katello. See https://projects.theforeman.org/issues/27575
- _patch_sync_plan_api()¶
This is a workaround for the broken sync_plan apidoc in Katello. See https://projects.theforeman.org/issues/27532
- _patch_templates_resource_name()¶
Need to support both singular and plural form. Not checking for the templates plugin here, as the check relies on the new name. The resource was made plural per https://projects.theforeman.org/issues/28750
- _revert_entity(resource, current_entity, params)¶
Revert a given entity
- _update_entity(resource, desired_entity, current_entity, params, foreman_spec)¶
Update a given entity with given properties if any diverge
- Parameters
resource (str) – Plural name of the api resource to manipulate
desired_entity (dict) – Desired properties of the entity
current_entity (dict) – Current properties of the entity
params (dict, optional) – Lookup parameters (i.e. parent_id for nested entities)
foreman_spec (dict) – Description of the entity structure
- Returns
The new current state of the entity
- Return type
- _validate_supported_payload(resource, action, payload)¶
Check whether the payload only contains supported keys. Emits a warning for keys that are not part of the apidoc.
- api_connection()¶
Execute a given code block after connecting to the API.
When the block has finished, call
exit_json()
to report that the module has finished to Ansible.
- apply_apidoc_patches()¶
Apply patches to the local apidoc representation. When adding another patch, consider that the endpoint in question may depend on a plugin to be available. If possible, make the patch only execute on specific server/plugin versions.
- connect()¶
Connect to the Foreman API.
This will create a new
apypie.Api
instance using the provided server information, check that the API is actually reachable (by callingstatus()
), apply any required patches to the apidoc and ensure the server has all the plugins installed that are required by the module.
- ensure_entity(resource, desired_entity, current_entity, params=None, state=None, foreman_spec=None)¶
Ensure that a given entity has a certain state
- Parameters
resource (str) – Plural name of the api resource to manipulate
desired_entity (dict) – Desired properties of the entity
current_entity (Union[dict,None]) – Current properties of the entity or None if nonexistent
params (dict, optional) – Lookup parameters (i.e. parent_id for nested entities)
state (str, optional) – Desired state of the entity (optionally taken from the module)
foreman_spec (dict, optional) – Description of the entity structure (optionally taken from module)
- Returns
The new current state of the entity
- Return type
- exit_json(changed=False, **kwargs)¶
return from the module, without error
- list_resource(resource, search=None, params=None)¶
Execute the
index
action on an resource.
- show_resource(resource, resource_id, params=None)¶
Execute the
show
action on an entity.
- class foreman_helper.ForemanEntityAnsibleModule(**kwargs)¶
Base class for Foreman entities. To use it, subclass it with the following convention: To manage my_entity entity, create the following sub class:
class ForemanMyEntityModule(ForemanEntityAnsibleModule): pass
and use that class to instantiate module:
module = ForemanMyEntityModule( argument_spec=dict( [...] ), foreman_spec=dict( [...] ), )
This adds a state parameter to the module and provides the run method for the most common usecases.
- remove_sensitive_fields(entity)¶
Set fields with ‘no_log’ option to None
- run(**kwargs)¶
lookup entities, ensure entity, remove sensitive data, manage parameters.
- class foreman_helper.ForemanInfoAnsibleModule(**kwargs)¶
Base class for Foreman info modules that fetch information about entities
- exit_json(**kwargs)¶
return from the module, without error
- run(**kwargs)¶
lookup entities
- class foreman_helper.ForemanScapDataStreamModule(**kwargs)¶
- run(**kwargs)¶
lookup entities, ensure entity, remove sensitive data, manage parameters.
- class foreman_helper.ForemanStatelessEntityAnsibleModule(**kwargs)¶
Base class for Foreman entities without a state. To use it, subclass it with the following convention: To manage my_entity entity, create the following sub class:
class ForemanMyEntityModule(ForemanStatelessEntityAnsibleModule): pass
and use that class to instantiate module:
module = ForemanMyEntityModule( argument_spec=dict( [...] ), foreman_spec=dict( [...] ), )
It adds the following attributes:
entity_key (str): field used to search current entity. Defaults to value provided by ENTITY_KEYS or ‘name’ if no value found.
entity_name (str): name of the current entity. By default deduce the entity name from the class name (eg: ‘ForemanProvisioningTemplateModule’ class will produce ‘provisioning_template’).
entity_opts (dict): Dict of options for base entity. Same options can be provided for subentities described in foreman_spec.
The main entity is referenced with the key entity in the foreman_spec.
- property entity_name_from_class¶
The entity name derived from the class name.
The class name must follow the following name convention:
It starts with
Foreman
orKatello
.It ends with
Module
.
This will convert the class name
ForemanMyEntityModule
to the entity namemy_entity
.Examples:
ForemanArchitectureModule
=>architecture
ForemanProvisioningTemplateModule
=>provisioning_template
KatelloProductMudule
=>product
- class foreman_helper.ForemanTaxonomicAnsibleModule(**kwargs)¶
Combine
ForemanAnsibleModule
with theTaxonomyMixin
Mixin.
- class foreman_helper.ForemanTaxonomicEntityAnsibleModule(**kwargs)¶
Combine
ForemanEntityAnsibleModule
with theTaxonomyMixin
Mixin.
- class foreman_helper.HostMixin(**kwargs)¶
Host Mixin to extend a
ForemanAnsibleModule
(or any subclass) to work with host-related entities (Hosts, Hostgroups).This adds many optional parameters that are specific to Hosts and Hostgroups to the module. It also includes
ParametersMixin
.
- class foreman_helper.KatelloAnsibleModule(**kwargs)¶
Combine
ForemanAnsibleModule
with theKatelloMixin
Mixin.
- class foreman_helper.KatelloEntityAnsibleModule(**kwargs)¶
Combine
ForemanEntityAnsibleModule
with theKatelloScopedMixin
Mixin.
- class foreman_helper.KatelloInfoAnsibleModule(**kwargs)¶
Combine
ForemanInfoAnsibleModule
with theKatelloScopedMixin
Mixin.
- class foreman_helper.KatelloMixin(**kwargs)¶
Katello Mixin to extend a
ForemanAnsibleModule
(or any subclass) to work with Katello entities.This includes:
add a required
organization
parameter to the moduleadd Katello to the list of required plugins
- class foreman_helper.KatelloScopedMixin(**kwargs)¶
Enhances
KatelloMixin
with scoping byorganization
as required by Katello.
- class foreman_helper.NestedParametersMixin(**kwargs)¶
Nested Parameters Mixin to extend a
ForemanAnsibleModule
(or any subclass) to work with entities that support parameters, but require them to be managed in separate API requests.This adds optional
parameters
parameter to the module. It also enhances therun()
method to properly handle the provided parameters.
- class foreman_helper.ParametersMixin(**kwargs)¶
Parameters Mixin to extend a
ForemanAnsibleModule
(or any subclass) to work with entities that support parameters.This allows to submit parameters to Foreman in the same request as modifying the main entity, thus making the parameters available to any action that might be triggered when the entity is saved.
By default, parametes are submited to the API using the
<entity_name>_parameters_attributes
key. If you need to override this, set thePARAMETERS_FLAT_NAME
attribute to the key that shall be used instead.This adds optional
parameters
parameter to the module. It also enhances therun()
method to properly handle the provided parameters.
- class foreman_helper.ParametersMixinBase¶
Base Class for the Parameters Mixins.
Provides a function to verify no duplicate parameters are set.
- class foreman_helper.TaxonomyMixin(**kwargs)¶
Taxonomy Mixin to extend a
ForemanAnsibleModule
(or any subclass) to work with taxonomic entities.This adds optional
organizations
andlocations
parameters to the module.
- foreman_helper._check_patch_needed(introduced_version=None, fixed_version=None, plugins=None)¶
Decorator to check whether a specific apidoc patch is required.
- foreman_helper._exception2fail_json(msg='Generic failure: {0}')¶
Decorator to convert Python exceptions into Ansible errors that can be reported to the user.
- foreman_helper._flatten_entity(entity, foreman_spec)¶
Flatten entity according to spec
- foreman_helper._foreman_spec_helper(spec)¶
Extend an entity spec by adding entries for all flat_names. Extract Ansible compatible argument_spec on the way.
- foreman_helper._recursive_dict_keys(a_dict)¶
Find all keys of a nested dictionary
- foreman_helper._recursive_dict_without_none(a_dict, exclude=None)¶
Remove all entries with None value from a dict, recursively. Also drops all entries with keys in exclude in the top level.
- foreman_helper.parameter_value_to_str(value, parameter_type)¶
Helper to convert the value of parameters to string according to their parameter_type.
- foreman_helper.split_fqn(title)¶
Split fully qualified name (title) in name and parent title