db_conn.j2:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'db_name',
'USER': 'db_user',
'PASSWORD': 'db_pass',
'HOST': 'localhost',
'PORT': '5432',
}
}
main.yml:
tasks:
- name: Set DB settings
template: src="/vagrant/ansible/templates/db_settings.j2" dest="{{ proj_dev }}/proj/settings.py"
tags:
- template
在我的任务文件中 settings.py 将替换为 db_conn.j2 。 但我只需要更改目标文件中的 DATABASES 选项( settings.py )。
我可以通过模板执行此操作吗?或者更好地使用替换?
设置django-settings的 ansible 还有其他方法吗?
答案 0 :(得分:2)
template
模块将覆盖整个文件。没有选项只能替换特定部分。这就是模板的想法。
您可以将DATABASES
部分移至另一个文件,然后移至from database.py import *
,但当然您会遇到同样的问题:您需要替换DATABASES
包含import
规则的部分。
是的,replace
模块或lineinfile
module通常更适合替换文件的一部分。
但是你很幸运,Stouts创造了django role:
您可以使用以下命令将其安装到项目中:
ansible-galaxy install Stouts.django
答案 1 :(得分:0)
Ansible 2.0中引入的blockinfile模块完全可以满足您的需求。它将在文件中创建和管理带有特殊开始和结束标记(默认为“ BEGIN / END ANSIBLE MANAGED BLOCK”)的块。