Python cookiecutter цикл по списку
Я пытаюсь перебрать все элементы в списке json Python cookiecutter и запустить команду bash на основе каждого элемента.
Настроить
У меня есть следующее cookiecutter.json
:
{
"directory_name": "df-sharp",
"servers": ["db", "web"],
"myweb_provisioner": "webck"
}
я имею {{cookiecutter.myweb_provisioner}}.sh
, который содержит это jinja2
код:
{% for server in cookiecutter.servers %}
mkdir -p ~/myproj/host_types/{{ server }}
{% endfor %}
проблема
Когда я бегу cookiecutter create-server-tree
Я получаю следующее:
Select servers:
1 - db
2 - web
Choose from 1, 2 [1]: 2
и содержание в webck.sh
являются:
mkdir -p ~/myproj/host_types/w
mkdir -p ~/myproj/host_types/e
mkdir -p ~/myproj/host_types/b
Select
меню не должно появляться. Я не хочу выбирать между 2 элементами в списке. Я хочу зациклить их и построить 2 команды bash - по одной команде на элемент. Я пытаюсь перебрать список, как показано здесь или здесь.
Что я хочу
Это то, что я хочу: cookiecutter create-server-tree
должен производить webck.sh
который содержит следующее:
mkdir -p ~/myproj/host_types/db
mkdir -p ~/myproj/host_types/web
Как я могу перебрать servers
перечислить и использовать каждый из элементов списка (вместо одного символа за раз)?
1 ответ
Оказывается, я использовал неправильную терминологию. Если значение в паре ключ-значение представляет собой простой список, то cookiecutter вызывает это значение (список), предоставляя " варианты множественного выбора". Так что, если я добавлю простой список в качестве значения для "серверов", то я должен ожидать получить список вариантов, которые я получил выше:
Select servers:
1 - db
2 - web
Choose from 1, 2 [1]: 2
То, что мне было нужно, это вложенный словарь в качестве значения для серверов ключей, как они показывают здесь - он называется словарь переменных. Чтобы использовать это, чтобы ответить на мой вопрос, я изменил свой cookiecutter.json
файл к этому:
{
"directory_name": "df-sharp",
"servers": {"server_list": ["db", "web"],
"server_ips: ["123", "456"]"
},
"myweb_provisioner": "webck"
}
а затем я использовал jinja2, как показано ниже:
{% for server in cookiecutter.servers.server_list %}
mkdir -p ~/myproj/host_types/{{ server }}
{% endfor %}
и это дало мне то, что я хотел.
Тем не менее, я должен был использовать cookiecutter create-server-tree --no-input
( ссылка). Это связано с тем, что мне не удалось подавить только подсказку для словарной переменной. Я бы хотел это:
directory_name[df-sharp]:
myweb_provisioner[webck]:
и какой-то способ указания ключа servers
в качестве аргумента по умолчанию. На самом деле, у них есть опция по умолчанию здесь. Было бы что-то вроде этого и требует использования их API:
cookiecutter('create-server-tree/',
no_input=True,
extra_context={"servers": {"server_list":['db','web'],
"server_ips": ["123", "456"]
}
}
)
Тем не менее, как пользователь должен включить это extra_content={...}
аргумент в фактический проект cookiecutter и обратитесь к "server_list" в jinja2
шаблонный скрипт? Я не знаю.