salt 在后台执行什么命令以达到所需的 minion 状态?

What commands does salt execute under the hood to achieve desired minion states?

正确或错误,我假设为了实现 *.sls 文件中定义的声明性配置,salt master 必须对每个 minion 执行一系列命令式命令。例如,对于

install_docker_1703:
  pkgrepo.managed:
    - humanname: Docker CE Repository
    - name: deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable
    - key_url: https://download.docker.com/linux/ubuntu/gpg
    - require_in:
      - pkg: docker-ce
  pkg.installed:
    - name: docker-ce
    - hold: True
    - refresh: True
    - cache_valid_time: 30 # very low value for testing purposes
    - version: '17.03.2*'

执行这些命令的顺序

add-apt-repository <docker-repo>
apt-get update
apt-get install docker-ce=17.03.2-xxxxxxx

加上一些检查来验证当前状态并将其与所需状态进行比较。

我在调试盐的行为时遇到问题。在上面示例的上下文中,我无法验证是否每次 运行 salt master (salt '*' state.apply) 更新 apt 缓存,或者不超过每 30 秒更新一次,或者完全没有。

如何将执行的命令的确切顺序及其各自的输出输出到 stdout(或在某些日志文件中查找)?

您可以在 /var/log/salt/minion 文件中找到关于 minion 的详细命令,
您很可能需要将日志记录级别调整为 DEBUGlog_level_logfile: debug 应该就足够了。否则你只会找到 errors/warns。

调试行为:最好检查盐源并自行查找。 鉴于 salt minion 工作的不同条件,执行分支实在是太多了。

每个状态(状态模块)由多个模块调用(执行模块)组成。在执行模块中,您将找到命令。这是确定给定状态的确切命令的最简单方法