2015-10-13 15 views
6

Tôi muốn trích xuất một vài kết quả phù hợp từ một URL. Cách duy nhất tôi có thể làm điều này được sau:Trong Ansible, làm thế nào để sử dụng một biến bên trong một định nghĩa biến có sử dụng các bộ lọc

- 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 }}") 

Với phương pháp này, tôi có thể tái sử dụng các biến pattern trong bộ lọc match, nhưng không phải trên dòng set_fact nơi tôi gán văn bản chiết xuất để biến khác . Có cách nào để sử dụng lại biến trong set_fact sử dụng filter(s) không?

Trả lời

8

Bạn chỉ có thể tham khảo trực tiếp các biến đã xác định. Thử cái này; nó làm việc cho tôi:

- 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) 
0

Bạn không cần phải sử dụng {{}} sử dụng các biến trong điều kiện, như những đã ngụ ý.

Bạn có thể tìm mô tả chi tiết ở đây Ansible Conditionals

Các vấn đề liên quan