2017-08-02 653 views
0

我目前運行以下命令ansible PostgreSQL的模塊來創建角色並添加數據庫

# su - postgres 
$ psql 
postgres=# create role user_name with login encrypted password 'password'; 
postgres=# create database database_name owner user_name template template0 encoding 'UTF8' lc_collate 'en_US.UTF-8' lc_ctype 'en_US.UTF-8'; 

我想利用postgresql module in ansible的這樣做。

到目前爲止,我已經試過這

- name: create the "{{ ovirt_engine_dwh_db_name }}" db from the command line 
    command: | 
    psql -c "create role {{ ovirt_engine_dwh_db_user }} with login encrypted password '{{ ovirt_engine_dwh_db_password }}';" 
    psql -c "create database {{ ovirt_engine_dwh_db_name }} owner {{ ovirt_engine_dwh_db_user }} template template0 encoding 'UTF8' lc_collate 'en_US.UTF-8' lc_ctype 'en_US.UTF-8';" 
    become_user: postgres 

但如果我嘗試這裏面談到的錯誤是Jinja2的模板不能代替我在defaults/main.yml

+2

你問你如何將你的問題中的命令轉換爲postgresql ansible模塊或爲什麼你當前的任務失敗?如果是後者,是否可以包含錯誤輸出? – kfreezy

+0

@kfreezy我很好奇如何將命令轉換爲postgresql ansible模塊。我很想看看我如何使用它們來做到這一點。現在,我通過創建sql模板並在主機上單獨運行它們來實現它。這個錯誤是由於這樣一個事實:任務是在一個非默認的目錄結構中,因此無法讀取'defaults/main.yml' –

回答

1

已定義的變量,你會需要使用postgresql_userpostgresql_db將您的任務分成兩個單獨的任務。

- name: Create the "{{ ovirt_engine_dwh_db_user }}" user 
    postgresql_user: 
    name: "{{ ovirt_engine_dwh_db_user }}" 
    password: "{{ ovirt_engine_dwh_db_password }}" 
    encrypted: True 
    become_user: postgres 

- name: create the "{{ ovirt_engine_dwh_db_name }}" db 
    postgresql_db: 
    name: "{{ ovirt_engine_dwh_db_name }}" 
    owner: "{{ ovirt_engine_dwh_db_user }}" 
    template: template0 
    encoding: UTF8 
    lc_collate: 'en_US.UTF-8' 
    lc_ctype: 'en_US.UTF-8' 
    become_user: postgres 

注意,ovirt_engine_dwh_db_password可以是加密的純文本或MD5。我可以使用下面的命令在Ubuntu 16.04上創建加密密碼。

export USER=bar               
export PASS=verysecretpassword 
echo "md5`echo -n "${PASS}${USER}" | md5sum | awk '{print $1}'`"