В 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