質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.92%

pgpool-IIのインストールから設定をAnsibleで自動化したい

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 1,899

keiw

score 7

前提・実現したいこと

<実現したいこと>
pgpool-IIのインストールから設定を
Ansibleのplaybookでの自動化を行いたい。
<問題点>
現在、インストールまでは出来そうですが、
pgpool.conf(設定ファイル)等の書き換えで困っています。

2台のDBサーバのロードバランサーとしてのpgpool-IIを自動化したく、
そのなかで、■backend_hostname#、■backend_port#、■backend_weight#等の設定をすることがうまくいきません。
(ポート番号等の設定)

インフラ系の開発は初めてで知識も乏しい為、質問内容が分かりにくいと思いますが
どなたか回答お願いいたします。

該当のソースコード

YAML

  • hosts: database_loadbalancers
    sudo: True

tasks:

  • name: Install pgpool-II
    shell: >-
    yum install postgresql-devel &&
    cd /usr/local/src &&
    wget http://www.pgpool.net/mediawiki/images/pgpool-II-3.6.4.tar.gz &&
    tar zxf pgpool-II-3.6.4.tar.gz &&
    cd pgpool-II-3.6.4 &&
    make &&
    make install

  • name: copy pgpool.conf 
    shell: >-
    cd /usr/local/etc &&
    cp pgpool.conf.sample pgpool.conf &&
    cp pcp.conf.sample pcp.conf

  • name: write pgpool.conf
    template: src=pgpool.conf dest=/usr/local/etc/pgpool.conf

  • name: write pcp.conf
    template: src=pcp.conf dest=/usr/local/etc/pcp.conf

  • name: Firewall
    firewalld: port=5432/tcp permanent=true state=enabled immediate=true

試したこと

調べたりはしましたが適切な方法が見つからず質問させていただきました。

以下、考えがまとまっていませんが私が考えていたことを列挙します。
hostファイルに変数をもってテンプレートで読み込むのか?
そもそもconfファイルの中身をAnsibleのplaybookで書き換えられるのか?
別ファイルをコピーする方法をとるとすると、conf(かなり長い)を別途用意してという形になるのか?

補足情報(言語/FW/ツール等のバージョンなど)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

templateモジュールでも目的のことは出来ると思います。
サンプルはこんな感じ
jinja2のfor文のスペシャル変数(loop.index0)を使用すると、リスト要素のインデックス番号が取得できるので、■backend_hostname#、■backend_port#、■backend_weight#の#部分にインデックス番号を展開すればできます。
サンプルのback変数は必要に応じて、host_vars/ホスト名/任意ファイル名等に保存すれば設定値もホスト毎に管理できます。

  • Playbook例
- hosts: localhost
  vars:
    back:
    -   hostname: host1
        port: 2011
        weight: 1
    -   hostname: host2
        port: 2012
        weight: 2
    -   hostname: host3
        port: 2013
        weight: 3
    -   hostname: host4
        port: 2014
        weight: 4
  tasks:
    - template: src=pgpool.conf dest=/tmp/pgpool.conf
  • テンプレート
{% for item in back %}
backend_hostname{{ loop.index0 }} = {{ item.hostname }}
backend_port{{ loop.index0 }} = {{ item.port }}
backend_weight{{ loop.index0 }} = {{ item.weight }}
{% endfor %}
  • テンプレートの展開結果
backend_hostname0 = host1
backend_port0 = 2011
backend_weight0 = 1
backend_hostname1 = host2
backend_port1 = 2012
backend_weight1 = 2
backend_hostname2 = host3
backend_port2 = 2013
backend_weight2 = 3
backend_hostname3 = host4
backend_port3 = 2014
backend_weight3 = 4

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/24 09:19

    回答ありがとうございます。
    サンプルを参考にconfファイルをfor文のスペシャル変数(loop.index0)を使用して実装したところ
    うまくいきました。
    ありがとうございました。

    キャンセル

0

設定ファイルの書き換えは lineinfile が使えると思います。
変数をどのように渡すのかは、いろいろ方法があると思います。
ansible-playbook の --extra-vars オプションなど。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/24 09:22

    回答ありがとうございます。
    いろいろ方法がありますよね...。
    lineinfileや--extra-varsオプションなどについても勉強してみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る