From 1c69c305e7fc25e608cd05a0c0970ad1f156d8b6 Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Sat, 17 Sep 2016 01:26:54 +0200 Subject: [PATCH] Sync puppet module changes from upstream ansible We keep a local copy of this file for operational purposes, but the upstream one has grown a few things. Sync to make it easier to submit our local changes upstream. Change-Id: I84927750fce1a7c6101e8d5c131c0b13020bb6aa --- library/puppet | 46 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/library/puppet b/library/puppet index 9fe120d..b45716d 100644 --- a/library/puppet +++ b/library/puppet @@ -73,18 +73,37 @@ options: required: false default: stdout version_added: "2.1" + certname: + description: + - The name to use when handling certificates. + required: false + default: None + version_added: "2.1" + tags: + description: + - A comma-separated list of puppet tags to be used. + required: false + default: None + version_added: "2.1" + execute: + description: + - Execute a specific piece of Puppet code. It has no effect with + a puppetmaster. + required: false + default: None + version_added: "2.1" noop: description: - Whether puppet should be run in noop mode required: false default: false - version_added: "2.1" + version_added: "2.2" debug: description: - Whether puppet should be run in debug mode required: false default: false - version_added: "2.1" + version_added: "2.2" requirements: [ puppet ] author: "Monty Taylor (@emonty)" @@ -99,6 +118,15 @@ EXAMPLES = ''' # Run puppet using a different environment - puppet: environment=testing + +# Run puppet using a specific certname +- puppet: certname=agent01.example.com +# Run puppet using a specific piece of Puppet code. Has no effect with a +# puppetmaster. +- puppet: execute='include ::mymodule' + +# Run puppet using a specific tags +- puppet: tags=update,nginx ''' @@ -138,18 +166,22 @@ def main(): facts=dict(default=None), facter_basename=dict(default='ansible'), environment=dict(required=False, default=None), + certname=dict(required=False, default=None), + tags=dict(required=False, default=None, type='list'), + execute=dict(required=False, default=None), noop=dict(required=False, default=False, type='bool'), debug=dict(required=False, default=False, type='bool'), ), supports_check_mode=True, mutually_exclusive=[ ('puppetmaster', 'manifest'), + ('puppetmaster', 'manifest', 'execute'), ], ) p = module.params global PUPPET_CMD - PUPPET_CMD = module.get_bin_path("puppet", False) + PUPPET_CMD = module.get_bin_path("puppet", False, ['/opt/puppetlabs/bin']) if not PUPPET_CMD: module.fail_json( @@ -193,7 +225,7 @@ def main(): if not p['manifest']: cmd = ("%(base_cmd)s agent --onetime" " --ignorecache --no-daemonize --no-usecacheonfailure" - " --no-splay --verbose") % dict( + " --no-splay --verbose --color 0") % dict( base_cmd=base_cmd, ) if p['puppetmaster']: @@ -207,6 +239,10 @@ def main(): cmd += " --show_diff" if p['environment']: cmd += " --environment '%s'" % p['environment'] + if p['tags']: + cmd += " --tags '%s'" % ','.join(p['tags']) + if p['certname']: + cmd += " --certname='%s'" % p['certname'] if module.check_mode or p['noop']: # Noop causes detailed-exitcodes to sometimes erroneously # return failures, so we only set detailed-exitcodes when @@ -220,7 +256,7 @@ def main(): if rc == 0: # success - module.exit_json(rc=rc, changed=False, stdout=stdout) + module.exit_json(rc=rc, changed=False, stdout=stdout, stderr=stderr) elif rc == 1: # rc==1 could be because it's disabled # rc==1 could also mean there was a compilation failure