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

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

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

2回答

3283閲覧

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

keiw

総合スコア7

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

1クリップ

投稿2017/05/22 06:08

###前提・実現したいこと
<実現したいこと>
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/ツール等のバージョンなど)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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/23 10:07

yasu-tamura

総合スコア64

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keiw

2017/05/24 00:19

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

0

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

投稿2017/05/23 07:52

TaichiYanagiya

総合スコア12141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keiw

2017/05/24 00:22

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問