如何让 schedule.present 在 saltstack 中工作?

How do I get schedule.present to work in saltstack?

我想在我的 salt-master 上有一个目录,它与我 运行ning 的 windows 7 minion 保持同步。我尝试使用 schedule.present,但我的运气很差。我不确定我的问题是什么,但我也认为这可能不是完成任务的最佳方式。

这是我的环境:

盐大师

OS:分OS7

盐版本: 2016.3.0


salt-minion

OS: Ubuntu 14.04

盐版本: 2016.3.0


这是我当前的配置:

init.sls

syncFiles:
  schedule.present:
    - function: /home/user/directory
    - seconds: 30
    - splay: 10

/home/user/directory:
  file.recurse:
    - source: salt://source/directory/

当我运行这个时候,一切returns成功,并且mirrordirectory运行如预期的那样是第一次,但以后不会再有。

minion 的调试输出是这样的。

[INFO  ] Invalid function: mirrordirectory in scheduled job syncFiles.

我想我需要把这个函数放在 minion 上,但我在文档中的任何地方都找不到。

如果有一种方法可以做到这一点而无需在 minion 上放置一个函数,我很想知道它是什么,但我至少想了解如何 运行 在 saltsatck 中进行调度。

感谢任何帮助。


旁注

最终,这将是一个 Windows 7 随从,而不是 ubuntu,我只是想让它先工作。


更新 1

这是我根据以下答案尝试过的方法(但仍然无效)。

/srv/salt/mirrordirectory/init.sls

syncFiles:
  schedule.present:
    - function: state.sls
- job_args:
  - testfile
- seconds: 30
- splay: 10

/srv/salt/testfile.sls

/tmp/foo:
  file.recurse:
    - source: salt://files

/srv/salt/top.sls

base:
  '*':
    - mirrordirectory

/srv/salt/files

此目录包含要同步的文件

高手returns全部成功:

myminion:
----------
          ID: syncFiles
    Function: schedule.present
      Result: True
     Comment: Job syncFiles in correct state
     Started: 16:18:22.290216
    Duration: 140.989 ms
     Changes:   

Summary for myminion
------------
Succeeded: 1
Failed:    0
------------
Total states run:     1

minion 上的调试显示有问题:

[DEBUG   ] Sending event - data = {'fun_args': ['testfile'], 'jid': 'req', 'return': ["No matching sls found for 'testfile' in env 'base'"], 'retcode': 1, 'success': True, 'schedule': 'syncFiles', 'cmd': '_return', 'pid': 24448, '_stamp': '2016-06-15T21:19:57.928894', 'fun': 'state.sls', 'id': 'myminion'}
[DEBUG   ] Handling event tag '__schedule_return'
[INFO    ] Returning information for job: req

这一行似乎是问题 ["No matching sls found for 'testfile' in env 'base'"]。知道为什么找不到文件吗?


更新 2

/etc/salt/master

interface: 192.168.0.1
user: salt

这是我的主配置文件中仅有的两行。我想以 root 以外的用户身份测试 运行ning,并且在我更改了一些文件权限后一切正常。也许这就是问题所在...也许我错过了什么。

schedule.present 的函数必须是盐函数。在您的情况下,您可能想要做的是使用 state.sls。这是一个类似于你为我工作的例子:

foo.sls

syncFiles:
  schedule.present:
    - function: state.sls
    - job_args:
      - testfile
    - seconds: 30
    - splay: 10

testfile.sls

/tmp/foo:
  file.recurse:
    - source: salt://files

top.sls

base:
  '*':
    - foo

所以,这里发生的是 - top.slsfoo.sls 应用于一个随从。 foo.sls 反过来每 30 秒 testfile.sls 应用一个随从。

希望对您有所帮助!