summaryrefslogtreecommitdiffstats
path: root/awx_collection/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'awx_collection/plugins')
-rw-r--r--awx_collection/plugins/modules/bulk_host_create.py39
-rw-r--r--awx_collection/plugins/modules/bulk_job_launch.py164
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()