SaltStack Reactor异常及解决方案

86次阅读
没有评论

问题描述

在使用SaltStack时,遇到了与Reactor相关的异常。他提供了相关的配置文件和错误信息,并希望得到解决方案以解决这个问题。

解决方案

根本问题解析

首先,让我们分析一下错误信息。错误信息表明在运行runner state.orchestrate命令时出现了异常,具体的错误内容是TypeError: orchestrate() argument after ** must be a mapping, not list。这意味着在运行orchestrate函数时,传递给它的参数应该是一个映射(字典),而不是一个列表。问题很可能出现在配置中的某些参数传递上。

解决方案步骤

以下是解决这个问题的步骤:

  1. 同步Reactor配置: 首先,你提到了在每次更改Reactor配置后,都需要在主服务器上运行salt-call state.highstate命令,以便将Reactor源代码更改与服务器中的配置同步。确保在更改配置后运行这个命令,以避免配置不同步导致的问题。

  2. 检查配置参数: 错误信息表明在orchestrate函数中传递的参数应该是一个映射。确保在配置文件中传递给这个函数的参数是一个字典。特别是,在dev.slsdeploy.sls文件中检查pillar参数的传递方式。

  3. 检查版本兼容性: 有用户评论提到了版本兼容性问题,确认你正在使用的SaltStack版本。升级到较新版本可能会解决一些已知的问题。

示例代码

下面是可能出现问题的代码示例,你需要检查这些代码段并确保其正确性:

dev.sls

{% set payload = data.get('post') %}
{% set master = [grains.fqdn] %}
core|api|{{ master }}|jenkins-cd:
  runner.state.orchestrate:
    - tgt: {{ master }}
    - mods: myreactor.deploy
    - pillar:
        temp_var_transmit: {{ payload }}

deploy.sls

{% set payload = salt.pillar.get('temp_var_transmit') %}
{% set master = [grains.fqdn] %}
my_state:
  salt.function:
    - name: cmd.run
    - tgt: {{ master }}
    - arg:
      - "salt-run state.orch my-reactor.cd_state pillar='{{payload}}'"

cd_state.sls

{% set data = salt.pillar.get('temp_var_transmit') %}
my_deploy:
  salt.state:
    - tgt: {{ member }}
    - expr_form: compound
    - sls: '{{ data.artifact_id }}_{{ data.artifact_version }}'
    - queue: true
    - test: {{ dry_run_mode }}

总结

解决SaltStack Reactor相关的问题需要注意配置同步、参数传递以及版本兼容性等方面。通过以上的步骤和示例代码,你应该能够更好地理解问题并解决它。

请注意:解决方案中提到的步骤可能需要根据具体情况进行调整。在进行任何配置更改之前,建议先做好备份。如果需要升级版本,请确保在升级之前充分测试,以避免新版本引入新的问题。

正文完