如何将kwargs从状态文件传递到我的自定义模块?

我正在写一个自定义模块,以使用debmirror在Ubuntu上创build本地镜像。 这是我的代码:

 ''' Build a local mirror with debmirror. ''' import logging import os import salt.utils from salt.exceptions import CommandExecutionError def created(arch, section, server, release, in_path, proto, out_path, **kwargs): ''' ''' __salt__['file.makedirs'](out_path) if 'gnupghome' in kwargs: gnupghome = kwargs.pop('gnupghome', None) __salt__['file.makedirs'](gnupghome) else: gnupghome = '/root/.gnupg' env = { 'GNUPGHOME': gnupghome } if 'keyid' in kwargs: keyid = kwargs.pop('keyid', None) ks = kwargs.pop('keyserver', None) if not keyid or not ks: error_str = 'both keyserver and keyid options required.' raise NameError(error_str) cmd = 'apt-key export {0}'.format(keyid) output = __salt__['cmd.run_stdout'](cmd, **kwargs) imported = output.startswith('-----BEGIN PGP') if ks: if not imported: cmd = ('gpg --no-default-keyring --keyring {0}/trustedkeys.gpg --keyserver {1} --recv-keys {2}') ret = __salt__['cmd.run_all'](cmd.format(gnupghome, ks, keyid), **kwargs) if ret['retcode'] != 0: raise CommandExecutionError( 'Error: key retrieval failed: {0}' .format(ret['stdout']) ) elif 'key_url' in kwargs: key_url = kwargs['key_url'] cmd = 'wget -q -O- "{0}" | gpg --no-default-keyring --keyring {1}/trustedkeys.gpg --import'.format(key_url, gnupghome) ret = __salt__['cmd.run_all'](cmd, **kwargs) if ret['retcode'] != 0: raise CommandExecutionError( 'Error: key retrieval failed: {0}'.format(ret['stderr']) ) return __salt__['cmd.run_all']('debmirror -a {0} --no-source -s {1} -h {2} -d {3} -r {4} --progress -e {5} {6}'.format(arch, section, server, release, in_path, proto, out_path), env=env) 

这个模块在miniontesting时工作正常:

 salt-call debmirror.created /home/mirrorkeyring/ \ i386,amd64 \ main,restricted,universe,multiverse \ ppa.launchpad.net \ precise \ /saltstack/salt/ubuntu \ http \ /saltmirror \ key_url='http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x4759FA960E27C0A6' 

但我想知道:我怎样才能在一个状态文件中定义kwargs

 {% for package in ('debmirror', 'wget', 'gnupg') %} {{ package }}: pkg: - installed {% endfor %} salt-mirror: module: - run - name: debmirror.created - arch: i386,amd64 - section: main,restricted,universe,multiverse - release: precise - server: ppa.launchpad.net - in_path: /saltstack/salt/ubuntu - proto: http - out_path: /saltmirror - <WHAT SHOULD I PUT HERE?> - require: - pkg: debmirror 

你可以在状态文件中使用kwargs作为arg声明的函数 ,如下所示:

 {% for package in ('debmirror', 'wget', 'gnupg') %} {{ package }}: pkg: - installed {% endfor %} salt-mirror: module: - run - name: debmirror.created - arch: i386,amd64 - section: main,restricted,universe,multiverse - release: precise - server: ppa.launchpad.net - in_path: /saltstack/salt/ubuntu - proto: http - out_path: /saltmirror - kwargs: { key_url: 'http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x4759FA960E27C0A6BLAH', gnupghome: /home/mirrorkeyring } - require: - pkg: debmirror 

来源: https : //groups.google.com/forum/#!topic/salt- users/ _hrsQd5CLvM