Приветствую. Ролью URI хожу в API нашего PowerDNS, например, для занесения

TXT записей. Бывает, что надо за один раз добавить несколько TXT записей для одного домена. Для выполнения этой операции PowerDNS имеет метод REPLACE (удаляет существующую запись, если она существует, и добавляют новую). Метода, который бы просто добавлял запись к уже существующим нет. Тело запроса оформлено при помощи Jinja2 шаблона.
Учитывая специфику работы метода REPLACE, я пытаюсь в одном запросе указать несколько записей сразу. PowerDNS такое позволяет, но есть проблема в оформлении и обработке Jinja2 шаблона. При помощи цикла я перебираю ключи в словаре, и для каждого ключа я извлекаю переменную, которую хочу подставить в блок метода REPLACE, чтобы в итоге получить запрос, содержащий несколько TXT записей. В предоставленном шаблоне всё работает, метод обрабатывается штатно, за исключением вывода переменной для ключа. Получается, что надо поставить "переменную в переменную". Как такое провернуть?

В переменную record, в поле content надо добавить значение i[1]['dns-01'].resource_value

{ "rrsets":
[
{
"name": "{{ sample_com_challenge.challenge_data[item]['dns-01'].record }}.",
"type": "TXT",
"ttl": 120,
"changetype": "REPLACE",
"records": [
{% set record = [] %}
{% for i in sample_com_challenge.challenge_data.items() %}
{{ record.append( {
"content": '{{ i[1]['dns-01'].resource_value }}',
"disabled": false,
"set-ptr": false
} ) }}
{% endfor %}
{{ record | join(", ") }}
]
}
]
}


На выходе я получаю:

{ "rrsets":
[
{
"name": "example.com.",
"type": "TXT",
"ttl": 120,
"changetype": "REPLACE",
"records":
[
{
"content": "i[1]['dns-01'].resource_value",
"disabled": false,
"set-ptr": false
},
{
"content": "i[1]['dns-01'].resource_value",
"disabled": false,
"set-ptr": false
}
]
}
]
}

Что хочу получить:

{ "rrsets":
[
{
"name": "example.com.",
"type": "TXT",
"ttl": 120,
"changetype": "REPLACE",
"records":
[
{
"content": "TXT RECORD 1",
"disabled": false,
"set-ptr": false
},
{
"content": "TXT RECORD 2",
"disabled": false,
"set-ptr": false
}
]
}
]
}

1 ответов

17 просмотров
Дмитрий-Норкин Автор вопроса

Отвечаю на свой же запрос. Вот такая конструкция правильно отрабатывает: { "rrsets": [ { "name": "{{ sample_com_challenge.challenge_data[item]['dns-01'].record }}.", "type": "TXT", "ttl": 120, "changetype": "REPLACE", "records": [ {% set record = [] %} {% for i in sample_com_challenge.challenge_data.items() %} {{ record.append( { "content": "\""+i[1]['dns-01'].resource_value+"\"", "disabled": false, "set-ptr": false } ) }} {% endfor %} {{ record | join(", ") }} ] } ] }

Похожие вопросы

Обсуждают сегодня

Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
8
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
8
Добрый день. Мне посоветовали обратиться к вам в чат за помощью. Ситуация описана на скрине. Как мне сказали, мне на бота навесили флудвейт. Есть ли возможность снять его ра...
OVERLINK
7
всем привет помогите пожалуйста используя CDN (GCP) у игроков из вьетнама загружается конфиг (размер 999 bytes) загружается 5 и более минут н а других CDN сервисах такой пробл...
Andrew Krw.
1
Просто по очереди выпиливаешь на ручной маппинг? По методу за раз
Andrii Kurdiumov
7
Приветствую. А не подскажете какие ограничения есть на использования api метода setMyName ? Несколько раз сменил имя бота и получил бан на 2 месяца на смену имени.
Slick Slack
8
Привет, коллеги! Возникла задача ограничить максимальный размер вложений для определённых расширений, например, чтобы для изображений лимит был 10 МБ, а для видео — 100 МБ. Ог...
Andro
1
Всем привет! Взялся портировать модули на 18 версию, лезет _logger.log(log_level, 'no translation language detected, skipping translation %s', frame, stack_info=True) А чт...
Max Lit
3
Доброе утро, а кто то делал Google аналитику через php ? curl_setopt($ch, CURLOPT_NOSIGNAL, true); Это должно быть async без ожидания ответа. Вообще php нормально с таким с...
Max Dubovsky
9
Карта сайта