如何通过ansible模板更改文件的一部分
How to change part of file via ansible template
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).
我可以通过 模板 来完成吗?或者更好地使用 replace?
在 ansible 中是否有其他方法来设置 django-settings?
template
模块将覆盖整个文件。没有仅替换特定部分的选项。这就是模板的概念。
您可以将 DATABASES
部分移到另一个文件,然后 from database.py import *
,但是您当然会遇到同样的问题:您需要替换 DATABASES
包含 import
规则的部分。
所以是的,replace
模块或 lineinfile
module 通常更适合替换文件的一部分。
不过你很幸运,Stouts 创造了一个 django role:
您可以将其安装在您的项目中:
ansible-galaxy install Stouts.django
Ansible 2.0 中引入的 blockinfile 模块正是您想要的。它将在您的文件中创建和管理一个带有特殊开始和结束标记(默认为"BEGIN/END ANSIBLE MANAGED BLOCK")的块。
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).
我可以通过 模板 来完成吗?或者更好地使用 replace?
在 ansible 中是否有其他方法来设置 django-settings?
template
模块将覆盖整个文件。没有仅替换特定部分的选项。这就是模板的概念。
您可以将 DATABASES
部分移到另一个文件,然后 from database.py import *
,但是您当然会遇到同样的问题:您需要替换 DATABASES
包含 import
规则的部分。
所以是的,replace
模块或 lineinfile
module 通常更适合替换文件的一部分。
不过你很幸运,Stouts 创造了一个 django role:
您可以将其安装在您的项目中:
ansible-galaxy install Stouts.django
Ansible 2.0 中引入的 blockinfile 模块正是您想要的。它将在您的文件中创建和管理一个带有特殊开始和结束标记(默认为"BEGIN/END ANSIBLE MANAGED BLOCK")的块。