Ubuntu 如何获得saltstack工作的schedule.present?

Ubuntu 如何获得saltstack工作的schedule.present?,ubuntu,centos7,salt-stack,Ubuntu,Centos7,Salt Stack,我想在我的salt主机上有一个目录,该目录与我运行的windows7 minion保持同步。我试过用,但运气不好。我不确定我的问题是什么,但我也认为这可能不是完成任务的最佳方式 我的环境是这样的: 盐母版 interface: 192.168.0.1 user: salt OS:CentOS7 salt版本:2016.3.0 盐仆 OS:Ubuntu 14.04 salt版本:2016.3.0 以下是我当前的配置: init.sls syncFiles: schedule.presen

我想在我的salt主机上有一个目录,该目录与我运行的windows7 minion保持同步。我试过用,但运气不好。我不确定我的问题是什么,但我也认为这可能不是完成任务的最佳方式

我的环境是这样的:

盐母版

interface: 192.168.0.1
user: salt
OS:CentOS7

salt版本:2016.3.0


盐仆

OS:Ubuntu 14.04

salt版本: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/
syncFiles:
  schedule.present:
    - function: state.sls
- job_args:
  - testfile
- seconds: 30
- splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - mirrordirectory
syncFiles:
  schedule.present:
    - function: state.sls
    - job_args:
      - testfile
    - seconds: 30
    - splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - foo
当我运行此命令时,所有内容都会成功返回,
mirrordirectory
会按预期第一次运行,但以后不会运行

仆从的调试输出如下

[INFO  ] Invalid function: mirrordirectory in scheduled job syncFiles.
我猜我需要把这个功能放在仆从身上,但我在文档中找不到

如果有一种方法可以做到这一点,而不必在仆从身上设置函数,我很想知道它是什么,但我想至少学习如何在saltsatck中运行时间表

感谢您的帮助


旁注

最终,这将是一个Windows7迷你版,而不是ubuntu,我只是想让它首先工作


更新1

以下是我根据下面的答案所做的尝试(但仍然不起作用)

/srv/salt/mirrordirectory/init.sls

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

/home/user/directory:
  file.recurse:
    - source: salt://source/directory/
syncFiles:
  schedule.present:
    - function: state.sls
- job_args:
  - testfile
- seconds: 30
- splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - mirrordirectory
syncFiles:
  schedule.present:
    - function: state.sls
    - job_args:
      - testfile
    - seconds: 30
    - splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - foo
/srv/salt/testfile.sls

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

/home/user/directory:
  file.recurse:
    - source: salt://source/directory/
syncFiles:
  schedule.present:
    - function: state.sls
- job_args:
  - testfile
- seconds: 30
- splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - mirrordirectory
syncFiles:
  schedule.present:
    - function: state.sls
    - job_args:
      - testfile
    - seconds: 30
    - splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - foo
/srv/salt/top.sls

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

/home/user/directory:
  file.recurse:
    - source: salt://source/directory/
syncFiles:
  schedule.present:
    - function: state.sls
- job_args:
  - testfile
- seconds: 30
- splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - mirrordirectory
syncFiles:
  schedule.present:
    - function: state.sls
    - job_args:
      - testfile
    - seconds: 30
    - splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - foo
/srv/salt/files

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

/home/user/directory:
  file.recurse:
    - source: salt://source/directory/
syncFiles:
  schedule.present:
    - function: state.sls
- job_args:
  - testfile
- seconds: 30
- splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - mirrordirectory
syncFiles:
  schedule.present:
    - function: state.sls
    - job_args:
      - testfile
    - seconds: 30
    - splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - foo
此目录包含要同步的文件

主控返回所有成功:

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
仆从的调试显示了一个问题:

[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
这一行似乎是问题所在。
[“在env'base'”中找不到与'testfile'匹配的sls]
。知道为什么找不到文件吗


更新2

/etc/salt/master

interface: 192.168.0.1
user: salt

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

时间表的功能。present必须是salt功能。在您的情况下,您可能需要使用
state.sls
。下面是一个类似于您为我工作的示例:

foo.sls

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

/home/user/directory:
  file.recurse:
    - source: salt://source/directory/
syncFiles:
  schedule.present:
    - function: state.sls
- job_args:
  - testfile
- seconds: 30
- splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - mirrordirectory
syncFiles:
  schedule.present:
    - function: state.sls
    - job_args:
      - testfile
    - seconds: 30
    - splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - foo
testfile.sls

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

/home/user/directory:
  file.recurse:
    - source: salt://source/directory/
syncFiles:
  schedule.present:
    - function: state.sls
- job_args:
  - testfile
- seconds: 30
- splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - mirrordirectory
syncFiles:
  schedule.present:
    - function: state.sls
    - job_args:
      - testfile
    - seconds: 30
    - splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - foo
top.sls

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

/home/user/directory:
  file.recurse:
    - source: salt://source/directory/
syncFiles:
  schedule.present:
    - function: state.sls
- job_args:
  - testfile
- seconds: 30
- splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - mirrordirectory
syncFiles:
  schedule.present:
    - function: state.sls
    - job_args:
      - testfile
    - seconds: 30
    - splay: 10
/tmp/foo:
  file.recurse:
    - source: salt://files
base:
  '*':
    - foo
因此,这里发生的是-
top.sls
foo.sls
应用于仆从
foo.sls
每隔30秒依次应用一个仆从
testfile.sls


希望这有帮助

我仍然有一个问题。我用我当前的调试工具更新了问题的结尾。看来它找不到testfile文件。我刚刚尝试了完全相同的salt配置,它对我来说非常有用。我怀疑您的盐主机配置可能有问题。您是否以任何方式更改了默认设置?你能把它粘贴到这里吗?我唯一更改的是
user:root
user:salt
。我将把我的配置文件粘贴到问题中。再次感谢所有的帮助。为了以防万一,我取出了user:root行,它再次以root身份运行。这似乎没有什么帮助。我在两个干净的虚拟机上再次尝试,效果很好。为了排除任何配置问题,有没有办法在两个干净的设置(一个centOS和一个Ubuntu)上进行测试?