如何从orchestrate运行器在salt orchestrator上运行本地命令

时间:2017-08-23 10:06:24

标签: salt-stack orchestration

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

阅读salt文档,它看起来像是一个orchestrate runner来执行我想要执行的minion状态。

实际上,当使用sudo salt-run state.orchestrate orch.redis_cluster执行此代码段时,此代码段功能完美:

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

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

我看起来像这样:

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

有谁能建议我做错了什么?或者在orchestrator上本地执行命令的另一种方法是什么?

1 个答案:

答案 0 :(得分:1)

问题是,你正在通过driver.manage().window().maximize(); 等。人。到跑步者而不是执行模块。另请注意,您必须通过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 参数测试它,但应该可以解决这个问题。