你在码头工人的容器里经营一个盐奴吗?
或者你只在运行docker容器的服务器上运行一个minion?
我们目前不使用盐,但希望将来使用它.
我们不确定未来如何布局我们的基础设施.
如果您不理解我的问题,请发表评论:-)
salt.states.file.managed需要source_hash作为参数来验证下载的文件.这阻止我使用file.managed我无法控制的在线服务器上的文件.该文件也会定期更改.我的配置看起来像这样.
download_stuff:
file.managed:
- name: localfile.tar.gz
- source: http://someserver.net/onlinefile.tar.gz
- source_hash: ???
Run Code Online (Sandbox Code Playgroud)
我不希望使用cmd.run具有Curl或wget因为这将始终下载该文件,甚至当它已经在本地机器上.
我想知道下面的选项之一是否可能/存在:
http://md5service.net?url={url-to-file}.source_hash某种方式遗漏?我有一个具有salt状态的存储库,用于在云中配置我的服务器群集.随着时间的推移,我继续在.sls这个回购中添加更多状态 - 文件.现在我开始挣扎什么是什么,什么在哪里.
我想知道是否有一些软件实用程序/软件包将生成我的状态存储库中的文档,最好是作为html页面,以便我可以浏览它们并查看它们的相互依赖性.
更新:
状态sls文件看起来像这样:
include:
- states.core.pip
virtualenv:
pip.installed:
- require:
- sls: states.core.pip
virtualenvwrapper:
pip.installed:
- require:
- sls: states.core.pip
Run Code Online (Sandbox Code Playgroud)
还有另一个例子:
{% set user_home = '/home/username' %}
my_executable_virtualenv:
virtualenv.managed:
- name: {{ user_home }}/.virtualenvs/my_executable_virtualenv
- user: username
- system_site_packages: False
- pip_pkgs:
- requests
- numpy
- pip_upgrade: True
- require:
- sls: states.core
my_executable_supervisor_entry:
file.managed:
- name: /etc/supervisor/conf.d/my_executable.conf
- source: salt://files/supervisor_config/my_executable.conf
- user: username
- group: username
- mode: 644
- makedirs: False
- …Run Code Online (Sandbox Code Playgroud) 在Saltstack中,我有以下用例:
有一个状态redis.sls可以包含在其他州.redis.sls的结果应该以不同的方式配置,具体取决于包含redis.sls的状态.
例如:
redis.sls:
--------
{% if x==1 %}
#do something
{% else %}
#do something else
{% endif %}
state_a.sls
-----------
{% set x=1 %}
include:
- redis
state_b.sls
-----------
{% set x=2 %}
include:
- redis
Run Code Online (Sandbox Code Playgroud)
但*在*state_a*和*state_b*中无法识别x
我也尝试用这样的东西设置支柱值:
{{salt['pillar.set']('x', 1)}}
Run Code Online (Sandbox Code Playgroud)
但那也不起作用.
还有其他想法吗?
我想创建一个组和用户使用salt状态文件,但我不知道组,gid,用户,uid,sshkey,直到我需要执行我想作为参数传入的salt状态文件.
我已经阅读了有关Pillar创建变量的内容.如何在执行前创建支柱?
/srv/salt/group.sls:
{{ name }}:
group.present:
- gid: {{ gid }}
- system: True
Run Code Online (Sandbox Code Playgroud)
命令行:
salt 'SaltStack-01' state.sls group name=awesome gid=123456
Run Code Online (Sandbox Code Playgroud) 我一直在尝试在/ etc/modules文件中找到一个模式(bcm2708_wdog),如果没有,则将其添加到底部.每次我尝试这个,我得到"SLS狗的ID狗不是字典".我不知道这是什么意思.这是文件:
dog:
- file.replace:
- name: /etc/modules
- pattern: 'bcm2708_wdog'
- append_if_not_found: True
Run Code Online (Sandbox Code Playgroud) 我有一个包含IP地址的字符串列表.我想为每个人添加一个端口号.在python我会这样做:
ip_list = [(ip + ":" + port) for ip in ip_list]
Run Code Online (Sandbox Code Playgroud)
......但Jinja不支持列表理解.目前,我通过一次建立一个新项目列表来解决问题:
{%- set ip_list = magic() %}
{%- set new_ip_list = [] %}
{%- for ip in ip_list %}
{%- do new_ip_list.append(ip + ":" + port) %}
{%- endfor %}
Run Code Online (Sandbox Code Playgroud)
这在模板中间是丑陋和恼人的,感觉应该有更好的方法来完成工作.优选地是单衬里.
虽然我知道这可以通过自定义过滤器来完成,但我正在为我没有编写的软件(saltstack)提供模板,所以它们(据我所知)对我来说是不可用的.
我们在salt管理的minions上运行了几个Python虚拟环境.
系统的名称由此架构构建:
project_customer_stage
Run Code Online (Sandbox Code Playgroud)
例:
supercms_favoritcustomer_p
Run Code Online (Sandbox Code Playgroud)
支柱数据:
systems:
- customer: favoritcustomer
project: supercms
stage: p
- customer: favoritcustomer
project: supercms
stage: q
Run Code Online (Sandbox Code Playgroud)
对于每个virtualenv我们有一个linux用户.到目前为止,我们像这样计算像"home"这样的值:
{% for system in pillar.systems %}
{% set system_name = system.project + '_' + system.customer + '_' + system.stage %}
{% set system_home = '/home/' + system_name %}
...
Run Code Online (Sandbox Code Playgroud)
但这是多余的.
我们怎么能避免复制+粘贴{% set system_home = ...%}?
我就像面向对象编程的工作方式:
在盐中你有YAML和模板......两件好事.但就我而言,OOP会很好.
在设置了盐主人和一个小兵后,我能够接受主人的钥匙.跑步sudo salt-key -L表明它被接受了.但是,当我尝试test.ping命令时,主人显示:
Minion没有回来.[没有反应]
在主服务器上,日志显示:
[错误] [1642]来自minion-01的身份验证尝试失败,挂起的公钥不匹配.这可能是试图破坏Salt集群.
在小兵身上,日志显示:
[错误] [1113] Salt Master已缓存此节点的公钥,此盐爪将在尝试重新验证之前等待10秒
我尝试断开连接并重新连接,包括重新启动两个盒子.
我们如何构建salt状态树,以便能够highstate在主机上运行的大量运行中运行一个virtualenv?
我们使用面料为开发和生产运行virtualenvs.我们想从面料换成盐.一切都很好,除了highstate需要太长时间.我们在一个主机上有100多个virtualenvs,并且caling highstate将更新100+ virtualenvs.
salt-stack ×10
python ×3
architecture ×1
docker ×1
hash ×1
jinja2 ×1
md5 ×1
virtualenv ×1
web-services ×1