#ansible
Вопрос:
Я хотел бы убедиться, что некоторые требования к ресурсам сервера выполнены или превышены с помощью Ansible, и создать шаблон для сравнения двух наборов данных:
# data
system_minimum_specs_required:
memfree_mb: 1000
equal: 1
less: 2
more: 3
# tasks
- name: Set server facts
set_fact:
check_name: Spec
system_minimum_specs:
memfree_mb: "{{ansible_facts.memfree_mb}}"
equal: 1
less: 1
more: 4
# Compare data
- set_fact:
"results_min": "{{results_min}} [{{ item }} is {{ (system_minimum_specs[item] | int >= system_minimum_specs_required[item] | int)|
ternary(true, false) | bool }}]"
loop: "{{ system_minimum_specs_required.keys()|sort }}"
- debug:
msg: "results_min[]: {{ results_min }}"
Это приводит к следующей отладке:
TASK [server_checks : set_fact] *********************************************************************************************************************************************************************************
ok: [node1.vozzytech.local] => (item=equal)
ok: [node1.vozzytech.local] => (item=less)
ok: [node1.vozzytech.local] => (item=memfree_mb)
ok: [node1.vozzytech.local] => (item=more)
TASK [server_checks : debug] ************************************************************************************************************************************************************************************
ok: [node1.vozzytech.local] => {
"msg": "results_min[]: [] [equal is True] [less is False] [memfree_mb is False] [more is True]"
}
Что я хотел бы попробовать сделать, так это создать словарь, содержащий следующие данные для отображения в шаблоне:
{
"memfree" : {
"condition" : 1000,
"actual" : 500,
"result" : false
},
"less" : {
"condition" : 2,
"actual" : 1,
"result" : false
},
"more" : {
"condition" : 3,
"actual" : 4,
"result" : true
}
}
Ответ №1:
- name: add a value to the dictionary
set_fact:
results: "{{
results | default ([])
[{
'name': item,
'required': system_minimum_specs_required[item]|int,
'actual': system_minimum_specs[item]|int,
'result' : ( system_minimum_specs[item]|int >= system_minimum_specs_required[item]|int )|ternary(true, false)|bool
}]
}}"
with_items: "{{ system_minimum_specs.keys()|sort }}"
- debug:
msg: "results_min[]: {{ results }}"
результаты в:
TASK [server_checks : debug] ************************************************************************************************************************************************************************************
ok: [node1.vozzytech.local] => {
"msg": "results_min[]: [{'name': 'equal', 'required': 1, 'actual': 1, 'result': True}, {'name': 'less', 'required': 2, 'actual': 1, 'result': False}, {'name': 'memfree_mb', 'required': 500, 'actual': 545, 'result': True}, {'name': 'more', 'required': 3, 'actual': 4, 'result': True}]"
}