AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 574111
Accepted
quanta
quanta
Asked: 2014-02-08 20:37:18 +0800 CST2014-02-08 20:37:18 +0800 CST 2014-02-08 20:37:18 +0800 CST

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

  • 772

我正在编写一个自定义模块来使用debmirror. 这是我的代码:

'''
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)

在 Minion 上进行测试时,此模块运行良好:

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
python
  • 1 1 个回答
  • 3062 Views

1 个回答

  • Voted
  1. Best Answer
    quanta
    2014-02-08T20:37:18+08:002014-02-08T20:37:18+08:00

    您可以在状态文件中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

    • 0

相关问题

  • 在 cygwin/XP 下安装完整 Python 的最佳方式?

  • Mac OS X:从 python 脚本中更改 $PATH

  • 可以使用 easy_install 和 bdist_rpm 安装吗?

  • 我可以“注册”python 脚本以在 Windows 上执行吗?

  • 如何使用脚本远程重启 Windows 服务?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve