我尝试在盐协调器上执行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上本地执行命令的另一种方法是什么?
答案 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
参数测试它,但应该可以解决这个问题。