如何让 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.sls
将 foo.sls
应用于一个随从。 foo.sls
反过来每 30 秒 testfile.sls
应用一个随从。
希望对您有所帮助!
我想在我的 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.sls
将 foo.sls
应用于一个随从。 foo.sls
反过来每 30 秒 testfile.sls
应用一个随从。
希望对您有所帮助!