SaltStack:文件来源的逆向工程

gue*_*tli 5 debugging reverse-engineering configuration-management salt-stack

如果你看一下设置的主机是SaltStack,那么它有时候就像用vi查看二进制文件一样.

您不知道配置文件是如何创建的.

这会很难解决问题.文件来源的逆向工程需要花费太多时间.

我的目标:通过查看minion(由salt创建)上的unix配置文件到配置来源的源,可以轻松找到方法.就像$Id$在svn和cvs中一样.

我和朋友的一个想法是:

状态file.managed应该(可选)添加文件的源.

例:

我的sls文件包含这个:

file_foo_bar:
  file.managed:
    - source:
      - salt://foo/bar
Run Code Online (Sandbox Code Playgroud)

然后,创建的文件应包含此注释.

# Source: salt://foo/bar
Run Code Online (Sandbox Code Playgroud)

当然这并不简单,因为将注释放入配置文件有不同的方法.

这可行吗?或者是否有更好的解决方案来实现我的目标.

更新

通常我知道我做错了什么,并且可以轻松找到根.如果有几个人在州树上工作,就会出现问题.

Mos*_*ein 1

这是一个起点,您可以使用Salt Pillar获取由 Salt 管理的修改文件的日期和时间。

让我们调用我们的变量salt_managed。创建一个如下所示的支柱文件:

{% set managed_text = 'Salt managed: File modified on ' + salt.cmd.run('date "+%Y-%m-%d %H:%M:%S"') %}

salt_managed: {{ managed_text | yaml_dquote }}
Run Code Online (Sandbox Code Playgroud)

然后在minion上调用pillar时会得到以下结果:

$ salt-call pillar.get salt_managed
local:
    Salt managed: File modified on 2016-10-18 11:12:40
Run Code Online (Sandbox Code Playgroud)

您可以通过将其添加到配置文件的顶部来使用它,例如如下所示:

{{ pillar.get('salt_managed') }}
Run Code Online (Sandbox Code Playgroud)

更新:

我找到了一种可能对某人有用的解决方法。假设我们有多个状态可以修改同一个文件。我们如何知道状态 X 负责修改该文件?通过执行以下步骤:

1-我创建了这样一个状态:

Create a File:
  file.managed:
    - name: /path/to/foofile
    - source: salt://statedir/barfile
Add file header:
  file.prepend:
    - name: /path/to/foofile
    - text: "This file was managed by using this salt state {{ sls }}"
Run Code Online (Sandbox Code Playgroud)

barfile 的内容是:

This is a new file
Run Code Online (Sandbox Code Playgroud)

2-从minion调用状态,结果如下:

$ salt-call state.sls statedir.test
local:
----------
          ID: Create a File
    Function: file.managed
        Name: /path/to/foofile
      Result: True
     Comment: File /path/to/foofile updated
     Started: 07:50:45.254994
    Duration: 1034.585 ms
     Changes:   
              ----------
              diff:
                  New file
              mode:
                  0644
----------
          ID: Add file header
    Function: file.prepend
        Name: /path/to/foofile
      Result: True
     Comment: Prepended 1 lines
     Started: 07:50:46.289766
    Duration: 3.69 ms
     Changes:   
              ----------
              diff:
                  ---  
                  +++  
                  @@ -1,1 +1,2 @@
                  +This file was managed by using this salt state statedir.test
                   This is a new file

Summary for local
------------
Succeeded: 2 (changed=2)
Failed:    0
------------
Total states run:     2
Run Code Online (Sandbox Code Playgroud)

目前的内容foofile是:

This file was managed by using this salt state statedir.test
This is a new file
Run Code Online (Sandbox Code Playgroud)