【问题标题】:How to run local commands on the salt orchestrator from the orchestrate runner如何从编排运行器在盐编排器上运行本地命令
【发布时间】:2018-01-31 20:47:34
【问题描述】:

我正在尝试在 salt orchestrator 上执行 redis-trib.rb 实用程序(用于配置 redis 集群),在多个 minions 上执行 salt 状态以启动 redis 进程之后。

阅读 salt 文档,它看起来像是编排运行器执行我想要执行的 minion 状态。

确实,当使用sudo salt-run state.orchestrate orch.redis_cluster 执行时,这个 sn-p 功能完美:

redis_cluster_instances_create:
  salt.state:
    - tgt: '*redis*'
    - highstate: True

问题在于下一步,这需要我在 Orchestrator 上调用 redis-trib.rb。阅读文档,看起来我需要使用salt.runner 状态(执行另一个运行器),调用salt.cmd 运行器(在本地执行盐状态),然后调用cmd.run 状态来实际执行命令。

我的样子是这样的:

redis_cluster_setup_masters_{{ cluster }}:
  salt.runner:
    - name: salt.cmd
    - fun: cmd.run
    - args:
      - srv/salt/orch/redis_cluster/usr/bin/redis-trib.rb create {% for shard in shards %}{{ shard['master'] }} {% endfor %}
    - kwargs:
      unless: srv/salt/orch/redis_cluster/usr/bin/redis-trib.rb info {{ shards[0]['master'] }} | grep 'cluster_state:ok'
    - require:
      - salt: redis_cluster_instances_create

但它不起作用,并且盐错误出现:

lab-orchestrator_master:
----------
          ID: redis_cluster_instances_create
    Function: salt.state
      Result: True
     Comment: States ran successfully. No changes made to lab-redis04, lab-redis01, lab-redis02, lab-redis03.
     Started: 09:54:57.811313
    Duration: 14223.204 ms
     Changes:   
----------
          ID: redis_cluster_setup_masters_pdnocg
    Function: salt.runner
        Name: salt.cmd
      Result: False
     Comment: Exception occurred in runner salt.cmd: Traceback (most recent call last):
                File "/usr/lib/python2.7/site-packages/salt/client/mixins.py", line 392, in _low
                  data['return'] = self.functions[fun](*args, **kwargs)
              TypeError: cmd() takes at least 1 argument (0 given)
     Started: 09:55:12.034716
    Duration: 1668.345 ms
     Changes:   

谁能建议我做错了什么?还是在编排器上本地执行命令的另一种方式?

【问题讨论】:

    标签: salt-stack orchestration


    【解决方案1】:

    问题是,您正在传递fun 等。人。到跑步者而不是执行模块。另请注意,您必须通过arg 而不是args 传递参数:

    redis_cluster_setup_masters_{{ cluster }}:
      salt.runner:
        - name: salt.cmd
        - arg:
          - fun=cmd.run
          - cmd='srv/salt/orch/redis_cluster/usr/bin/redis-trib.rb create {% for shard in shards %}{{ shard['master'] }} {% endfor %}'
        - unless: srv/salt/orch/redis_cluster/usr/bin/redis-trib.rb info {{ shards[0]['master'] }} | grep 'cluster_state:ok'
        - require:
          - salt: redis_cluster_instances_create
    

    这应该可以解决问题,尽管我没有使用 kwargs 参数对其进行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 2016-07-14
      • 2021-12-28
      • 2023-03-21
      • 2021-03-18
      相关资源
      最近更新 更多