debmirror
を使用してUbuntuでローカルミラーを作成するために カスタムモジュール を作成しています。これが私のコードです:
'''
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)
このモジュールは、ミニオンでテストするときに正常に機能しています。
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
を状態ファイルの 関数引数宣言 として使用できます。次のようになります。
{% 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