2017-08-02 651 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}'`"