В Ansible, как использовать переменную внутри определения переменной, которая использует фильтры
Я хочу извлечь несколько совпадений регулярных выражений из URL-адреса. Единственный способ, которым я мог это сделать, был следующий:
- name: Set regex pattern for github URL
set_fact: pattern="^(git@github.com:|https?://github.com/)(.*)/([^.]+)(.git)?$"
- name: Extract organization name
set_fact: project_repo="{{ deploy_fork | regex_replace( "^(git@github.com:|https?://github.com/)(.*)/([^.]+)(.git)?$", "3" ) }}"
when: deploy_fork | match( "{{ pattern }}" )
при таком подходе я могу повторно использовать переменную pattern
на match
фильтр, но не на set_fact
строка, в которой я назначаю извлеченный текст другой переменной.
Есть ли способ повторно использовать переменную в set_fact
использует filter(s)
?
2 ответов
вы должны просто иметь возможность ссылаться на переменные напрямую. Попробуйте это; это сработало для меня:
- name: Set regex pattern for github URL
set_fact: pattern="^(git\@github\.com\:|https?\:\/\/github.com\/)(.*)\/([^\.]+)(\.git)?$"
- name: Extract organization name
set_fact: project_repo="{{ deploy_fork | regex_replace(pattern, "\3" ) }}"
when: deploy_fork | match(pattern)
вам не нужно использовать {{ }} для использования переменных внутри условных обозначений, как это уже подразумевается.
вы можете найти подробные описания здесь Ansible Conditionals