かべぎわブログ

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

Ansible

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の場…

ansible-docをつかってコンソールからmoduleの詳細を確認する

みなさんしってるかもしれませんが自分は知らなかったので展開します。 ansible-docsというコマンドがあります。 これを利用することでコンソールからコマンドで各moduleの詳細を確認することができます。 manみたいなかんじです。 実際にやってみる たとえ…

AnsibleのホストパターンはAND(&)で指定ができる

AnsibleのホストパターンではAND条件で2つのグループに所属するノードのみを対象として実行することが可能です。 概要 例えば以下のような感じで:&で複数グループをつなげてあげます。 $ ansible -i ansible_hosts servers:&develop -m ping このときインベ…

Ansibleでタグをつかって特定の処理のみ実行する

今回はAnsibleを利用して特定の処理だけを実行する方法をご紹介します。 playbookのいらないところをコメントアウトしていろいろためして… みたいなことが不要になります! 概要 taskの中にtagsでタグをつけておいて、ansible-playbookコマンドの実行時に--t…

AnsibleでWindowsのショートカットを作成する

Ansibleを利用してWindowsにショートカットを作成してみます。 今回はためしにInternet Explorerのショートカットを作成してみようと思います。 実行コマンド $ ansible-playbook -i ansible_hosts win_shortcut.yml playbookは以下のようにしています。 Int…

AnsibleでWindowsにAWS CLIをインストールする

今回はAnsibleでWindows環境にAWS CLIをインストールしてみたいと思います。 事前準備 AWS公式からAWS CLIのインストーラをダウンロードしてきます。 aws.amazon.com 以下の赤枠から32ビットまたは64ビットのものをダウンロードします。 Ansibleを実行する …

Windows環境でPythonをコマンドでサイレントインストールする

今回はWindows環境でPythonをコマンプロンプトなどを利用してサイレントインストールしてみたいと思います。 コマンド 以下のコマンドをコマンドプロンプトで実行することでPyhtonをインストールすることができます。 C:\\python-3.6.3.exe /quiet InstallAl…

AnsibleでEC2インスタンスを作成してみる

AnsibleでEC2インスタンスを作成してみようと思います。 環境 Ansible 2.4.2 python 2.7 インスタンスを作成してみる インスタンスを作成してみます。 実行コマンド $ ansible-playbook -i ansible_hosts instance_create.yml playbookは以下のようにしてい…

Ansibleのホストパターンは正規表現も利用できる

知らなかったので備忘録的メモです。 Ansibleのホストパターンは正規表現でも利用できました。 例えば以下のように指定が可能です。 正規表現の前には~を忘れないであげてください。 $ ansible -i ansible_hosts "~(test|wawawa)_server" -m ping このとき、…

Ansibleのホストパターンにはワイルドカードが利用できる

知らなかったので備忘録的メモです。 例えば、以下のように指定が可能です。 $ ansible -i ansible_hosts *_server -m ping このとき、インベントリとして利用しているansible_hostsがこのような内容のとき、test_serverとwawawa_serverにpingが実行されます…

EC2 External InventoryでプライベートIPで取得したい

AnsibleのEC2 External InventoryでEC2インスタンスの情報を取得したとき、デフォルトのままだと以下のようにIPアドレスがパブリックIPで表示されるかと思います。 $ ./ec2.py { "_meta": { "ap-northeast-1a": [ "54.xxx.xxx.xxx", "13.yyy.yyy.yyy" ], "ta…

AnsibleのEC2 External Inventory で ERROR: "Forbidden", while: getting ElastiCache clusters エラーの解決法

事象 AnsibleでEC2 External Inventoryを試そうとしていたところ、以下のようなエラーがでてしまいました。 $ ./ec2.py ERROR: "Forbidden", while: getting ElastiCache clusters 解決法 ec2.iniのElastiCacheを無効にしたらうまくいきました。 以下のとこ…

EC2 External Inventoryを利用してAnsibleのhostsを動的に管理する

Ansibleを利用した構成管理では、実行対象のホストをインベントリファイルと呼ばれるファイルに記載しておく必要があります。 以下のようなかんじ [local] localhosts [test_server] 192.140.1.1 192.140.1.2 [web_server] 192.140.2.1 これだと、AWSでAutoS…

Ansibleでgit cloneを実行する

今回はAnsibleでgit cloneを実行する方法をご紹介します。 今回はテスト用に以下のリポジトリを利用してみます。 https://github.com/takakabe/blog_RaspberryPi 前提条件 各ターゲットノードに以下のモジュールが必要です。 git>=1.7.1 (the command line t…

AnsibleでS3からファイルをダウンロードする3つの方法

AnsibleでS3からファイルをダウンロードする方法を紹介します! ① s3_getを利用する AnsibleのCloudModuleであるs3_getを利用する方法です。 前提条件 ターゲットノードにS3へのアクセス許可が必要 実行コマンド $ ansible-playbook -i ansible_hosts s3_get…

Ansibleでboto3 and botocore required for this moduleというエラーがでたときの対処法

事象 AnsibleでS3を操作しようとしていたところ、以下のようなエラーが出てしまいました。 PLAY [s3_get] ***************************************************************************************************** TASK [Gathering Facts] ***************…