インフラグループの Morikawa です。 今回は Ansible 2.0 でリリースされた block ディレクティブ について、ここ 1 年半ほど使ってみて便利だったシーンをピックアップしてみようと思います。 個人的に良くなったと思うのは以下の 3 つでした。 tags 設定が集約できる 条件分岐の集約ができる タスクの階層が見た目でも分かりやすい これらのメリットについて、PostgreSQL サーバのインストールを例にとって説明したいと思います。 block ディレクティブの無い Playbook block ディレクティブを用いずに書いた場合の Playbook の一例が以下となります。 なお、個々のタスクを処理内容ごとに部分的に実行可能とするため、私が Playbook を書く際は原則タスクに対して tags の設定を行うことにしており、下記の Playbook もそのような
Ansible でパスワードやAPIキーなどの機密情報を扱う場合には ansible-vault を使うことで暗号化されたファイルとして変数を保存できます。 簡単な使い方は以前書きました Ansible Vault を試す しかしながら、ansible-vault はファイル単位での暗号化であるため、暗号化の不要な項目までまるっと暗号化され、どんな変数が定義されているのかすらわからなくなってしまうという問題がありました。 これは結構不便です。 そんなことをずっと思っていたのですが、ふとドキュメントを読んでいたらこの問題の解決策が書いてありました。 Splitting Out Host and Group Specific Data なんと、バージョン 1.4 という ansible-vault 登場(1.5)以前からある機能でした!! が、 As an advanced use-case,
はじめに Ansible 2.4からAnsible Vaultで、あるファイルはパスワードA、またあるファイルはパスワードB、……と別々のパスワードを使って暗号化した場合でも1つのコマンドで復号できるようになった。 これは公式ドキュメント( http://docs.ansible.com/ansible/2.4/vault.html )の「Use encrypt_string to create encrypted variables to embed in yaml」、「Vault Ids and Multiple Vault Passwords」、「Providing Vault Passwords」辺りに説明されている。 要約 2.4からも従来の--vault-password-fileオプションは使えるが、代わりに--vault-idオプションで置き換えることもできる。 --vau
1000台同時SSHオペレーション環境を構築するにあたって、手元のローカル環境の性能限界の問題を解決するために、オペレーションサーバをSSHクライアントとすることによりSSH実行を高速化した。実行環境としてDocker、レジストリとしてAmazon ECR(EC2 Container Registry)を用いて、ローカル環境とオペレーションサーバ環境を統一することにより、オペレーションサーバの構成管理の手間を削減した。 はじめに システム構成 実装上の工夫 オペレーションサーバ越しのroot権限実行 rawモジュールとscriptモジュールのみの利用 Ansibleの実行ログのGit保存 まとめと今後の課題 はじめに 3年前に Ansible + Mackerel APIによる1000台規模のサーバオペレーション - ゆううきブログ という記事を書いた。 この記事では、ホストインベントリと
GMOアドマーケティングのインフラ開発本部あだちんです。 久しぶりにDockerネタなのですが、 今までローカル開発環境はVagrantを使用していました。 Vagrantだとリソースも食うし、IPも管理しないといけないし、なによりも重いんですね。 なので全てDocker(Docker machine)で検証するようにしました。 そこで、インフラチームのリーダに構成管理ツールは「ansible」に統一しましょう! となったのでansible playbookのテストとして、 Dockerのコンテナがansibleで自動で立ち上がって自動でパッケージ入れて そんなこと出来ないかなと考えていたわけです。 今回はその方法をブログしましょう。 ■Docker connection pluginについて その前にDocker connection pluginについて説明しましょう。 これはDock
やりたいこと Ansible の template モジュールを使って、同じディレクトリにある多数のテンプレートファイルをサーバ上に展開したい。例えば Apache の .conf ファイルなどを想定する。Ansible のファイル構成は Best Practice を前提とする。 具体的には、with_fileglob を使って次のような task を書きたい。 - name: put apache config files template: src={{ item }} dest=/etc/httpd/conf.d/{{ item }} with_fileglob: - etc/httpd/conf.d/*.j2 しかしこの書き方にはいくつか問題がある。 問題点 その1: 配置ディレクトリの問題 ドキュメントにも書かれている通り、with_fileglob は templates デ
「初めてのAnsible」を読み進めながらのメモ 前掲 初めてのAnsible(1章:イントロダクション) 初めてのAnsible(2章:Playbook:始めてみよう) 初めてのAnsible(3章:インベントリ:サーバーの記述) 初めてのAnsible(4章:変数とファクト) 初めてのAnsible(7章:複雑なPlaybook) 初めてのAnsible(8章:ロール:プレイブックのスケールアップ) 初めてのAnsible(9章:Ansibleの高速化) 必要なら自分でモジュールかいてプルリクエストなげてみたらって章 Ansibleモジュール群のGitHub ansible/ansible-modules-core ansible/ansible-modules-extras カスタムモジュール Ansibleのモジュールを記述する手段として2通りを挙げている Pythonで記述する場
はじめに Ansibleのモジュールは、ansibleコマンドやansible-playbookコマンドから利用されるスクリプトです。 モジュールは、引数を受け取り、何らかの処理を実行した後に、標準出力にJSON形式で実行結果を出力します。 +---------+ +----------------+ | ansible +---{引数を格納したファイル}--->| module program | +----^----+ +--------+-------+ | | +----------{戻り値:stdout(JSON形式}-----------+ 引数 引数は以下のようにハンドリングされます。(※v2系の場合) モジュールには、引数としてkey=value形式のパラメータを渡すことができます 引数は、パラメータファイル(ファイル名:args)に書き込まれます Ansibleは、モジュ
The Problem After some time spent writing Ansible playbooks, one often discovers repetitive patterns of actions that she would like to extract in a single function in order to stay DRY and increase readability. For instance, my team has a frequent need to backup files and directories before applying any modifications to some machines. Those machines are legacy ones that have been setup a long time
Ansible はデフォルトではリモートのホストに入っている標準の python を使用します。 これを virtualenv 環境など、標準のパス以外の場所の python を使いたい場合には、ansible_python_interpreter 変数で python インタプリタのパスを指定するようです。 List of Behavioral Inventory Parameters http://docs.ansible.com/ansible/latest/intro_inventory.html#list-of-behavioral-inventory-parameters vars: ansible_python_interpreter="/root/python-venv/bin/python" ただ、手元の CentOS 6.4 環境で、この方法で virtualenv 環
はじめに こんにちは、最近どっぷりサバゲーにハマってる藤本です。 Ansibleは数多くの標準モジュールを提供しています。標準モジュールを利用、もしくは標準モジュールを組み合わせて利用することで多くの設定を実現することができます。それでもケースによっては標準モジュールではできないことを実施したくなることがあります。そういった場合にAnsibleは独自のモジュールを実装することで任意の処理を行うことができます。今回は公式ドキュメントをなぞってみて、Ansibleで独自のモジュールを作成する基礎をご紹介します。 その他のAnsibleのモジュール開発シリーズは以下をご参照ください。 Ansibleのモジュール開発(Python実装編) Ansibleのモジュール開発(実践編) Ansibleのモジュール開発(テスト編) 公式ドキュメントのページは以下となります。 http://docs.ans
Ansible で MySQL のレプリケーションを設定してみたのでまとめておく。思いのほか苦戦した。 前提 今回は以下のような条件で MySQL のレプリケーションを設定することを目的とする。 OS はマスタ、スレーブともに Ubuntu Server 12.04.x を使う 1台のマスタと、1台以上のスレーブを設定する 途中からでもスレーブを追加できる スレーブでレプリケーションが停止していたら、マスタと再同期して再開させる そのためにマスタを停止はしない my.cnf の replicate-ignore-table に含まれるテーブルは同期から除外する root パスワードはホストごとに自動生成する server-id も自動生成する DB やユーザの作成は含めない 完成品 できあがったものがこちらでーす。 akagisho/mysql-replication-ansible –
ansibleでは、コマンド実行結果をRegistered variableに突っ込んで便利に使えます Registered Variablesとは? ターゲットホストで実行したコマンドの結果を任意の変数に入れることができます。 使い方を見ていきます。ansibleのバージョンは 1.9.4 です。 サンプルとして、簡単なplaybookを作成しました。 --- - hosts: 127.0.0.1 connection: local tasks: - name: exec whoami shell: whoami register: result - name: debug result var debug: var=result whoamiコマンドの実行結果をregisterキーワードで設定した result 変数に受け、次のdebugタスクでハンドリングします。 変数の中身はどうな
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く