我正在用SaltStack弄湿我的脚.我已经完成了我的第一个状态(带有静态配置的Vim安装程序),而我正在开发第二个状态.
不幸的是,我希望我的状态安装的应用程序没有Ubuntu软件包.我将不得不自己构建应用程序.使用Salt进行"configure-make-install"类型安装是否有"最佳实践"? 或者我应该只使用cmd?
特别是,如果我是手工做的话,我会做一些事情:
wget -c http://example.com/foo-3.4.3.tar.gz
tar xzf foo-3.4.3.tar.gz
cd foo-3.4.3
./configure --prefix=$PREFIX && make && make install
Run Code Online (Sandbox Code Playgroud) 我正在写一些盐栈公式,它将安装tomcat包.但安装后我必须在/ etc/default/tomcat7文件中设置JAVA_HOME.有没有选择设置JAVA_HOME?或者是否有任何选项可以在环境变量中修改或添加JAVA_HOME(即在.bashrc或.profile文件中)?
我的pillar.example文件将包含以下详细信息:
tomcat_version: 7
java_home: '/usr/lib/jvm/java-7-oracle'
Run Code Online (Sandbox Code Playgroud) 我有一个用于构建本地存储库的宏debmirror.
这是代码片段:
{%- set gnupghome = kwargs.pop('gnupghome', '/root/.gnupg') %}
{%- set env = { 'GNUPGHOME': gnupghome } %}
keyring_import:
cmd:
- run
{%- if 'keyid' in kwargs and 'keyserver' in kwargs %}
{%- set keyid = kwargs.pop('keyid') %}
{%- set keyserver = kwargs.pop('keyserver') %}
- name: 'gpg --no-default-keyring --keyring {{ gnupghome }}/trustedkeys.gpg --keyserver {{ keyserver }} --recv-keys {{ keyid }}'
{%- elif 'key_url' in kwargs %}
{%- set key_url = kwargs.pop('key_url') %}
- name: 'wget -q -O- "{{ …Run Code Online (Sandbox Code Playgroud) 我正在使用jinja模板生成salt的状态文件.我添加了一些条件,并想表达:
if A or B.但是,似乎我无法让任何逻辑运算符工作.
它不喜欢||, |, &&(我理解这里不适用),但也没有and, or,甚至没有分组(),这应该根据jinja文档工作.我在盐文档中找不到任何关于此的信息,但我觉得我必须犯一些愚蠢的错误?
我的代码:
{% if grains['configvar'] == 'value' OR grains['configvar'] == 'some other value' %}
Run Code Online (Sandbox Code Playgroud)
错误:
Data failed to compile:
Rendering SLS 'base:mystate' failed: Jinja syntax error: expected token 'end of statement block', got 'OR'; line 3
Run Code Online (Sandbox Code Playgroud) 我想做那样的事情:
如果文件A存在或没有符号链接B,我想创建一个符号链接B - > A.
现在我有:
B:
file:
- symlink:
- target: A
- exists:
- name: A
Run Code Online (Sandbox Code Playgroud)
但这很糟糕,它不是我想要的东西.我怎样才能在盐中取这个简单的东西?
(这是我在盐用户组FWIW上提出的问题的副本)
我需要编写一个状态来安装一些Windows服务器功能,重新启动minion,然后再安装一些软件.似乎所有的部分都在那里(cmd.wait,system.reboot),但我无法连接点.
例如,我有一个"webserver"状态,应该在一台机器上安装IIS.它需要启用一些服务器功能,重启(因为Windows),然后继续.我们使用名为"website"的自定义模块执行此操作,该模块允许我安装网站,另一个模块用于安装应用程序池.我们的状态文件看起来像这样:
my_website:
website.installed:
- name: example.com
- version: alpha-1.0.0
- type: Website
- bindings:
- hostheader: localhost
- port: 1234
- installdir: c:\\wwwroot\\example.com
- apppool: static
- require:
- sls: serverstate.webserver
- sls: apppool.static
Run Code Online (Sandbox Code Playgroud)
除了我们需要在"serverstate.webserver"和"apppool.static"要求之间重新启动之外,上述工作非常好.目前,状态失败,我们手动重启,然后重新运行状态,它的工作原理.当然,我们想省略手动重启步骤.
是否有解决此类问题的常见模式?
我在支柱文档中看到有两种方法可以在SLS中引用支柱数据.
{{ pillar['foo'] }}
Run Code Online (Sandbox Code Playgroud)
和
{{ salt['pillar.get']('foo') }}
Run Code Online (Sandbox Code Playgroud)
pillar.get方法更好地处理嵌套的柱状数据,并允许在柱子中找不到数据时指定默认值.但它有点打字,我发现第一种方法更容易阅读.
因此,最好的做法是始终使用pillar.get方法或使用柱['foo']可接受,特别是在处理非嵌套柱数据时.
我怀疑总是使用pillar.get方法是最好的,因为在处理嵌套的柱状数据时使用它或者你想设置默认值是有意义的.并且最好只为您提供一种方法.但我想得到其他人的想法.
Thansk,乔
我在homelab中使用Saltstack,我经常发现自己在测试时检查了一些略微破坏的规则.我希望能够在本地和Jenkins实例上检查它们的有效性,否则它们是lint它们,但我找不到任何关于我如何这样做的文档.有什么我想念的吗?
鉴于使用saltstack可以实现灵活的jinja模板,并且将众多支柱变量合并到模板中; 我发现在推出它之前能够让盐"渲染"完整的sl到屏幕是有用的.有办法做到这一点吗?
有没有办法加入两个支柱文件?
我有一个用户支柱.它是这样的:
users:
joe:
sudouser: True
jack:
sudouser: False
Run Code Online (Sandbox Code Playgroud)
现在我需要为某些服务器设置不同的用户(即将一些用户添加到一台服务器).所以我创建了新的支柱文件:
users:
new_user:
sudouser: True
Run Code Online (Sandbox Code Playgroud)
并将此topfile分配给服务器.但因为键是相同的,它会覆盖第一个键.如果我改变它,我需要更新状态文件(我真的不想要).我该如何处理这个问题?有没有办法告诉盐"合并"文件?