私がやりたいことは、ホスト名とvlumeの50%以上を得るためにAnsibleでawkを使用することです。
その後、次のコマンドを実行してボリュームを50%以上に設定できます。
ansible-playbook pb-servermgmt_runcommand_goce.yml --extra-vars "hostlist=test01 command='df -hlT -x tmpfs -x devtmpfs -x iso9660 --total'" | awk '0+$6 >= 50 {print}'
"/dev/mapper/rhel-root xfs 50G 35G 16G 70% /",
次のコマンドを実行してサーバー名を表示できます。
ansible-playbook pb-servermgmt_runcommand_goce.yml --extra-vars "hostlist=test01 command='df -hlT -x tmpfs -x devtmpfs -x iso9660 --total'" | awk '/ok/ {print}'
ok: [test01] => {
test01 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
私は次のような出力が欲しい
ok: [test01] => {
"/dev/mapper/rhel-root xfs 50G 35G 16G 70% /",
私はそれを見ていますが、&&
書き込み構文を取得できませんでした。どんなアイデアがありますか?
答え1
尋ねる:「使用率が50%以上のホスト名とボリュームを取得します。」
答え:それよりもアッフィルタの使用コミュニティ、一般.jcコマンドの出力を解析します。登録コマンドの出力
- command: "{{ command }}"
register: out
そして変数宣言
my_df: "{{ out.stdout|community.general.jc('df') }}"
たとえば、次のスクリプトは
- hosts: "{{ hostlist }}"
vars:
my_df: "{{ out.stdout|community.general.jc('df') }}"
tasks:
- command: "{{ command }}"
register: out
- debug:
var: my_df
与えられた(要約)
shell> ansible-playbook pb.yml -e "hostlist=test01 command='df -hlT --total'"
PLAY [test01] *************************************************************************************
TASK [command] ************************************************************************************
changed: [test01]
TASK [debug] **************************************************************************************
ok: [test01] =>
my_df:
- available: 1
filesystem: devtmpfs
mounted_on: /dev
size: 1.9G
type: devtmpfs
use_percent: 0
used: 0
- available: 1
filesystem: tmpfs
mounted_on: /dev/shm
size: 1.9G
type: tmpfs
use_percent: 0
used: 0
- available: 1
filesystem: tmpfs
mounted_on: /run
size: 1.9G
type: tmpfs
use_percent: 11
used: 193
- available: 1
filesystem: tmpfs
mounted_on: /sys/fs/cgroup
size: 1.9G
type: tmpfs
use_percent: 0
used: 0
- available: 2
filesystem: /dev/mapper/cl-root
mounted_on: /
size: 18G
type: xfs
use_percent: 86
used: 15
- available: 820
filesystem: /dev/sda2
mounted_on: /boot
size: 1014M
type: xfs
use_percent: 20
used: 195
- available: 592
filesystem: /dev/sda1
mounted_on: /boot/efi
size: 599M
type: vfat
use_percent: 2
used: 7
- available: 374
filesystem: tmpfs
mounted_on: /run/user/1000
size: 374M
type: tmpfs
use_percent: 0
used: 0
- available: 12
filesystem: total
mounted_on: '-'
size: 27G
type: '-'
use_percent: 58
used: 16
...
その後、このリストを使用できます。my_dfそして選ぶまたは拒否するあなたは何が欲しいですか?バラより振り子テスト。たとえば、すべての種類のファイルシステムを選択します。xfs利用率が50%を超えました。
my_df_xfs_50: "{{ my_df|selectattr('type', '==', 'xfs')|
selectattr('use_percent', '>', 50)}}"
、またはファイルシステムの選択/dev/mapper/cl-root
my_df_root: "{{ my_df|selectattr('filesystem', '==', '/dev/mapper/cl-root') }}"
この例では、両方とも同じ結果を提供します。
my_df_xfs_50:
- available: 2
filesystem: /dev/mapper/cl-root
mounted_on: /
size: 18G
type: xfs
use_percent: 86
used: 15
my_df_root:
- available: 2
filesystem: /dev/mapper/cl-root
mounted_on: /
size: 18G
type: xfs
use_percent: 86
used: 15
50%を超える使用量でホスト名とボリュームに書き込む
次の辞書を宣言します。
report: "{{ dict(ansible_play_hosts|
zip(ansible_play_hosts|
map('extract', hostvars, 'my_df_xfs_50'))) }}"
デバッグ
- set_fact:
my_df_xfs_50: "{{ my_df_xfs_50 }}"
- debug:
msg: |
{{ report }}
run_once: true
与えられた
test01:
- available: 2
filesystem: /dev/mapper/cl-root
mounted_on: /
size: 18G
type: xfs
use_percent: 86
used: 15
望むより:
尋ねる:「設定モジュールを介して可能な事実からこの情報を取得することはすでに可能ではありませんか?」
答え:はい。コマンドではなくdf、利用できますansible_mountsコレクター設定。このリストは使用率を提供しません。リストを更新するには、このプロパティを使用します。その後、次のスクリプト
shell> cat pb.yml
- hosts: "{{ hostlist }}"
vars:
ansible_mounts_update_str: |
{% for i in ansible_mounts %}
{% set use_percent = 100 - i.size_available / i.size_total * 100 %}
- {{ i|combine({'use_percent': use_percent|round|int}) }}
{% endfor %}
ansible_mounts_update: "{{ ansible_mounts_update_str|from_yaml }}"
my_df_xfs_50: "{{ ansible_mounts_update|
selectattr('fstype', '==', 'xfs')|
selectattr('use_percent', '>', 50) }}"
my_df_root: "{{ ansible_mounts_update|
selectattr('device', '==', '/dev/mapper/cl-root') }}"
report: "{{ dict(ansible_play_hosts|
zip(ansible_play_hosts|
map('extract', hostvars, 'my_df_xfs_50'))) }}"
tasks:
- setup:
gather_subset: mounts
- debug:
var: ansible_mounts
- debug:
var: ansible_mounts_update
- debug:
var: my_df_xfs_50
- debug:
var: my_df_root
- set_fact:
my_df_xfs_50: "{{ my_df_xfs_50 }}"
- debug:
msg: |
{{ report }}
run_once: true
(要約)同じ結果を提供します。
shell> ansible-playbook pb.yml -e "hostlist=test01"
PLAY [test01] *************************************************************************************
TASK [setup] **************************************************************************************
ok: [test01]
...
TASK [debug] **************************************************************************************
ok: [test01] =>
my_df_xfs_50:
- block_available: 617954
block_size: 4096
block_total: 4561408
block_used: 3943454
device: /dev/mapper/cl-root
fstype: xfs
inode_available: 4944209
inode_total: 5351696
inode_used: 407487
mount: /
options: rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota
size_available: 2531139584
size_total: 18683527168
use_percent: 86
uuid: 2cb4d983-108f-40f3-bc22-8afae8edc80a
TASK [debug] **************************************************************************************
ok: [test01] =>
my_df_root:
- block_available: 617954
block_size: 4096
block_total: 4561408
block_used: 3943454
device: /dev/mapper/cl-root
fstype: xfs
inode_available: 4944209
inode_total: 5351696
inode_used: 407487
mount: /
options: rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota
size_available: 2531139584
size_total: 18683527168
use_percent: 86
uuid: 2cb4d983-108f-40f3-bc22-8afae8edc80a
TASK [set_fact] ***********************************************************************************
ok: [test01]
TASK [debug] **************************************************************************************
ok: [test01] =>
msg:
test01:
- block_available: 617954
block_size: 4096
block_total: 4561408
block_used: 3943454
device: /dev/mapper/cl-root
fstype: xfs
inode_available: 4944209
inode_total: 5351696
inode_used: 407487
mount: /
options: rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota
size_available: 2531139584
size_total: 18683527168
use_percent: 86
uuid: 2cb4d983-108f-40f3-bc22-8afae8edc80a
PLAY RECAP ****************************************************************************************
test01: ok=7 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0