かべぎわブログ

技術的なことについてかけたらいいな…

Ansible

Ansibleのwin_fileでファイルやフォルダを作成/削除する

概要 Ansibleのwin_fileモジュールを利用して、Windows上にファイルやフォルダを作ったり、それを削除してみたいと思います。 ファイルを作成する 以下のようなかんじでファイルを作成することができます。 ファイルが存在しない場合は空ファイルが作成され…

Ansibleのshellとwin_shellに複数行のコマンドを記載する

概要 Ansibleのshellとwin_shellモジュールの中で複数行にわたるコマンドを記載してみたいと思います。 playbook例 実行してみる こんなかんじでechoが3行出力されていることがわかる。 $ ansible-playbook shell_fukusuu.yml -v PLAY [localhost] *********…

Ansibleのstart-atを利用してplaybookの途中から実行する

概要 Ansibleのplaybookを途中から実行する方法をご紹介します。 これを利用することでplaybookの途中でエラーでとまっちゃったんだけど初めからやり直すのめんどくさいなーというときに便利です!!! playbook例 playbookはなんでもいいです。 てきとーにd…

Ansibleでjinja2のifをつかって条件分岐させる

概要 Ansibleのplaybookの中でjinja2の記法をつかって条件分岐させてみたいと思います。 playbook例 prodがhonならhonban、kaiならkaihatsuと出力するように設定しています。 実行してみる honbanと出力されていることがわかります。 $ ansible-playbook jin…

Ansibleのwait_for_connectionをつかってOSの再起動を待つ

概要 Ansibleのwait_for_connectionを利用してターゲットノードのOSを再起動の完了を待ってみようと思います。 playbook例 shellでサーバの再起動を実施しています。asyncとpollを指定することでsshコネクションが切断されても処理をそのまま続けることがで…

AnsibleでターゲットのIPアドレスを取得する

概要 Ansibleを利用してターゲットノードのIPアドレスを取得してみたいと思います。 playbook例 実行してみる IPアドレスが出力されていることがわかります! $ ansible-playbook default_address.yml -v PLAY [target] ***********************************…

Ansibleのblockinfileモジュールをつかってテキストファイルに行を追加する

概要 Ansibleのblockinfileモジュールをつかってテキストファイルに任意の行を追加してみたいと思います。 playbook例 実行してみる $ ansible-playbook blockinfile.yml -v PLAY [localhost] ************************************************************…

Ansibleのreplaceモジュールをつかって文字列を置換してみる

概要 Ansibleのreplaceモジュールを利用して、テキストファイルなどの文字列を置換してみようと思います。 playbook例 ちょっとした説明 destで置換したいファイルを指定します。 regexpで置換したい文言を指定します(正規表現可) replaceで置換後の文言を指…

Ansibleでcronを設定してみる

概要 Ansibleのcronモジュールを利用してcrontabを設定してみようと思います。 playbook例 以下のように設定しています。 minuteやhourなどにcronで実行したい時間を設定します。 省略すると*扱いとなります。 jobは実行したいコマンドです。 実行してみる $…

Ansibleのhostnameモジュールでホスト名を変更する

概要 Ansibleのhostnameモジュールを利用してサーバのホスト名を変更してみます。 playbook例 こんなかんじで自分自身のホスト名をwawawa_serverに変更しています。 become: trueで実行しないと権限の関係で変更ができない可能性があるので要注意です。 実行…

Ansibleのexpectで対話型のスクリプトを実行してみる

概要 Ansibleのexpectを利用して対話型のスクリプトを実行してみようと思います。 準備 Ansibleでexpectモジュールを利用するためにはpexpectのインストールが必要です。 以下のコマンドでインストールしておきます。 $ sudo pip install pexpect playbook例…

Ansibleのバージョンを指定してインストールする

概要 Ansibleの特定のバージョンをインストールする方法をご紹介します! バージョンを指定してインストール たとえば、バージョン2.4.3をインストールする場合は以下のコマンドのようにバージョンを指定してpip installを実行します。 $ sudo pip install a…

Ansibleのblock内のalwaysの動きを確認してみる

概要 Ansibleのblockのなかでalwaysディレクティブを指定してみて動きを確認してみます。 alwaysの説明 alwaysはblock内で指定できるディレクティブで、その名の通りいつでも実行される処理です。 タスクが成功しても失敗しても実行されるため、エラーハンド…

Ansibleのblock内のrescueの動きを確認してみる

概要 Ansibleのblock のなかでrescureディレクティブを指定してみて動きを確認してみます。 そもそものrescueの説明 rescueはblock内で定義したタスクのどれかがエラーになったときに実行する処理を記載することができるディレクティブです。 タスクが失敗し…

Ansibleでblockをつかってtagsを集約する

概要 Ansibleのblockを利用してtagsで実行するタスクを集約してみたいと思います。 playbook例 こんなかんじでblockでまとめることができます。 blockをつかわないとこんなかんじで毎回tagsを記載する必要がありました。 実行結果 blockでまとめたplaybookを…

Ansibleのwith_nestedの動きを確認してみる

概要 with_nestedディレクティブをつかうと2つ以上の配列をまわすことができます。 playbook例 こんなかんじのplaybookでwith_nestedされた結果をdebugで出力してみます。 動きを見てみる 実際に実行してみて動きを見てみます。 ansible-playbook -i ansible…

Ansibleのwith_itemsで複数の変数を利用する

概要 Ansibleのwith_itemsディレクティブで複数の変数を利用する方法をご紹介します。 playbook例 こんなかんじでwith_itemsの項目を{}で囲ってあげます。 実行例 msgの部分を見るとちゃんと指定したとおりに出力されていることがわかる。 $ ansible-playboo…

Ansibleのwith_itemsで一気にいろいろyumインストールする

概要 Ansibleのwith_itemsディレクティブというループ処理(シーケンシャル呼び出し処理)を実行できるものを利用して、いろいろ一気にyum installしてみたいと思います。 playbook例 playbookはこんなかんじです。 今回の例ではdockerとnginxをインストールし…

Ansibleでshellをつかってもchanged_whenで絶対にchangedにしない

概要 Ansibleでshellやcommandモジュールを利用すると、結果が常にchangedになってしまいます。 なんか気持ち悪いなーということで絶対にchangedにしない方法です。 playbook例 changed_when: Falseとすることで絶対にchangedにはならなくなります。 実行例 …

Ansibleのec2.pyの結果のJSONをホストグループ形式のファイルにしてみる

AnsibleでAWSのイントラを管理するときに利用するec2.pyの結果で応答されるJSONを人間に優しいホストグループ形式に変換してみたいと思います。 スクリプトはこんなかんじ スクリプト自体はこんなかんじです。 シェルスクリプトでsedで変換かけているだけで…

Ansibleでプロキシ経由でインターネットに接続する

概要 社内イントラなど、プロキシを経由しないとインターネットと接続できないのでyumでインストールができない。など色々あると思います。 今回はAnsibleでプロキシを経由してインターネットと接続してみたいと思います。 playbook例 以下のようにenvironme…

Ansibleで新規ホストへのssh接続時にyes/noを確認しないようにする

概要 Ansibleではターゲットへssh接続をしています。 ですので、sshのデフォルトの動きとして新規ホストへの接続時は以下のように「接続するかい?いいかい?」と聞かれます。 Are you sure you want to continue connecting (yes/no)? ですので今回はそれを…

AnsibleでAnsibleをインストールする

概要 AnsibleでAnsibleをインストールします。 なんとAnsibleを実行するだけでAnsibleをインストールすることができます。 playbook rpmをwgetしてきて、epelリポジトリを追加して、yumでAnsibleを実行しています。 おわりに おわれ Ansible実践ガイド 第2版…

AnsibleでCentOSにAWSCLIをオフラインインストールする

概要 Ansibleを利用してCentOSにAWSCLIをオフラインインストールしてみます。 playbook例 ちょっとした制限事項と前提 なんらかの方法でAnsibleを実行するサーバにAWSCLIのバンドルされたインストーラを格納する必要があります。 ↓これ https://s3.amazonaws…

Ansibleでwhenをつかってエラーハンドリングしてみる

概要 whenディレクティブを利用してAnsibleのplaybookでエラーハンドリングしてみます。 概要 playbook ちょっとした解説 実行結果 コピーの結果ファイルが変更されたとき コピーしてもファイルに変化がなかったとき コピーが失敗したとき コピーがスキップ…

AnsibleのGathering Factsを実行しないようにする

今回はansible-playbookを実行するときに毎回実行されるGathering Factsを実行しないように設定してみたいと思います。 (意外と実行に時間がかかってるようなきがするので) そもそもGathering Factsってなにやってんの? ターゲットノードのメタデータ(IPア…

Ansibleのファクト変数を確認する

Ansibleのファクト変数を見てみたいと思います。 そもそもファクト変数とは? ターゲットノードのメタデータが格納されている変数のことです。 IPアドレスからCPUやディスクの情報などを見ることができます。 特に意識しなくてもデフォルトでansible-playboo…

Ansibleのwin_commandでは%path%などの変数はつかえないのでwin_shellをつかおう

Ansibleのwin_commandでは%path%などの変数はつかえないのでwin_shellをつかおうというはなし(戒め) やってしまったこと こんなかんじでwin_commandでPATHを追加しようとした。 win_command: setx /M path "%path%;C:\Program Files (x86)\wawawa" 得られた…

handlersセクションではlistenを使うことで処理を複数個記載することができる

概要 さて、今回もAnsibleのhandlersセクションのおはなしです。 handlersセクションではタスクに更新(changed)があった場合にのみ実行することができるセクションです。 いままではhandlersには一つのタスクしか紐付けることができませんでしたが、Ansible …

Ansibleでhandlersとnotifyをつかってみる

今回はAnsibleでhandlersとnotifyを使って更新があった場合にのみ実行される処理をためしてみたいと思います。 handlersとは? handlersとはchangedになった場合にのみ実行するタスクを記載できるセクションです。 playbook例 たとえば、以下のplaybookの場…