Làm thế nào tôi có thể có một vòng lặp lồng nhau với một mẫu fileglob?


13

Tôi đang cố gắng tạo một bộ khóa SSH được ủy quyền cho một nhóm người dùng trong Ansible. Tôi có một usersbiến được thiết lập như vậy:

users:
  - { username: root, name: 'root' }
  - { username: user, name: 'User' }

Trong vai trò tương tự, tôi cũng có một tập hợp các tệp khóa được ủy quyền trong một files/public_keysthư mục, một tệp cho mỗi khóa được ủy quyền:

roles/common/files/public_keys/home
roles/common/files/public_keys/work

Tôi muốn sao chép từng khóa công khai cho mỗi người dùng.

Tôi đã thử sử dụng tác vụ sau:

- name: copy authorized keys
  authorized_key: user={{ item.0.username }} key={{ item.1 }}
  with_nested:
    - users
    - lookup('fileglob', 'public_keys/*')

Tuy nhiên, item.1chứa chuỗi ký tự "lookup('fileglob', 'public_keys/*')", không phải mỗi đường dẫn tệp bên dưới files/public_keys.

Có cách nào để tôi có thể nhận danh sách files/public_keysthư mục và sao chép từng khóa chung cho mỗi người dùng không?

Câu trả lời:


8

Mẹo nhỏ là chuyển đổi giá trị trả về fileglob thành một danh sách thông qua splithàm, để bạn có thể lặp lại các giá trị:

- name: copy authorized keys
  authorized_key: 
    user: "{{ item.0.username }}"
    key: "{{ lookup('file', item.1) }}"
  with_nested:
    - "{{ users }}"
    - "{{ lookup('fileglob', 'public_keys/*').split(',') }}"

Lưu ý rằng việc sử dụng các biến trần, không có {{}}, with_itemskhông được dùng trong Ansible v2.


Điều này nên được chấp nhận câu trả lời
Beyers

0

Bạn có thể phải viết lại đáng kể lệnh của mình, nhưng có điều khoản để lặp qua fileglobs

từ ví dụ:

- copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
  with_fileglob:
    - /playbooks/files/fooapp/*

Các tùy chọn hứa hẹn khác là Looping trên Subelements thực sự được minh họa bằng các khóa SSH


3
Tôi biết bạn có thể lặp lại các tập tin bằng cách sử dụng with_fileglob; Tôi chỉ không chắc chắn làm thế nào để sử dụng kết hợp với một vòng lặp lồng nhau. Looping trên phần tử con có thể làm việc, nhưng tôi hy vọng tôi không cần phải tự xác định toàn bộ danh sách các phím Tôi muốn sao chép, vì tôi nên chỉ có thể có được điều đó như một danh sách (sử dụng with_fileglob).
mipadi

Tôi cũng không chắc. Các gợi ý tốt nhất tiếp theo là pop vào #ansiblengày irc.freenode.netvà xem nếu các bậc thầy có có bất kỳ ý tưởng sáng.
Tom O'Connor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.