2016-06-20 1 views
1

Aniable, Running 2.1.0 버전. 필자는 호스트 그룹에 대해 PostgreSQL 쿼리를 실행하는 Ansible 플레이 북을 작성했습니다. 셸 명령에서 SQL DB 암호를 지정하면 작동하지만 호스트 그룹에 대해 재생 목록을 실행하고 암호가 모두 고유하므로 암호를 입력하는 더 좋은 방법이 필요합니다. 누구든지이 일을하는 더 좋은 방법을 제안 할 수 있습니까? 안전한 핸드북에서 PostgreSQL 암호를 지정하십시오.

--- 

- hosts: Test_Hosts  
    sudo: yes  
    sudo_user: root  
    gather_facts: yes 
    tasks:  
    - name: Login to DB and run command  
    shell: export PGPASSWORD='Password'; psql -U 'user' -d 'db' -c 'select * FROM table'; 
    register: select_all_from_table 

    - name: Display table contents  
    debug: msg="{{ select_all_from_table.stdout }}" 

나는 주제에 다른 스레드를 보았다하지만 제안을 구현하는 방법을 잘하지 않았다 : Run a postgresql command with ansible playbook. Postgresql requires password

답변

3

Ansible 당신이 모든 작업에 environment parameter를 사용하여 작업에 대한 환경 변수를 설정할 수 있습니다.

- name: Login to DB and run command  
    shell: export PGPASSWORD='Password'; psql -U 'user' -d 'db' -c 'select * FROM table'; 
    register: select_all_from_table 
    environment: 
     PGPASSWORD: '{{ pgpassword }}' 

을 그리고 다음 group 또는 host 수준에서 pgpassword 변수를 설정 :

그래서 경우에 당신은이 작업을 수행 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 너의 제안을. – Sysadmin1234

0

저는 오늘이 문제에 직면했습니다. 이것이 저에게 효과적이었습니다. Linux에서는 모든 자격 증명을 ~/.pgpass 숨김 파일로 패키지화 할 수 있습니다.

로컬 (이 경우는 ./files/pgpass)으로 만든 다음 psql 명령을 실행하기 전에 해당 호스트로 복사 할 수 있습니다.

- name: set passwd file for PSQL 
    copy: 
    src: files/pgpass 
    dest: ~/.pgpass 
    mode: 0600   ### important: will not work with wrong permissions 

- name: PSQL command 
    shell: "psql -U 'user' -d 'db' -c 'select * FROM table'" 
    register: select_all_from_table 

파일의 내용은 다음과 같은 형식이어야합니다 그러나

hostname:port:database:username:password 

, 내 예를 들어, 다음과 같습니다 그래서 당신은 와일드 카드를 사용할 수 있습니다에 대한

*:*:db1:user1:passwd1 
*:*:db2:user2:passwd2 

참조 문서 세부 정보 : https://www.postgresql.org/docs/9.1/static/libpq-pgpass.html

관련 문제