2014-03-02 37 views
2

我开始使用Salt Stack来协调配置的项目。但它现在不起作用 - 日志文件(在minion上,在/ var/log/salt/minion中)没有显示任何错误,但小众没有按照我的要求去做。独立盐仆人沉默失败

基本上,我建立了一个SaltStack与几个顶级文件和至少两个小配置配置。特别是,我调试奴才我打电话引导(因为它应该引导在仆从盐主):

master: localhost 
file_client: local 
file_roots: 
    base: 
    - /srv/salt/base 
    - /srv/salt/states 
    master: 
    - /srv/salt/master 
    - /srv/salt/master/states 

据我所知,盐只是加载了上面的文件很好,并将它们解析为有效的对象,但Salt没有运行任何响应对象的命令。事实上,走狗日志文件说:

2014-03-01 23:00:09,644 [salt.utils.jinja ][DEBUG ] Jinja search path: '['/srv/salt/base', '/srv/salt/state 
2014-03-01 23:00:09,651 [salt.template ][DEBUG ] Rendered data from file: /srv/salt/base/top.sls: 
base: 
    '*': 
    - edit.vim 
    - essential 
    - users.root 

2014-03-01 23:00:09,656 [salt.loaded.int.render.yaml][DEBUG ] Results of YAML rendering: 
OrderedDict([('base', OrderedDict([('*', ['edit.vim', 'essential', 'users.root'])]))]) 

这一切都看起来不错,但它立即跳转到:

2014-03-01 23:00:09,661 [salt.utils.jinja ][DEBUG ] Jinja search path: '['/srv/salt/master', '/srv/salt/mas 
2014-03-01 23:00:09,662 [salt.template ][DEBUG ] Rendered data from file: /srv/salt/master/top.sls: 
master: 
    '10.47.94.0/24': 
    - match: ipcidr 
    - master 
    - srv.dns.unbound 

2014-03-01 23:00:09,665 [salt.loaded.int.render.yaml][DEBUG ] Results of YAML rendering: 
OrderedDict([('master', OrderedDict([('10.47.94.0/24', [OrderedDict([('match', 'ipcidr')]), 'master', 'srv.dns.unbound'])]))]) 

在日志文件中的所有剩余,基地再也没有提起。与base相关的命令/状态没有运行。我确实看到了edit.vim,srv.dns.unbound等的日志条目。但它们都遵循相同的模式:解析并且什么都不做。

我在做什么错?我得到了一个模糊的印象,即它与我的minion配置中有多个file_roots有关,但我宁可不进行架构更改,直到我知道该架构应该是什么。 (我已经尝试过一次使用盐,跑进“这个”沉默的错误,开始了,现在碰到了一遍)

+0

你能尝试运行盐\ * test.ping,以确认该盐主能够与附庸通信(同时检查盐仆从是否也经历了由主接受钥匙)? –

+0

@JasonZhu:我没有高手呢。这个堆栈应该定义一个运行master的master-less minion。这样的想法是,我会提供这台机器,并有我的盐堆的其余部分使用它作为主。 – nomen

+0

你解决了吗?您可以尝试运行'salt-call --local test.ping'来查看它是否响起。 – leonardinius

回答

1
master: localhost 
file_client: local 

“主:本地主机”和“file_client:本地”选项相互排斥。

如果你有'file_client:local',那么当地的salt-minion根本不会寻找主人。

如果想在同一台机器上运行一个salt-master和salt-minion,那么你会在minion config中使用'master:localhost',并留下'file_client'注释掉。 在这种情况下,你也应该保持你的仆从和主配置分开。

至于你关于top.sls文件渲染的问题。这是根据设计。 Salt将查找并呈现每个文件环境根目录中的每个top.sls。所以,因为你有两个环境,它总是会渲染两个top.sls文件,然后评估它们对于每个minion来确定每个minion执行的sls文件。

这将需要一些更多的信息来解决为什么基础环境中的状态没有被执行。尝试运行以下命令,并提供输出:

salt-call state.show_highstate -l debug 
1

这是通常的混乱,我开始阅读saltstack文件。

  1. 总是坚持主人设置,避免任何尝试玩,甚至“思想无主”。去Masterless并不能为你节省大量的CPU资源,但是对于盐腌学习/构建过程会造成更多的困惑。

  2. 总是绘制一个逻辑图,而不是“直接思考盐层”。

  3. 问 问题时,即始终写下正确的/明确的文件路径和名称。对于配置文件,状态等,不要走捷径。

我想要做类似的操作,即使用我的intranet salt-master名称AA在数据中心D中提供一个salt master X,然后从salt master X开始提供minion provision以控制数据中心D内的所有minion 。

所以这是顺理成章的事情这

盐主AA < - >(数据中心d

Server XYZ [Salt master X, Salt minion X to AA ], 
Server S_1 [Salt minion S_1, salt-master X ], 
Server S_2 [Salt minion S_2, salt-master X ], 
Server S_3 [Salt minion S_3, salt-master X ] 

所以盐主AA将控制服务器XYZ作为仆从。然后,我可以从主AA发送的控制代码的下一级服务器XYZ,或许运行自动化脚本来卸载AA盐仆从连接器。