我正在使用New Relic监视我的Salt托管的EC2服务器,我试图在newrelic-sysmond confic文件中插入"hostname = minion-name",因此它们显示在New Relic的仪表板中,具有可重新调整的名称,而不是EC2默认为"ip-123-133 ......".
我使用salt-cloud旋转我的实例,然后应用以下状态(通过顶层文件)以运行New Relic sysmond:
newrelic-repo:
pkg:
- installed
- require:
- pkgrepo: <my private repo defined elsewhere, just convenient rpm storage>
newrelic-sysmond:
pkg:
- installed
- require:
- pkg: newrelic-repo
service:
- running
- watch:
- file: /etc/newrelic/nrsysmond.cfg
/etc/newrelic/nrsysmond.cfg:
file.managed:
- source: salt://newrelic/nrsysmond.cfg
- user: newrelic
- mode: 744
- require:
- pkg: newrelic-sysmond
Run Code Online (Sandbox Code Playgroud)
关键是:/etc/newrelic/nrsysmond.cfg托管文件是一个带有我个人帐户密钥的版本,New Relic设置所需,所以我的所有机器都是一样的.
有没有办法让我hostname=my_placeholder在那个文件中有类似的东西,然后在我的sls配置中,以便当状态被应用my_placeholder成为奴才名称?
通过states.file doc(http://docs.saltstack.com/ref/states/all/salt.states.file.html)挖掘我觉得这是可能的,但我缺少一些基础知识来计算它因为我刚刚开始用盐.主要是我认为我只需要一个关于如何引用包含minion名称的变量/ grain的方式,以及正在使用的默认值/上下文的示例.
我有关于盐中变量的问题.我试图使用if语句用salt创建更复杂的状态.
工作示例:
{% set old_stable = salt['cmd.run']('cd /home/project_name && ls -t|grep 2|grep -v tar.gz|tail -n +2|head -n 1') %}
{% set time_date = salt['cmd.run']('date +%Y%m%d%H%M') %}
{% if salt['cmd.run']('ls -lt /home/project_name/ | wc -l') == 2 %}
<STATE>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
所以,问题是:我可以将"/ home/project_name /"定义为像{{old_stable}}这样的变量放在文件顶部
在if语句中插入变量不起作用
示例(不工作)
{% set project = '/home/project_name' %}
{% if salt['cmd.run']('ls -lt {{ project }}') | wc -l') == 2 %}
<STATE>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
我的代码是
{% set project = 'test_web_tool' %}
{% if salt['cmd.run']('ls -lt …Run Code Online (Sandbox Code Playgroud) 找不到这个写的。我想:
pip.install:
- requirements: /path/to/requirements.txt
Run Code Online (Sandbox Code Playgroud)
但我收到错误
ID pip.install in SLS python.python-pip is not a dictionary
Run Code Online (Sandbox Code Playgroud)
许多其他方法包括 virtualenvs,但我不想使用 virtualenv 来执行此操作,因为它用于虚拟机,所以没有意义。
我需要使用
pip.installed
Run Code Online (Sandbox Code Playgroud)
在盐中起作用并传递参数
env_vars
Run Code Online (Sandbox Code Playgroud)
具有多个参数,这些参数最终应呈现为python字典。可以有一个参数,并且该参数期望的是字典以外类型的参数,那么我可以像这样传递它:
pip.installed:
- env_vars: my_var
Run Code Online (Sandbox Code Playgroud)
但是我需要通过一个命令,我不确定该怎么做。
应该是这样的构造:
pip.installed:
- env_vars:
- my_var1: var_value
- my_var2: var_value2
Run Code Online (Sandbox Code Playgroud)
我应该如何检查我的配置是否真正呈现为正确的形式?
我可以使用python api运行我的状态吗?
salt -N'test_server'state.sls django这将在我的测试小兵中安装django
我可以在python脚本中做这样的事情吗?
import salt.client as client
c = client.LocalClient()
c.cmd('test_server','django',expr_form='nodegroup',pillar={'status':'TEST'})
Run Code Online (Sandbox Code Playgroud) 假设我在盐主人身上my-minion,假设我知道特定盐奴隶的名字,我怎样才能将特定目录/my-directory从salt-minion 复制到主人?
是否可以在Saltsack中执行相同的操作,但是通过嵌入式功能(没有PowerShell解决方法)?
installation:
cmd.run:
- name: ./installation_script
wait for installation:
cmd.run:
- name: powershell -command "Start-Sleep 10"
- unless: powershell -command "Test-Path @('/path/to/file/to/appear')"
Run Code Online (Sandbox Code Playgroud) 状态file.managed 具有 defaults和context用于模板渲染的选项。两者都提供模板变量的上下文。它们之间有什么区别?
通过使用下面的文件,我只能得到'PHP 5.3.10-1ubuntu3.8'.我至少需要PHP 5.4,并且非常喜欢php 5.5.
谁能帮我吗?我一直在寻找几个小时,似乎这不是一个被谈论很多的话题.
提前致谢.
php.sls
php5-fpm:
pkg:
- installed
service.running:
- enable: True
- watch:
- file: /etc/php5/fpm/pool.d/www.conf
- require:
- pkg: php5-fpm
- pkg: php5-mcrypt
- pkg: php5-curl
- pkg: php5-mysql
- pkg: php5-cli
file.managed:
- name: /etc/php5/fpm/pool.d/www.conf
- source: salt://packages/php/www.conf
- user: root
- group: root
- mode: '0640'
- require:
- pkg: php5-fpm
Run Code Online (Sandbox Code Playgroud) salt-stack ×10
python ×3
yaml ×2
amazon-ec2 ×1
autocomplete ×1
devops ×1
dictionary ×1
managed ×1
newrelic ×1
php ×1
powershell ×1
vagrant ×1
variables ×1