Я хотел бы получить значение на основе ключевого слова, упомянутого в файле yaml правил. Если ключевое слово в rules.yaml указано как ОБЖ, оно должно получить значение po_id, соответствующее той же подсети во входном файле и правилах yaml, а если ключевое слово ВРП, то оно должно получить значение pog_id, соответствующее той же подсети. в файле ввода и правил yaml. Ожидаемый результат, как показано ниже.
Input.yml
[
{
"po_id": "11155588779966",
"pog_id": "1115558871321649",
"subnetname": "DNS",
"netname": "Test1"
},
{
"po_id": "99996688778855",
"pog_id": "1115558812345",
"subnetname": "NTP",
"netname": "Test2"
},
{
"po_id": "123456789101112",
"pog_id": "111555880321624",
"subnetname": "NET",
"netname": "Test3"
}
]
правила.yml
rules:
- rule number: "1"
destCidr: "OBJ({{DNS}}) , 10.22.22.0/24"
- rule number: "2"
destCidr: "OBJ({{ NTP }}) , 10.33.33.0/24"
- rule number: "3"
destCidr: "OBJ({{ NET }}), GRP({{ NTP }}) , 10.33.33.0/24"
Ожидаемый результат
[
{
"rule number": "1",
"destCidr": "OBJ(11155588779966), 10.22.22.0/24 "
},
{
"rule number": "2",
"destCidr": "OBJ(99996688778855), 10.33.33.0/24"
},
{
"rule number": "3",
"destCidr": "OBJ(123456789101112), GRP(1115558812345), 10.33.33.0/24 "
}
]
с той же логикой: вы указываете, хотите ли вы po_id or pog_id
предмет
- name: "make this working"
hosts: localhost
vars:
input: "{{ lookup('file', './input.yml') | from_json }}"
rules:
- rule number: "1"
destCidr: "OBJ({{po_id.DNS}}) , 10.22.22.0/24"
- rule number: "2"
destCidr: "OBJ({{ po_id.NTP }}) , 10.33.33.0/24"
- rule number: "3"
destCidr: "OBJ({{ po_id.NET }}), GRP({{ pog_id.NTP }}) , 10.33.33.0/24"
tasks:
- set_fact:
po_id: >-
{{
input |items2dict(key_name='subnetname',
value_name='po_id')
}}
- set_fact:
pog_id: >-
{{
input |items2dict(key_name='subnetname',
value_name='pog_id')
}}
- set_fact:
ruleoutpout: "{{ rules }}"
- debug:
var: ruleoutpout
результат:
ok: [localhost] => {
"ruleoutpout": [
{
"destCidr": "OBJ(11155588779966) , 10.22.22.0/24",
"rule number": "1"
},
{
"destCidr": "OBJ(99996688778855) , 10.33.33.0/24",
"rule number": "2"
},
{
"destCidr": "OBJ(123456789101112), GRP(1115558812345) , 10.33.33.0/24",
"rule number": "3"
}
]
}
здесь вы должны указать, используете ли вы po_id or pog_id
.. если вы не хотите уточнять это, вы должны использовать пользовательский фильтр ... если вы этого хотите, я предлагаю вам открыть новый вопрос, попросив создать пользовательский фильтр .. в этом случае нечего уточнять, просто сохраните DNS, NET, NTP и его пользовательский фильтр, который выполняет работу после того, как у нас есть OBJ, GRP или другие.
@Frenchy Это вопрос, связанный с решением, которое вы недавно предоставили. Не могли бы вы сообщить мне, какие изменения необходимы для получения вышеуказанного ожидаемого результата. заранее спасибо