将变量包含在Ansible剧本中

时间:2016-04-14 07:03:00

标签: postgresql yaml ansible web-deployment ansible-playbook

我想用ansible拍摄部署django项目,但我仍然坚持看似非常基本的问题。

我已经创建了一个基本的playbook来部署我的Postgres服务器。

---
- hosts: default
  remote_user: myusername
  become: yes
  become_method: sudo
  become_user: postgres
  vars:
    - include: vars/databases.yml

  tasks:

     - name: Ensure Postgres server is running
       service: name=postgresql state=started enabled=yes

    - name: Create postgres database
      postgresql_db:
        name: '{{ db_name }}'
        state: present
        encoding: 'UTF-8'

我运行剧本,我收到此错误

fatal: [default]: FAILED! => {"failed": true, "msg": "'db_name' is undefined"}

为了保留我的所有密码和版本控制,我已经创建了一个目录变量。它位于我的项目结构中,所有我的ansible yaml文件都在deploy中,所有我的vars文件都在vars子目录中。

..
├── deploy
│   └── vars
..
├── myproject
├── manage.py
└── utils


# var/databases.yml
db_name: <database name>

这里发生了什么?

更新:根据要求添加了var / databases.yml的内容。

2 个答案:

答案 0 :(得分:0)

在尝试创建数据库之前,必须为变量db_name分配值。错误明确指出&lt;“'db_name'未定义”&gt;,变量db_name未定义/未分配。

请参阅以下示例代码

vars:
  dbname: myapp
  dbuser: django
  dbpassword: mysupersecretpassword

tasks:
- name: ensure database is created
  postgresql_db: name={{dbname}}

答案 1 :(得分:0)

您可以像vars一样更改vars_files

vars_files:
    - vars/databases.yml