2016-05-18 27 views
7

Tôi là một người mới đến ansible và tôi đang sử dụng một playbook rất đơn giản để phát hành sudo apt-get updatesudo apt-get upgrade trên một vài máy chủ.Làm thế nào để lưu trữ ansible_become_pass trong một kho tiền và cách sử dụng?

Đây là playbook Tôi đang sử dụng:

--- 

- name: Update Servers 
    hosts: my-servers 
    become: yes 
    become_user: root 
    tasks: 
    - name: update packages 
     apt: update_cache=yes 

    - name: upgrade packages 
     apt: upgrade=dist 

và đây là một chiết xuất từ ​​~/.ansible/inventory/hosts tập tin của tôi:

[my-servers] 
san-francisco ansible_host=san-francisco ansible_ssh_user=user ansible_become_pass=<my_sudo_password_for_user_on_san-francisco> 
san-diego  ansible_host=san-diego  ansible_ssh_user=user ansible_become_pass=<my_sudo_password_for_user_on_san-diego> 

Đây là những gì tôi nhận được nếu tôi khởi động playbook:

$ ansible-playbook update-servers-playbook.yml                                  

PLAY [Update Servers] ********************************************************** 

TASK [setup] ******************************************************************* 
ok: [san-francisco] 
ok: [san-diego] 

TASK [update packages] ********************************************************* 
ok: [san-francisco] 
ok: [san-diego] 

TASK [upgrade packages] ******************************************************** 
ok: [san-francisco] 
ok: [san-diego] 

PLAY RECAP ********************************************************************* 
san-francisco    : ok=3 changed=0 unreachable=0 failed=0 
san-diego     : ok=3 changed=0 unreachable=0 failed=0 

Điều làm phiền tôi là tôi có mật khẩu cho người dùng của mình user được lưu trữ trong bản rõ trong tập tin ~/.ansible/inventory/hosts của tôi.

Tôi đã đọc khoảng vaults, tôi cũng đã đọc về số best practices for variables and vaults nhưng tôi không hiểu cách áp dụng điều này vào trường hợp sử dụng rất tối thiểu của mình.

Tôi cũng đã cố sử dụng lookups. Trong thời gian ở chung họ cũng làm việc trong các tập tin hàng tồn kho, và tôi có thể làm điều gì đó như thế này:

[my-servers] 
san-francisco ansible_host=san-francisco ansible_ssh_user=user ansible_become_pass="{{ lookup('env', 'ANSIBLE_BECOME_PASSWORD_SAN_FRANCISCO') }}" 

nơi trường hợp này, mật khẩu sẽ được lưu trữ trong một biến môi trường được gọi là ANSIBLE_BECOME_PASSWORD_SAN_FRANCISCO; không có cách nào để tìm kiếm các biến trong hầm như xa như tôi biết.

Vậy, làm cách nào để sắp xếp tệp của mình sao cho tôi có thể tra cứu mật khẩu của mình từ đâu đó và lưu trữ chúng một cách an toàn?

Trả lời

9

Bạn chỉ cần tạo một số tệp biến dạng vòm và sau đó đưa chúng vào sách chơi của bạn hoặc trên dòng lệnh.

Nếu bạn thay đổi tập tin tồn kho của bạn để sử dụng một biến cho đèo trở nên biến này có thể được vòm:

[my-servers] 
san-francisco ansible_host=san-francisco ansible_ssh_user=user ansible_become_pass='{{ sanfrancisco_become_pass }}' 
san-diego  ansible_host=san-diego  ansible_ssh_user=user ansible_become_pass='{{ sandiego_become_pass }}' 

Sau đó sử dụng ansible-vault create vaulted_vars.yml để tạo ra một tập tin hình vòm với những nội dung sau đây:

sanfrancisco_become_pass: <my_sudo_password_for_user_on_san-francisco> 
sandiego_become_pass : <my_sudo_password_for_user_on_san-diego> 

Sau đó, hãy bao gồm tệp hình vòm như thêm các vars như sau:

ansible-playbook -i ~/.ansible/inventory/hosts playbook.yml --ask-vault-pass [email protected]~/.ansible/inventory/vault_vars 

Hoặc bao gồm tệp vars trong sách của bạn với nhiệm vụ include_vars:

- name  : include vaulted variables 
    include_vars: ~/.ansible/inventory/vault_vars 
+0

Cảm ơn! Tôi đã thử nghiệm giải pháp đầu tiên (chỉ định tệp vault từ dòng lệnh dưới dạng tùy chọn) và nó hoạt động! Tôi phải chỉ ra cho những người khác chú ý đến ký hiệu '@', trên thực tế, tài liệu về 'ansible-playbook' nói cho tùy chọn '-e':« Để tải các biến từ một tệp, hãy chỉ định tệp trước @ (ví dụ: @ vars.yml). » – CristianCantoro

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