我们的saltstack基于主机名(webN.,dbN.等).但对于各种事情我需要那些服务器的IP.现在我把它们存放在支柱中,但我需要同步的地方数量增加了.
我试图使用publish + network.ip_addrs,但这有点糟糕,因为它需要完成整个salt-roundtrip才能解析主机名.它也取决于仆从的反应.因此,我正在寻找一种方法将模板中的主机名解析为IP.
我假设我可以为它编写一个模块,但我的python技能非常有限.
我们有两个不同的环境,开发和生产,由一个Salt服务器管理.像这样的东西:
base:
'dev-*':
- users-dev
'prod-*':
- users-prod
Run Code Online (Sandbox Code Playgroud)
user-dev和users-prod状态是几乎相同的,就像这样:
{% for user, data in pillar['users-dev'].items() %}
{{ user }}-user:
user.present:
< ...something... >
{{ user }}_ssh_auth:
ssh_auth.present:
< ...something... >
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我们不想复制代码,所以我们最初的想法是做这样的事情:
{% users = pillar['users'].items() %}
include:
- users-common
Run Code Online (Sandbox Code Playgroud)
然后引用usersin users-common,但这不起作用,因为正确的Jinja语法是,set users = pillar['users'].items()并且这不打算跨盐状态包括.
那么,问题是如何正确地做到这一点?
当我构建一个新服务器时,我在使用ssh通过网络进行初始连接之前从控制台收集ssh密钥指纹.我希望能够在使用盐时获得相同的带外保证.
使用salt,当新的minion启动时,它会生成一个RSA密钥并向salt-master提交请求.我可以salt-key -p <newminion>用来查看整个键并将其与minion进行比较/etc/salt/pki/minion/minion.pub,但我宁愿使用salt-key -f <newminion>显示的较短指纹.
如何让minion显示自己的密钥指纹?仆从没有salt-key命令......
我试图通过Saltstack调用配置命令.如果命令失败,那么我得到状态失败,我不希望它(命令的重新编码无关紧要).
目前我有以下解决方法:
Run something:
cmd.run:
- name: command_which_can_fail || true
Run Code Online (Sandbox Code Playgroud)
有没有办法使用salt功能使这种状态忽略retcode?或者我可以从日志中排除这种状态?
我已经搜索了文档,但无法找到令人满意的答案.是否有可能获得像salt'machine'state.list这样的东西.获得可能被应用的所有州?
我知道有高状态/顶部/低状态,但如果我想搜索特定状态,我总是需要手动浏览文件夹结构.
我有盐配方.在服务器上我正在使用wkhtmltopdf工具.Ubuntu repo有这个工具,但它有一个旧版本.我想使用最新版本.
我正在做以下操作以手动安装在minions上.
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
$ sudo apt-get install fontconfig libfontenc1 libjpeg-turbo8 libxfont1 x11-common xfonts-75dpi xfonts-base xfonts-encodings xfonts-utils libxrender1
$ sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Run Code Online (Sandbox Code Playgroud)
我能做cmd.run所有这些命令.有没有更好的方法来做这些步骤?
我正在使用 Salt (SaltStack) 在 Ubuntu 18.04 中安装软件包。例如,我想为 docker安装一个公式。当我应用docker状态时,出现无法安装包的错误,因为公式中使用的包存储库未签名。
ID: docker package
Function: pkg.installed
Name: docker-engine
Result: False
Comment: An error was encountered while installing package(s): E: Failed to fetch https://apt.dockerproject.org/repo/dists/ubuntu-bionic/InRelease 403 Forbidden [IP: 13.33.98.216 443]
E: The repository 'https://apt.dockerproject.org/repo ubuntu-bionic InRelease' is not signed.
Run Code Online (Sandbox Code Playgroud)
当我使用另一个公式时也会发生同样的情况。
我发现如果我通过命令行手动安装一个包,我会使用一个--allow-unauthenticated选项。
但是在使用 Salt 和 salt-formulas 时解决这个问题的方法是什么?如何从未签名的存储库安装软件包?
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-Api,所以我创建了一个salt-api.conf在/etc/salt/master.d/如下:
external_auth:
pam:
saltuser:
- .*
- '@wheel' # to allow access to all wheel modules
- '@runner' # to allow access to all runner modules
- '@jobs' # to allow access to the jobs runner and/or wheel module
rest_cherrypy:
port: 8000
ssl_crt: /etc/pki/tls/certs/localhost.crt
ssl_key: /etc/pki/tls/certs/localhost.key
disable_ssl: True
webhook_disable_auth: True
webhook_url: /hook
Run Code Online (Sandbox Code Playgroud)
用户输入/etc/salt/master设置为user: root.因此,当我尝试使用pam本地身份验证时,它可以工作:
sudo salt -a pam '*' test.ping
username: saltuser
password: saltuser
minion:
True
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用curl时,它会失败:
curl …Run Code Online (Sandbox Code Playgroud) salt-stack ×10
python ×2
deb ×1
git ×1
hash ×1
java ×1
jinja2 ×1
md5 ×1
ubuntu-14.04 ×1
web-services ×1