我在创建ansible角色时遇到了问题。
我想在shell模块中使用awk通过Ansible注册变量。
当我通过终端使用它时,它工作:
inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2
但是当我想在Ansible角色中使用它时它不起作用。
name: Get info
shell: inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2
register: result
显示来自的信息
inxi -D
是
Drives: HDD Total Size: 53.7GB (2.0% used)
ID-1: /dev/vda model: N/A size: 53.7GB
ID-2: /dev/vdb model: N/A size: 0.0GB
我想提取有关硬盘使用情况的数据,例如2.0%
有人可以帮忙吗?
答案 0 :(得分:1)
这种方式可以正常使用
- name: Get informations about disk percentage
shell: >
inxi -D |
grep 'Total'|
sed -e 's/.*(\(.*\)\ .*/\1/'
register: result
- debug:
msg: "{{ result.stdout }}"
答案 1 :(得分:0)
尝试执行如下:
name: Get info
shell: inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2
register: result
并通过"{{ result.stdout }}"
答案 2 :(得分:0)
尝试一下:
---
- hosts: localhost
connection: local
tasks:
- name: test shell
shell: >
echo "Drives: HDD Total Size: 53.7GB (2.0% used)" | awk -F '[()]' '/Total Size:/ {split($2,a," "); print a[1]}'
register: result
- debug:
msg: "{{ result.stdout }}"
它应该打印如下:
"msg": "2.0%"
如果正常工作,只需用您的命令替换echo ...
:inxi -D | awk ...
注意shell: >
在yaml
中,多行字符串可以写成'文字块' (使用|
)或“折叠后的块”' (使用>
)。
还使用[()]
作为分隔符,将awk的使用改为一体化使用,这将获得括号内的内容。
答案 3 :(得分:0)
版本3.0中的inxi导出到json或xml:
inxi -Dxxx --output json --output-file print
'打印'是打印到标准输出,如果给出了完整的文件路径,它将导出到文件。
答案 4 :(得分:0)
我们只是找到了一个可行的愚蠢解决方法:
echo $(df -h /hadoop | awk 'NR==2 {print $4}')
第一种情况:
tasks:
- name: test shell
shell: echo $(inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2)
register: result