Ivan
Ну не знаю, там 1к строк, пусть лежит отдельно
Timur
Зачем отдельный файл?
Ivan
Я не готов ответить на этот вопрос, но меня это устраивает пока
Alex
https://github.com/ansible/ansible/pull/63194
а можно как то понять, будет ли оно бекпортировано для 2.7?
Timur
Timur
Учитывая, что уже вышел релиз 2.9
Timur
Какой смысл оставаться на 2.7?
Timur
Обновляйтесь до 2.8 как минимум
Alex
ну это надо будет все плейбуки прогонять на совместимость с 2.8, а это очень хлопотно на данный момент. В планах уже есть переход на 2.8
Vladimir
Alex
[DEPRECATION WARNING]: DISPLAY_SKIPPED_HOSTS option, environment variables without "ANSIBLE_"
prefix are deprecated , use the "ANSIBLE_DISPLAY_SKIPPED_HOSTS" environment variable instead.
This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
а как эта опция должна выглядеть в ansible.cfg в 2.8?
Ivan
Alex
я не использую переменную окружения
Alex
https://docs.ansible.com/ansible/latest/reference_appendices/config.html
здесь говорится
Ini Key: display_skipped_hosts
𝚔𝚟𝚊𝚙𝚜
напомните плз как называется функция которая позволяет подставлять значения вместо true и false?
Гайрат
𝚔𝚟𝚊𝚙𝚜
Не, там было что-то такое:
{{ some_var | func('enabled', 'disabled') }}
Николай
𝚔𝚟𝚊𝚙𝚜
Alexander
"internet_gateways": [
{
"attachments": [
{
"state": "available",
"vpc_id": "vpc-54321"
}
],
"internet_gateway_id": "igw-12345",
"tags": [
{
"key": "Name",
"value": "PROD"
}
]
}
],
Как мне отсюда вытащить internet_gateway_id на основании vpc_id?
Варианты, которые не работают:
"igw_info.internet_gateways | selectattr('attachments.vpc_id', 'equalto', item.vpc_id) | list": "VARIABLE IS NOT DEFINED!: 'list object' has no attribute 'vpc_id'"
"igw_info.internet_gateways | selectattr('attachments[0].vpc_id', 'equalto', item.vpc_id) | list": "VARIABLE IS NOT DEFINED!: 'dict object' has no attribute 'attachments[0]'
"igw_info.internet_gateways | selectattr('attachments | first | vpc_id', 'equalto', item.vpc_id) | list": "VARIABLE IS NOT DEFINED!: 'dict object' has no attribute 'attachments | first | vpc_id'"
Alexander
Использую https://docs.ansible.com/ansible/latest/modules/ec2_vpc_igw_info_module.html#ec2-vpc-igw-info-module для получения igw_info
Timur
"internet_gateways": [
{
"attachments": [
{
"state": "available",
"vpc_id": "vpc-54321"
}
],
"internet_gateway_id": "igw-12345",
"tags": [
{
"key": "Name",
"value": "PROD"
}
]
}
],
Как мне отсюда вытащить internet_gateway_id на основании vpc_id?
Варианты, которые не работают:
"igw_info.internet_gateways | selectattr('attachments.vpc_id', 'equalto', item.vpc_id) | list": "VARIABLE IS NOT DEFINED!: 'list object' has no attribute 'vpc_id'"
"igw_info.internet_gateways | selectattr('attachments[0].vpc_id', 'equalto', item.vpc_id) | list": "VARIABLE IS NOT DEFINED!: 'dict object' has no attribute 'attachments[0]'
"igw_info.internet_gateways | selectattr('attachments | first | vpc_id', 'equalto', item.vpc_id) | list": "VARIABLE IS NOT DEFINED!: 'dict object' has no attribute 'attachments | first | vpc_id'"
А полностью igw_info как выглядит?
Alexander
+ ещё один элемент списка с информацией по другому vpc
Alexander
ok: [localhost] => {
"changed": false,
"internet_gateways": [
{
"attachments": [
{
"state": "available",
"vpc_id": "vpc-54321"
}
],
"internet_gateway_id": "igw-12345",
"tags": [
{
"key": "Name",
"value": "PROD"
}
]
},
{
"attachments": [
{
"state": "available",
"vpc_id": "vpc-67890"
}
],
"internet_gateway_id": "igw-09876",
"tags": []
}
],
"invocation": {
"module_args": {
"aws_access_key": null,
"aws_secret_key": null,
"debug_botocore_endpoint_logs": false,
"ec2_url": null,
"filters": {},
"internet_gateway_ids": null,
"profile": null,
"region": null,
"security_token": null,
"validate_certs": true
}
}
}
Aleksey
и логика его формирования довольно не тривиальна
Timur
ok: [localhost] => {
"changed": false,
"internet_gateways": [
{
"attachments": [
{
"state": "available",
"vpc_id": "vpc-54321"
}
],
"internet_gateway_id": "igw-12345",
"tags": [
{
"key": "Name",
"value": "PROD"
}
]
},
{
"attachments": [
{
"state": "available",
"vpc_id": "vpc-67890"
}
],
"internet_gateway_id": "igw-09876",
"tags": []
}
],
"invocation": {
"module_args": {
"aws_access_key": null,
"aws_secret_key": null,
"debug_botocore_endpoint_logs": false,
"ec2_url": null,
"filters": {},
"internet_gateway_ids": null,
"profile": null,
"region": null,
"security_token": null,
"validate_certs": true
}
}
}
Тогда что вы хотите получить из этого списка? Список всех internet_gateway_id? Или какой-то конкретный?
Alexander
NM
Sed ?
Timur
Alexander
NM
Да можно через jq штатный
Alexander
Попробовал ещё так:
- name: Gather igw info
ec2_vpc_igw_facts:
region: "{{ item.region }}"
filters:
"attachment.vpc-id": "{{ item.vpc_id }}"
register: igw_infos
with_items: "{{ vpc }}"
- name: Print debug
debug:
var: igw_infos.results | selectattr('invocation.module_args.filters.attachment.vpc-id', 'equalto', item.vpc_id) | list
Так он не может читать ключи с точкой в имени) Но, зачем-то, для удобства, авторы модуля решили, что ключи должны быть именно с точкой в имени ))
Alexander
Хотя, это стандартный AWS фильтр, но от этого не легче
Alexander
Мне вообще маршрут к igw нужно добавить - может есть легче способ? )
Alexander
Зашёл с другой стороны:
- Собрал с модуля ec2_vpc_igw вывод.
- Обработал его. Там по-человечески в словаре первоуровневом vpc_id и igw_id
Alexander
Sergey
Alex
это jmespath
Alex
который собсно используется в json_query
Sergey
Ясн.
Alex
с таким фильтром
internet_gateways[].{vpc_id: attachments[0].vpc_id, igw_id: internet_gateway_id}
на выходе получим
[
{
"vpc_id": "vpc-54321",
"igw_id": "igw-12345"
},
{
"vpc_id": "vpc-67890",
"igw_id": "igw-09876"
}
]
Alex
выбрать нужный igw_id уже дело техники
Sergey
Alex
Sergey
Что только люди не сделают, лишь бы не писать код 😊
Alex
хз мы сейчас тестируем на RHEL 6/7/8 везде она есть
Max
Alex
в смысле
Sergei
братишки, вопрос вам, я погуглил, чесно. Вообще хочу что то типа when: variable name like %AZAZA_% .
Sergei
вообщем, я заведом не знаю имя переменной, только ее первые буквы %)
Alex
имя или значение?
Timur
Timur
Какая задача решается?
Alexander
Alexander
Sergei
Timur
Timur
Timur
Очень хочется программировать на yaml?
Alexander
Очень может пригодится во многих случаях
Отделение Bereke Bank
Senior YAML Developer
Sergey
Sergey
LIKE? в инфраструктуре? ты серьёзно?
Alexander
Ну это как обычно - претенциозно и бесполезно
Alex
Полный код как выглядит?
я же привел пример, тебе только остается выдрать нужный igw id
igw_infos.results | json_query('internet_gateways[].{vpc_id: attachments[0].vpc_id, igw_id: internet_gateway_id} | [?vpc_id == 'vpc-54321'].igw_id')
Alexander
Alex
и?
Alex
религия не позволяет?
Alexander
И зависимость
Alex
json_query не надо отдельно ставить