为了测试 salt-stack,我想将一个配置文件复制到另一个远程(我正在本地主机中测试 master 和 minion)
/etc/salt/minion :
master: 127.0.0.1
file_roots:
base:
- /srv/salt/base
Run Code Online (Sandbox Code Playgroud)
/etc/salt/master:
interface: 0.0.0.0
Run Code Online (Sandbox Code Playgroud)
/srv/salt 树:
# tree srv/
srv/
??? salt
? ??? base
? ??? env
? ??? envpy.template
? ??? init.sls
??? top.sls
Run Code Online (Sandbox Code Playgroud)
和模板文件:
# cat /srv/salt/base/env/envpy.template
This is a test !
Run Code Online (Sandbox Code Playgroud)
这是初始化文件:
# cat /srv/salt/base/env/init.sls
/home/myHome/env.py:
file:
- managed
- source: salt://base/env/envpy.template
Run Code Online (Sandbox Code Playgroud)
最后是顶级文件:
# cat /srv/salt/top.sls
base:
'*':
- base.env
Run Code Online (Sandbox Code Playgroud)
运行盐highstate:
# salt '*' state.highstate
myHost:
----------
ID: states
Function: no.None
Result: False
Comment: …Run Code Online (Sandbox Code Playgroud) 我将我的 salt sls 文件存储在一个 git 存储库中,但我有一个长期存在的问题,即我无法验证我的 YAML 是否代表了一组可以应用的有效状态(我也很难验证我的 YAML -- 那是不过要容易得多)。理想情况下,我想要某种方式在提交之前在我的工作站上验证我的状态。如果做不到这一点,某种方式可以检查预接收挂钩,这样我至少可以阻止狡猾的代码访问服务器。
我可能遗漏了一些东西,或者这可能只是布局支柱数据的错误方式。
我想遍历第二级支柱数据。
支柱示例:
repo:
Option1:
version1:
display_name: "abcde"
version2:
display_name: "fghij"
Option2:
version1:
display_name: "klmn"`
Run Code Online (Sandbox Code Playgroud)
SL:
{% for version, versioninfo in salt['pillar.get']('repo', {}).iteritems() %}
{{ versioninfo[] }}{{ versioninfo[]['display_name'] }}
{% endfor %}`
Run Code Online (Sandbox Code Playgroud)
我想返回每个版本和显示名称,有效地忽略第一级支柱数据。显然上面的jinja不起作用,但是有没有办法做到这一点?
我需要为用户 helen 生成 ssh 密钥(公共/私有对)。该用户已经在我所有的盐奴中了。如何从我的 salt master 为该用户生成 ssh 密钥?
对于 root 用户,我使用此命令生成了密钥,效果很好:
salt '*application-server-*' cmd.run "ssh-keygen -q -N '' -f /root/.ssh/id_rsa"
Run Code Online (Sandbox Code Playgroud)
我可以发出以下命令,为 helen 生成 ssh 密钥;但权限和所有权会不同;因此需要再次发出命令来更正权限和所有权:
salt '*application-server-*' cmd.run "ssh-keygen -q -N '' -f /home/helen/.ssh/id_rsa"
Run Code Online (Sandbox Code Playgroud)
salt 有没有办法以用户 helen 而不是 root 的身份运行此命令?
一般来说,salt 有没有办法以非 root 用户身份运行命令?
我有两个在 saltstack 下管理的 httpd 服务器的仆从。VirtualHost基于端口需要为它们单独配置。所以/etc/httpd/conf.d/httpd-vhost.conf是这样看的:
httpd:
pkg.installed: []
service.running:
- require:
- pkg: httpd
- watch:
- file: /etc/httpd/conf.d/httpd-vhosts.conf
/etc/httpd/conf.d/httpd-vhosts.conf:
file.managed:
- source: salt://webserver/httpd-vhosts.conf
Run Code Online (Sandbox Code Playgroud)
问题是这两个 Minion 有自己的服务器名称,httpd-vhost.conf应该像ServerName www.example1.com和一样不同www.example2.com。Saltstackgrains模块只适用于 .sls 文件而不是托管文件。那么有什么建议可以让它发挥作用吗?
所以我在我的基础设施中的服务器上运行了 salt master,那里有一些密钥,要么被接受,要么不被接受,或者……要么被拒绝,要么被拒绝。我的问题是:
被拒绝或被拒绝的密钥有什么区别?:
Denied Keys:
server1
...
Rejected Keys:
server2
Run Code Online (Sandbox Code Playgroud)
只是为了让您知道,我已经进行了一些搜索,但没有找到有关这些含义的任何信息。我不断提出与完全不同的东西有关的结果。
背景:我一直致力于设置盐环境,并且达到了不仅要分发文件而且要分发目录的地步。我发现最明智的方法是将我想要复制的目录/srv/salt/path_to_dir放在主服务器上,然后使用cp.get_dir命令分发它。
我所做的:为了测试我创建的设置和命令,/srv/salt/tmp/foo并在其中放置了两个文件。然后当我salt minion_name cp.get_dir salt://tmp/foo /tmp/foo在主服务器上运行命令时,有一行输出正好读取minion_name:. 有点奇怪,除了minion 名称之外没有任何输出,甚至错误,但是好吧,我去检查minion 看看是否发生了任何事情。
在仆从还没有出现/tmp/,并且在没有新的内容/etc/salt/或/var/cache/salt/任。我登记了/var/log/salt/minion,但除了我一小时前试图找出为什么我不能使用file.copy递归设置为 true 来分发文件之外,什么也没有。
我的问题:有什么明显的我做错了吗?根据文档,我发现我所做的应该有效。似乎也没有任何错误输出。我应该尝试使用不同的命令或方法来通过 salt 分发包含来自 master 的内容的文件夹吗?
附加信息:master 和所有minions 都是Debian 系统。盐的已安装的版本是salt 2014.1.3 (Hydrogen)在主及salt-minion 0.17.5和salt-minion 2015.5.3对爪牙我曾尝试这种方法。
如何解决递归目录管理不保留权限的问题?
我想将(本地)中的所有文件复制/monitoring/files/etc到/etc小黄人上。
copy_files_in_etc:
file.recurse:
- source:
- salt://monitoring/files/etc
- name: /etc
- template: jinja
Run Code Online (Sandbox Code Playgroud)
上面的代码片段有效,但我缺少某些文件的可执行位。
例如 /etc/cron.daily 中的脚本应该是可执行的。
解决这个问题最简单的方法是什么?
我搜索一种方法使与此表达式匹配的所有文件都可执行:
/etc/cron.(daily|hourly|monthly|weekly/)
Run Code Online (Sandbox Code Playgroud) 将 salt 状态备份到 git repo 是有意义的,因为那里不应该有任何敏感数据。
但是支柱数据呢?我应该为此创建一个单独的 git 存储库,还是将其放入 S3 存储桶中,或者以某种方式加密数据?
想象一下,您想在一组 Minion 上应用一些状态,例如所有 ubuntu 客户端。到我们申请时,可能会显示一些 Minion 处于离线状态。
状态在消息总线中保留多长时间以推送到 Minion?你有什么策略来解决这个问题并在他们重新上线时改变他们的状态?有没有比 running 更好的方法来使 minion pull 状态salt-call state.highstate?