我收到这条消息,但我不知道为什么
salt:/srv # salt-ssh foo-archiv state.sls monitoring
[ERROR ] Rendering exception occurred: Jinja variable 'salt.utils.context.NamespacedDictWrapper object' has no attribute 'monitoring'
[CRITICAL] Rendering SLS 'base:monitoring' failed: Jinja variable 'salt.utils.context.NamespacedDictWrapper object' has no attribute 'monitoring'
foo-archiv:
- Rendering SLS 'base:monitoring' failed: Jinja variable 'salt.utils.context.NamespacedDictWrapper object' has no attribute 'monitoring'
Run Code Online (Sandbox Code Playgroud)
这个问题的根源是什么?
相同的 sls 文件适用于不同的主机!
一般来说(据我所知)主要的基础设施/配置管理系统(Puppet、Chef、Ansible 和 SaltStack)都基于这样的理念:您的服务器是“牛”而不是“宠物”,而且它们似乎可能与直接对服务器进行配置更改的想法相矛盾。
尽管我曾与 Chef、Puppet 和 Salt 合作过,但始终是从与 Vagrant 合作的开发人员的角度出发,为开发设置单独的盒子,因此我的经验无助于回答这个问题。
问题是:这些系统是否支持直接对服务器进行更改并将其保留一段时间而不必担心本地守护程序会用官方配置覆盖它的用例?您应该能够进行更改(并且最好设置防止覆盖的时间窗口),而无需对(例如)厨师食谱或盐状态进行任何重大更改。此用例的全部目的是避免让五分钟的配置更改因公司摩擦和找到正确(例如)盐状态并确保没有副作用并完成发布/部署的复杂性而陷入困境循环和测试以确保您在此过程中没有发生任何事情。
如果您想要一个更具体的示例,假设您想要调整多个日志的 logrotate 设置,以平衡节省驱动器空间和访问历史数据。您知道在任何给定设置下将保存多少数据,以及您认为需要保留多少数据,但您不能 100% 确定。最好一开始就进行更改,然后看到 (1) 有人抱怨他们需要更多历史数据来执行某些调试任务,或者 (2) 您没有节省预期的驱动器空间,需要节省。
五分钟的更改实际上可以是五分钟的更改,如果您的配置管理系统允许它是一个,然后一旦您确信您希望在所有履行特定角色的盒子上进行这些更改,您可以让Chef/Puppet/Salt/Ansible 会为您管理。
注意:我不是在询问配置管理系统尚未管理某种类型的配置文件的用例,而是询问它已经在管理某种类型的配置文件,但您想要进行本地更改并让它们在给定的机器上优先,并且不被覆盖。
这些系统是否支持我的用例?(不需要我与系统战斗或进行后空翻来使其工作。)
我对盐相当陌生,所以我可能错过了一些东西,但我无法弄清楚。
我使用 salt 作为命令执行工具(目前没有配置管理)。我找不到一种方法来使用盐从仆从中获取配置并将它们放入 git 存储库中。
我最终试图实现的是给盐主一个像这样的配置文件列表
/etc/ssh/ssh_config
/etc/vim/vimrc
etc.
Run Code Online (Sandbox Code Playgroud)
并让 salt-master 运行获取这些文件,把它放在像这样的文件夹中
/srv/salt/minions/configs/minion01/etc/ssh/ssh_config
/srv/salt/minions/configs/minion02/etc/ssh/ssh_config
Run Code Online (Sandbox Code Playgroud)
然后我可以让主将整个内容推送到我们的 git 服务器并让所有配置版本化。
我知道 salt 可以处理状态,但我发现的一切都是将文件从 master 推送到 minion 以保持应有的状态,但我只想从所有服务器收集所有更新配置并自动对其进行版本控制.
有一个命令叫
salt \* cp.push /etc/ssh/ssh_config
Run Code Online (Sandbox Code Playgroud)
将配置文件推送到 /var/cache/salt/minion/minion01/files/etc/ssh/ssh_config,这看起来很完美,但我不知道如何在文件更改时告诉 salt 这样做(我们有很多一些服务器和许多版本的配置......)并且只在它发生变化时才获取它,所以我不必每五分钟左右获取所有文件(通过cron)。
任何人都知道如何用盐来做到这一点?
问候, 莫尔菲姆
我刚刚开始将 SaltStack 部署到我的服务器上。所以,我有以下文件/srv/salt/postfix/init.sls:
# Ensure postfix installed and set to autostart on boot
postfix:
pkg.installed: []
service.running:
- require:
- pkg: postfix
- enable: True
# Restart on change to main.cf or any of the *.db files
postfix.restart:
service.running:
- require:
- pkg: postfix
- name: postfix
- watch:
- file: "/etc/postfix/main.cf"
- file: "/etc/postfix/*.db"
# Without this, first watch above fails
/etc/postfix/main.cf:
file.exists: []
/etc/postfix/canonical:
file.managed:
- require:
- pkg: postfix
- source: salt://postfix/canonical
- template: jinja …Run Code Online (Sandbox Code Playgroud) 我有一组系统(在 AWS 中),它们都需要无密码的 SSH 访问。我已经编写了一个 Salt 状态,它复制了一个密钥对(我之前生成的公共/私有 SSH-RSA 密钥)并将适当的条目添加到用户的 authorized_keys 文件中。
现在,我将公钥和私钥存储为 Salt 状态中的文件,并在我的状态定义中获取它们。但是,我在salt.states.file.managed() 文档中注意到他们提供了一个示例,将私钥存储在 Pillar 中,然后用于contents_pillar获取私钥的内容。
是否有理由将我的私人(甚至公共)密钥内容存储在 Pillar 中,而不仅仅是州目录中的文件?我不确定将它放在那里是否有安全优势,因为无论如何内容最终都会出现在每个系统上。我已经将 Pillar 用于其他一些用途,但不确定是否有很好的案例可以在这里使用它。
root@I-Kod:/home/i-kod/Desktop/ass1# salt '*' network.ip_addrs
{
"I-Kod": [
"10.0.1.215"
]
}
{
"neha-HP-Pavilion-15-Notebook-PC": [
"10.0.0.231"
]
}
{
"Pavilion": [
"10.0.1.214"
]
}
{
"Pavilion": [
"10.0.1.214"
]
Run Code Online (Sandbox Code Playgroud)
}
我使用 salt.modules.network 来查找私有 IP 地址,但我没有找到如何使用 salt-master 从 minions 获取公共 IP 地址。
http://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.network.html
我使用了这个文档。我需要公共 IP 来确定 salt 是否正常工作。
正如标题所述,如果我使用bootstrap.sh脚本安装 SaltStack(Master 和 Minion),我该如何升级它们?
从表面上看,我需要能够在目标节点上安装一些软件守护程序才能使这些东西正常工作。如果我不能这样做(例如 Amazon RDS 实例),我有哪些选择?
同样,Ansible 似乎完全基于 SSH。这可以用来配置RDS吗?
感谢您的反馈——讨论让我在这里提出了一个更有针对性的问题:https : //serverfault.com/questions/588237/whats-a-good-cm-tool-for-managing-a-cloud-cluster-组合-多元化-资源-ac
几周以来,我们使用 SaltStack 进行配置管理。
如何处理分布的具体位置systemctl?
/bin/systemctl/usr/bin/systemctl目前我在 sudoers 文件中添加了两行:
etc_sudoers:
file.blockreplace:
- name: /etc/sudoers
- marker_start: "# START managed etc_sudoers -DO-NOT-EDIT-"
- marker_end: "# END managed zone etc_sudoers --"
- content: |
some_user ALL = NOPASSWD: /bin/systemctl restart apache2
some_user ALL = NOPASSWD: /usr/bin/systemctl restart apache2
{% endfor %}
- append_if_not_found: True
- backup: '.bak'
- show_changes: True
Run Code Online (Sandbox Code Playgroud)
....有没有更简单的解决方案?
有没有一种简单的方法来计算匹配返回的仆从数量,例如:
salt -C 'G@ec2_roles:test' match.count
Run Code Online (Sandbox Code Playgroud) 我想执行这个状态:
backup_log_readable:
acl.present:
- name: /var/log/backup
- acl_type: user
- acl_name: monitor
- perms: rx
- recurse: True
Run Code Online (Sandbox Code Playgroud)
但这只有在/var/log/backup存在时才会发生。
如何在盐中做到这样的条件?