我在创建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%
有人能帮上忙吗?
发布于 2018-05-21 20:39:29
这种方式可以很好地工作
- name: Get informations about disk percentage
shell: >
inxi -D |
grep 'Total'|
sed -e 's/.*(\(.*\)\ .*/\1/'
register: result
- debug:
msg: "{{ result.stdout }}"发布于 2018-05-21 02:51:58
试一下这个:
---
- 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的用法,通过使用[()]作为分隔符来使用all in one,这将获得括号中的内容。
发布于 2018-05-21 01:31:43
尝试按如下方式执行:
name: Get info
shell: inxi -D | awk '/Total Size:/ {print $7}' | cut -d"(" -f2
register: result并通过"{{ result.stdout }}"访问该命令的输出
https://stackoverflow.com/questions/50437456
复制相似问题