Ansible: ver2.1.0.0
ローカルからリモートサーバー上(さくらVPS)に対してAnsibleを使って環境構築の自動化をしようとしています。
すでに同じサーバー上にAnsibleを使ってNginxの構築は成功していますが、今回のpostgresqlのインストールを目的とした構築がうまくいきません。Nginxのときとの違いは、今回はgroup_varsの変数を利用して構築しようとしています。
現在、以下の構成で試していますが、うまくいきません。
###ディレクトリ構成
├── group_vars │ ├── all.yml │ └── production │ ├── all.yml │ ├── secret.yml │ ├── dbservers.yml │ └── webserves.yml ├── hosts │ └── production │ └── production ├── roles │ └── postgresql │ └── tasks │ └── main.yml │ ├── ruby │ └── nginx │ ├── dbserves.yml ├── webservers.yml └── site.yml
###主なソースコード
site.yml
yaml
1--- 2- include: webservers.yml 3- include: dbservers.yml
dbservers.yml
yaml
1--- 2- hosts: dbservers 3 roles: 4 - postgresql
roles/postgresql/tasks/main.yml
yaml
1--- 2- name: rpm install postgresql repos 3 become: true 4 yum: 5 name: "{{ pg.rpm_url }}" 6 7- name: install postgresql 8 become: true 9 yum: 10 name: "{{ item }}" 11 state: latest 12 with_items: 13 - "{{ pg.package_name }}-server" 14 - "{{ pg.package_name }}-devel" 15 - "{{ pg.package_name }}-contrib" 16 - "{{ pg.package_name }}-libs" 17 - python-psycopg2 18 19- name: postgresql initdb 20 become: true 21 shell: "service postgresql-{{ pg.version }} initdb" 22 23- name: start postgresql 24 become: true 25 service: 26 name: "postgresql-{{ pg.version }}" 27 state: started 28 enabled: true 29 30- name : create database 31 postgresql_db: 32 name: "{{ pg.dbname }}" 33 login_user: postgres 34 sudo_user: postgres 35 sudo: true 36 37- name: create user 38 postgresql_user: 39 db: "{{ pg.dbname }}" 40 name: "{{ pg.dbuser }}" 41 password: "{{ pg.dbpassword }}" 42 priv: ALL 43 state: present 44 login_user: postgres 45 sudo_user: postgres 46 sudo: true
hosts/production/production
ini
1[ishikari-webservers] 2target-host ansible_host=(IPを記入) ansible_port=21122 ansible_user=system_user ansible_ssh_private_key_file=/Users/admin/.ssh/sakura_git 3 4[ishikari-dbservers] 5target-host ansible_host=(IPを記入) ansible_port=21122 ansible_user=system_user ansible_ssh_private_key_file=/Users/admin/.ssh/sakura_git 6 7[webservers:children] 8ishikari-webservers 9 10[dbservers:children] 11ishikari-dbservers 12 13[production:children] 14webservers 15dbservers
group_vars/production/dbservers.yml
yml
1--- 2pg: 3 rpm_url: "http://yum.postgresql.org/9.5/redhat/rhel-7.1-x86_64/pgdg-centos95-9.5-1.noarch.rpm" 4 version: 9.5 5 package_name: postgresql95 6 dbname: app_production 7 dbuser: db_user 8 # dbpasswordはgroup_vars/production/secret.yml ここには書かない
group_vars/production/secret.yml
yml
1--- 2pg: 3 dbpassword: password
###実行コマンド
cmd
1ansible-playbook -i ansible/hosts/production ansible/dbservers.yml --vault-password-file ~/.vault_password
###エラーメッセージ
cmd
1TASK [postgresql : rpm install postgresql repos] ******************************* 2fatal: [target-host]: FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'rpm_url'"}
rpm_urlなどのgroup_varsから読み込みたい変数がうまく読み込めません。
試しに、group_vars/production/dbservers.yml
の内容をまるまる roles/postgresql/vars/main.yml
として実行するとdbpasswordの部分は直書きになってしまいますが、構築に成功します。
group_varsの変数の利用でなんとか解決できないでしょうか。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/21 00:29