私は複数のスイッチのiOSアップグレード用のプレイブックを書いていますが、フラッシュフリーチェックを除いてほとんどの部分が機能しています。基本的には、画像をコピーする前に、十分なフラッシュスペースがあるかどうかを確認したいと思います。
ファクトの収集モジュールを使用しようとしましたが、期待どおりに機能しません。
事実を収集することから私はこれを見ます:
"ansible_net_filesystems_info": {
"flash:": {
"spacefree_kb": 37492,
"spacetotal_kb": 56574
これは私がやりたいチェックです:
fail:
msg: 'This device does not have enough flash memory to proceed.'
when: "ansible_net_filesystems_info | json_query('*.spacefree_kb')|int < new_ios_filesize|int"
いくつかの調査を行った結果、jinja2テンプレートによって返される値はすべて文字列になるため、チェックが失敗することがわかりました。
リンクで提案されている解決策は、ansible2.7を使用しても機能しないようです。
次に、「dir」の結果をレジスターに格納してregex_searchを使用しようとしましたが、構文が正しくないようです。
(これに似ています:Ansible regex_findall複数の文字列)
"stdout_lines": [
[
"Directory of flash:/",
"",
" 2 -rwx 785 Jul 2 2019 15:39:05 +00:00 dhcp-snooping.db",
" 3 -rwx 1944 Jul 28 2018 20:05:20 +00:00 vlan.dat",
" 4 -rwx 3096 Jul 2 2019 01:03:26 +00:00 multiple-fs",
" 5 -rwx 1915 Jul 2 2019 01:03:26 +00:00 private-config.text",
" 7 -rwx 35800 Jul 2 2019 01:03:25 +00:00 config.text",
" 8 drwx 512 Apr 25 2015 00:03:16 +00:00 c2960s-universalk9-mz.150-2.SE7",
" 622 drwx 512 Apr 25 2015 00:03:17 +00:00 dc_profile_dir",
"",
"57931776 bytes total (38391808 bytes free)"
]
]
誰かがこの一見単純なタスクにいくつかの洞察を提供できますか?上記の例(または他の提案)の整数として「38391808」が必要です。私はansibleにかなり慣れていません。
前もって感謝します。
json_queryワイルドカード式はリストを返します。以下のタスク
- set_fact:
free_space: "{{ ansible_net_filesystems_info|
json_query('*.spacefree_kb') }}"
- debug:
var: free_space
リストを与える
"free_space": [
37492
]
これは整数に変換することも、整数と比較することもできません。これが問題の理由です。
解決策は簡単です。リストの最初の要素を取るだけで、条件が機能し始めます
- fail:
msg: 'This device does not have enough flash memory to proceed.'
when: ansible_net_filesystems_info|
json_query('*.spacefree_kb')|
first|
int < new_ios_filesize|int
さらに、json_queryは必要ありません。属性spacefree_kbは直接参照できます
- fail:
msg: 'This device does not have enough flash memory to proceed.'
when: ansible_net_filesystems_info['flash:'].spacefree_kb|
int < new_ios_filesize|int
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加