运行ansible insertLine命令:完全错误的事情,我不知道为什么

时间:2016-08-26 10:56:42

标签: vagrant ansible vagrant-provision

所以我在我的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' => '',

2 个答案:

答案 0 :(得分:2)

insertafterinsertbefore用于确定在未找到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_varsgroup_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(不带密码,盐等)文件放入你的项目中。