0

だから私は私の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すると:

 grep "^\s*'password'" ./htdocs/app/config/database.php


                'password'  => 'xxxxxxx',
                'password' => '',
             'password'  => '',

したがって、私の正規表現は私が期待するものと正確に一致しますが、この beforeline は機能しません。この機能に関する ansible ドキュメントにより、最後の一致が BEFORE になると信じられましたが 'pgsql' => array 、この場合、最後のパス'password' => '',

4

2 に答える 2

2

insertafterが見つからない場合insertbeforeに新しい行を配置する場所を決定するために使用されますが、検索領域を制限するものではありません。ドキュメント に従って:regexp

regexp– ファイルのすべての行で検索する正規表現。

于 2016-08-26T11:09:35.727 に答える
1

ベスト プラクティス:テンプレート モジュールを使用します。

の内容dbconn.php.j2:

<?php

// {{ ansible_managed }}

$DBHost = 'localhost';
$DBName = '{{ db.dbname }}';
$DBLogin = '{{ db_user.name }}';
$DBPassword = '{{ db_user.password }}';

?>

パラメータ 'db'、'dbuser' は、パスワード - ansible に保存さhost_varsれます。group_varsvault

プレイブックのタスク:

- 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 などの構成ファイルを除外し、サンプル構成(パスワード、salt などなし) ファイルをプロジェクトに入れます。

于 2016-08-26T11:17:30.987 に答える