sed*_*rep 6 shell saltstack jinja
无法从cmd.run我的 Salt State分配输出。即使load_avgminion 中的 并不真正等于或超出 ,条件也始终返回 true threshold。我还在配置中包含了我尝试过的东西。
# {% set load_avg = salt['cmd.run']('uptime | sed "s/.*load average: //" | cut -d " " -f2 | cut -d . -f1') %} # Not working
# {% set load_avg = salt['cmd.run']('/bin/sh -c "uptime | sed \"s/.*load average: //\" | cut -d \" \" -f2 | cut -d . -f1"') %} # Not working
# {% set load_avg = salt['cmd.run']('echo 0') %} # Not working
# {% set load_avg = salt['cmd.shell']('uptime | sed "s/.*load average: //" | cut -d " " -f2 | cut -d . -f1') %} # Not working
# {% set load_avg = 0 %} # Working. Output: Load average is normal message
{% set load_avg = 6 %} # Working: Output: Load average is HIGH message
{% set threshold = 5 %}
check_load_avg:
cmd.run:
{% if load_avg >= threshold %}
- name: echo 'Load average is HIGH. load_avg={{ load_avg }}, threshold={{ threshold }}'
{% else %}
- name: echo 'Load average is normal. load_avg={{ load_avg }}, threshold={{ threshold }}'
{% endif %}
Run Code Online (Sandbox Code Playgroud)
cmd.run在 CLI 中运行[ec2-user@ip-10-0-1-48 hello]$ sudo salt '*' cmd.run 'uptime | sed "s/.*load average: //" | cut -d " " -f1 | cut -d . -f1'
ip-10-0-1-48.ec2.internal:
0
[ec2-user@ip-10-0-1-48 hello]$ sudo salt '*' cmd.run 'uptime | sed "s/.*load average: //" | cut -d " " -f1 | cut -d . -f1'
ip-10-0-1-48.ec2.internal:
4
[ec2-user@ip-10-0-1-48 hello]$
Run Code Online (Sandbox Code Playgroud)
[ec2-user@ip-10-0-1-48 hello]$ salt --version
salt 2017.7.2 (Nitrogen)
[ec2-user@ip-10-0-1-48 hello]$ uname -a
Linux ip-10-0-1-48 4.9.51-10.52.amzn1.x86_64 #1 SMP Fri Sep 29 01:16:19 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[ec2-user@ip-10-0-1-48 hello]$
Run Code Online (Sandbox Code Playgroud)
小智 9
我认为主要问题是load_avgfromcmd不是数字而是字符串,您必须对其进行转换。像这样使用load_avg|float(甚至load_avg|int)是有效的:
{% set load_avg = salt['cmd.shell']('uptime | sed "s/.*load average: //" | cut -d " " -f2 | cut -d . -f1') %}
{% set threshold = 1 %}
check_load_avg:
cmd.run:
{% if load_avg|float >= threshold %}
- name: echo 'Load average is HIGH. load_avg={{ load_avg }}, threshold={{ threshold }}'
{% else %}
- name: echo 'Load average is normal. load_avg={{ load_avg }}, threshold={{ threshold }}'
{% endif %}
Run Code Online (Sandbox Code Playgroud)
输出:
----------
ID: check_load_avg
Function: cmd.run
Name: echo 'Load average is HIGH. load_avg=1, threshold=1'
Result: True
Comment: Command "echo 'Load average is HIGH. load_avg=1, threshold=1'" run
Started: 10:19:42.238409
Duration: 9.731 ms
Changes:
----------
pid:
5976
retcode:
0
stderr:
stdout:
Load average is HIGH. load_avg=1, threshold=1
Run Code Online (Sandbox Code Playgroud)
与threshold=5:
----------
ID: check_load_avg
Function: cmd.run
Name: echo 'Load average is normal. load_avg=1, threshold=5'
Result: True
Comment: Command "echo 'Load average is normal. load_avg=1, threshold=5'" run
Started: 10:20:31.846864
Duration: 9.361 ms
Changes:
----------
pid:
6184
retcode:
0
stderr:
stdout:
Load average is normal. load_avg=1, threshold=5
Run Code Online (Sandbox Code Playgroud)
编辑:
您可以直接使用 salt 模块获取平均负载status.loadavg:
# salt-call status.loadavg
local:
----------
1-min:
0.12
15-min:
0.31
5-min:
0.25
Run Code Online (Sandbox Code Playgroud)
在金贾:
{% set load_avg = salt['status.loadavg']()['1-min'] %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14697 次 |
| 最近记录: |