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

时间:2016-06-14 18:24:01

标签: ubuntu centos7 salt-stack

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

以下是我的环境:

盐主

操作系统:CentOS7

盐版: 2016.3.0

盐仆从

操作系统: 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/

当我运行它时,一切都会成功返回,mirrordirectory会按预期第一次运行,但将来不会运行。

minion的调试输出就是这个。

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

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

如果有一种方法可以做到这一点而不在minion上放置一个函数,我很想知道它是什么,但我想至少学习如何运行saltatck中的时间表。

感谢任何帮助。

旁注

最终,这将是一个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 /盐/文件

此目录包含要同步的文件

主人返回所有成功:

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 /盐/主

interface: 192.168.0.1
user: salt

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

1 个答案:

答案 0 :(得分:1)

schedule.present的函数必须是salt函数。在您的情况下,您可能想要做的是使用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

希望这有帮助!