所以我在我的configuration.yml(ansible task)
中有这一行- name: inserting password into database.php
lineinfile: dest=/vagrant/htdocs/app/config/database.php insertbefore="^\s*'pgsql' => array" regexp="^\s*'password'" line=" 'password' => '',"
我正试图取代它:
'sqlite' => array( 'driver' => 'sqlite', 'database' => __DIR__.'/../database/production.sqlite', 'prefix' => '', ), 'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'echoit', 'username' => 'root', 'password' => 'vp45tudsdt', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'port' => 8889 ),
'pgsql' => array(
'driver' => 'pgsql',
'host' => 'localhost',
'database' => 'forge',
'username' => 'forge',
'password' => '',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
),
当我尝试grep正则表达式时:
grep "^\s*'pgsql' => array" ./htdocs/app/config/database.default.php
'pgsql' => array(
当我贪图另一个时:
grep "^\s*'password'" ./htdocs/app/config/database.php
'password' => 'xxxxxxx',
'password' => '',
'password' => '',
所以我的正则表达式完全匹配我期望的东西,
但是之前这个前线并没有像我那样工作,关于这个功能的ansible文档使我相信它将在'pgsql' => array
之前进行最后一场比赛,但它只是一直在替换最后一条路径,在这种情况下'password' => '',
答案 0 :(得分:2)
insertafter
和insertbefore
用于确定在未找到regexp
的情况下放置新行的位置,它不会限制搜索区域。 />
根据{{3}}:
regexp
- 要在文件的每一行中查找的正则表达式。
答案 1 :(得分:1)
最佳做法:使用template module:
dbconn.php.j2
的内容:
<?php
// {{ ansible_managed }}
$DBHost = 'localhost';
$DBName = '{{ db.dbname }}';
$DBLogin = '{{ db_user.name }}';
$DBPassword = '{{ db_user.password }}';
?>
Params&#39; db&#39;,&#39; dbuser&#39;存储在host_vars
和group_vars
,密码 - 在ansible vault
中。
剧本中的任务:
- name: template config files
template:
src="sites_params/{{ sitename }}/templates/include/dbconn.php.j2"
dest="/www/{{ sitename }}/www/include/dbconn.php"
owner=apache
group=apache
mode=0644
setype=httpd_sys_content_t
PS如果你使用git,从git中排除配置文件,如dbconn,只需将 sample config(不带密码,盐等)文件放入你的项目中。