diff options
Diffstat (limited to 'awx_collection/plugins')
-rw-r--r-- | awx_collection/plugins/modules/bulk_host_create.py | 39 | ||||
-rw-r--r-- | awx_collection/plugins/modules/bulk_job_launch.py | 164 |
2 files changed, 168 insertions, 35 deletions
diff --git a/awx_collection/plugins/modules/bulk_host_create.py b/awx_collection/plugins/modules/bulk_host_create.py index f87045b487..3e6ea91cc5 100644 --- a/awx_collection/plugins/modules/bulk_host_create.py +++ b/awx_collection/plugins/modules/bulk_host_create.py @@ -16,22 +16,43 @@ author: "Seth Foster (@fosterseth)" short_description: Bulk host create in Automation Platform Controller description: - Single-request bulk host creation in Automation Platform Controller. - - Designed to efficiently add many hosts to an inventory. + - Provides a way to add many hosts at once to an inventory in Controller. options: hosts: description: - List of hosts to add to inventory. required: True - type: str + type: list + elements: dict + suboptions: + name: + description: + - The name to use for the host. + type: str + require: True + description: + - The description to use for the host. + type: str + enabled: + description: + - If the host should be enabled. + type: bool + variables: + description: + - Variables to use for the host. + type: dict + instance_id: + description: + - instance_id to use for the host. + type: str inventory: description: - - Inventory the hosts should be made a member of. + - Inventory ID the hosts should be made a member of. required: True - type: str + type: int extends_documentation_fragment: awx.awx.auth ''' - EXAMPLES = ''' - name: Bulk host create bulk_host_create: @@ -44,11 +65,12 @@ EXAMPLES = ''' from ..module_utils.controller_api import ControllerAPIModule import json + def main(): # Any additional arguments that are not fields of the item can be added here argument_spec = dict( hosts=dict(required=True, type='list'), - inventory=dict(), + inventory=dict(required=True, type='int'), ) # Create a module for ourselves @@ -58,6 +80,9 @@ def main(): inventory = module.params.get('inventory') hosts = module.params.get('hosts') + for h in hosts: + if 'variables' in h: + h['variables'] = json.dumps(h['variables']) # Launch the jobs result = module.post_endpoint("bulk/host_create", data={"inventory": inventory, "hosts": hosts}) @@ -70,4 +95,4 @@ def main(): if __name__ == '__main__': - main()
\ No newline at end of file + main() diff --git a/awx_collection/plugins/modules/bulk_job_launch.py b/awx_collection/plugins/modules/bulk_job_launch.py index e6e8c7b103..7a6e800823 100644 --- a/awx_collection/plugins/modules/bulk_job_launch.py +++ b/awx_collection/plugins/modules/bulk_job_launch.py @@ -16,44 +16,134 @@ author: "Seth Foster (@fosterseth)" short_description: Bulk job launch in Automation Platform Controller description: - Single-request bulk job launch in Automation Platform Controller. - - The result is flat workflow, each job specified in the parameter jobs results in a workflow job node. + - Creates a workflow where each node corresponds to an item specified in the jobs option. - Any options specified at the top level will inherited by the launched jobs (if prompt on launch is enabled for those fields). - - Designed to efficiently start many jobs at once. + - Provides a way to submit many jobs at once to Controller. options: jobs: description: - List of jobs to create. - - Any promptable field on unified_job_template can be provided as a field on the list item (e.g. limit). required: True type: list + elements: dict + suboptions: + unified_job_template: + description: + - Job template ID to use when launching. + type: int + required: True + inventory: + description: + - Inventory ID applied as a prompt, if job template prompts for inventory + type: int + execution_environment: + description: + - Execution environment ID applied as a prompt, if job template prompts for execution environments + type: int + instance_groups: + description: + - Instance group IDs applied as a prompt, if job template prompts for instance groups + type: list + elements: int + credentials: + description: + - Credential IDs applied as a prompt, if job template prompts for credentials + type: list + elements: int + labels: + description: + - Label IDs to use for the job, if job template prompts for labels + type: list + elements: int + extra_data: + description: + - Extra variables to apply at launch time, if job template prompts for extra variables + type: dict + default: {} + diff_mode: + description: + - Show the changes made by Ansible tasks where supported + type: bool + verbosity: + description: + - Verbosity level for this ad hoc command run + type: int + choices: [ 0, 1, 2, 3, 4, 5 ] + scm_branch: + description: + - SCM branch applied as a prompt, if job template prompts for SCM branch + - This is only applicable if the project allows for branch override + type: str + job_type: + description: + - Job type applied as a prompt, if job template prompts for job type + type: str + choices: + - 'run' + - 'check' + job_tags: + description: + - Job tags applied as a prompt, if job template prompts for job tags + type: str + skip_tags: + description: + - Tags to skip, applied as a prompt, if job template prompts for job tags + type: str + limit: + description: + - Limit to act on, applied as a prompt, if job template prompts for limit + type: str + forks: + description: + - The number of parallel or simultaneous processes to use while executing the playbook, if job template prompts for forks + type: int + job_slice_count: + description: + - The number of jobs to slice into at runtime, if job template prompts for job slices. + - Will cause the Job Template to launch a workflow if value is greater than 1. + type: int + default: '1' + identifier: + description: + - Identifier for the resulting workflow node that represents this job + type: str + timeout: + description: + - Maximum time in seconds to wait for a job to finish (server-side), if job template prompts for timeout. + type: int name: description: - The name of the bulk job that is created required: False type: str + description: + description: + - Optional description of this bulk job. + type: str organization: description: - If not provided, will use the organization the user is in. - Required if the user belongs to more than one organization. - Affects who can see the resulting bulk job. - type: str + type: int inventory: description: - - Inventory to use for the jobs ran within the bulk job, only used if prompt for inventory is set. - type: str - limit: - description: - - Limit to use for the I(job_template). - type: str + - Inventory ID to use for the jobs ran within the bulk job, only used if prompt for inventory is set. + type: int scm_branch: description: - A specific branch of the SCM project to run the template on. - - This is only applicable if your project allows for branch override. + - This is only applicable if the project allows for branch override. type: str extra_vars: description: - Any extra vars required to launch the job. + - Extends the extra_data field at the individual job level. type: dict + limit: + description: + - Limit to use for the bulk job. + type: str job_tags: description: - A comma-separated list of playbook tags to specify what parts of the playbooks should be executed. @@ -64,7 +154,7 @@ options: type: str wait: description: - - Wait for the workflow to complete. + - Wait for the bulk job to complete. default: True type: bool interval: @@ -73,32 +163,33 @@ options: required: False default: 2 type: float - timeout: - description: - - If waiting for the workflow to complete this will abort after this - amount of seconds - type: int extends_documentation_fragment: awx.awx.auth ''' RETURN = ''' job_info: - description: dictionary containing information about the workflow executed - returned: If workflow launched + description: dictionary containing information about the bulk job executed + returned: If bulk job launched type: dict ''' - EXAMPLES = ''' - name: Launch bulk jobs bulk_job_launch: name: My Bulk Job Launch jobs: - unified_job_template: 7 + skip_tags: foo - unified_job_template: 10 limit: foo + extra_data: + food: carrot + color: orange limit: bar - inventory: 1 # only affects job templates with prompt on launch enabled for inventory + extra_vars: # these override / extend extra_data at the job level + food: grape + animal: owl + inventory: 1 - name: Launch bulk jobs with lookup plugin bulk_job_launch: @@ -111,13 +202,14 @@ EXAMPLES = ''' from ..module_utils.controller_api import ControllerAPIModule import json + def main(): # Any additional arguments that are not fields of the item can be added here argument_spec = dict( jobs=dict(required=True, type='list'), name=dict(), - organization=dict(), - inventory=dict(), + organization=dict(type='int'), + inventory=dict(type='int'), limit=dict(), scm_branch=dict(), extra_vars=dict(type='dict'), @@ -131,15 +223,31 @@ def main(): # Create a module for ourselves module = ControllerAPIModule(argument_spec=argument_spec) + post_data_names = ( + 'jobs', + 'name', + 'organization', + 'inventory', + 'limit', + 'scm_branch', + 'extra_vars', + 'job_tags', + 'skip_tags', + ) + post_data = {} + for p in post_data_names: + val = module.params.get(p) + if val: + post_data[p] = val + # Extract our parameters - name = module.params.get('name') wait = module.params.get('wait') timeout = module.params.get('timeout') interval = module.params.get('interval') - jobs = module.params.get('jobs') + name = module.params.get('name') # Launch the jobs - result = module.post_endpoint("bulk/job_launch", data={"jobs": jobs}) + result = module.post_endpoint("bulk/job_launch", data=post_data) if result['status_code'] != 201: module.fail_json(msg="Failed to launch bulk jobs, see response for details", response=result) @@ -148,7 +256,7 @@ def main(): module.json_output['id'] = result['json']['id'] module.json_output['status'] = result['json']['status'] # This is for backwards compatability - module.json_output['job_info'] = {'id': result['json']['id']} + module.json_output['job_info'] = result['json'] if not wait: module.exit_json(**module.json_output) @@ -160,4 +268,4 @@ def main(): if __name__ == '__main__': - main()
\ No newline at end of file + main() |