Ansible

AnsibleでコピーするときはSynchronizeモジュール使ったほうが幸せになれる

背景 Ansibleでターゲットホストに何かをコピーするとき copyモジュールを使ってる人はとても多いと思います。 しかし恐ろしいぐらい遅いため、ansible copy slow何かで調べると 色々対策が書かれている記事があると思います。 まあそれを試しても劇的な改善はなく、結果として意味のないものです。   Synchronizeモジュールを使う Ansible – synchronize Copyモジュールと同等のことをやってみます。 1. ターゲットホストにファイルを配置する [crayon-5b04590f54d20870400003/]   2. パーミッションを変更する [crayon-5b04590f54d2f297944502/] Synchronizeモジュールにもownerやgroupオプションはあるんですが これは Ansible 実行マシンに存在するユーザー、グループで且つ、 ターゲットホストにも存在しないといけないという制約があるので、 別タスクでパーミッション等を変更する必要があります。   比較 全部で350行ぐらいある Playbook の中のcopyモジュール版と Synchronizeモジュール版で比べた結果です。 Copy real 4m25.575s Synchronize real 2m12.755s 圧倒的

Ansibleのs3モジュールを使ってディレクトリごとアップロードする

梅雨の季節がやって参りました。 Ansibleのs3モジュールを使ってディレクトリごとアップロードする方法を覚え書きとして。   認証情報を環境変数に入れておく Ansibleで使うAWSの認証情報はPlaybookに書き込むか 環境変数を使うかで選べます。 万が一のことを考えて環境変数で管理したほうが良いと思います。 [crayon-5b04590f54fa7574647270/]   ファイルのアップロード [crayon-5b04590f54fb3226799403/]   ディレクトリごとアップロード(Ansible 2.3以降) [crayon-5b04590f54fb5130928039/] key_prefixがないとバケット直下にファイルが展開されちゃうので key_prefixを設定しておきます。 こうすると BUCKET_NAME/source/<sourcecodeの中身> ってなる。   boto required for this module Ansibleを実行するホストでAWSの操作をする場合、 botoとかいうPythonのモジュールをインストールします。 加えてdelegate_to: 127.0.0.1をタスクに追加しないとリモート先で実行されてしまって エラーが消えないのでご注意を。 逆にリモート先で行うならリモート先で実行します。 [crayon-5b04590f54fba612894440/]   それでも解決できない場合 引数にansible_python_interpreterをつけて実行する ansible-playbook -i production/hosts api.yml --extra-vars "ansible_python_interpreter=`(which python)" --user root --ask-pass hostsファイルにansible_python_interpreterをつける [crayon-5b04590f54fbd792892657/]  

AnsibleとMySQL 5.7で準同期レプリケーションを張る

覚書。 初めてAnsibleを触ってて少し躓いたところがあったので。   環境 ・Ansible 2.3.0 ・Percona server 5.7 (MySQL 5.7_     my.cnfを配置 Master用とSlave用のmy.cnfをリモート先へ送る。 [crayon-5b04590f55171831411837/]       rootパスワードを取得 MySQL 5.7から/var/log/mysqld.logにパスワードが記載されているので これを使って初期設定を行うらしい。 [crayon-5b04590f55176253239694/]       .my.cnfを/rootに設置 Ansibleのmysqlモジュールを使うために/root/.my.cnfにファイルを設置 [crayon-5b04590f55178208209643/] temp_my.cnf.j2 connect-expired-passwordが地味に大事 [crayon-5b04590f5517a059047625/]       rootパスワードを設定する 一時的なパスワードでは覚えられないので変更します。 パスワードの要件が厳しくなって大文字小文字記号数字で8桁以上とかだった気がする(覚えてない) [crayon-5b04590f5517c829603605/]       新しい.my.cnfを/rootに設置 [crayon-5b04590f5517e800849351/] new_my.cnf.j2 connect-expired-passwordを削除したバージョン [crayon-5b04590f55180606950016/]       anonymousユーザーを削除 [crayon-5b04590f55186191265788/]       レプリケーションユーザーを作成 [crayon-5b04590f55188487139678/]       FlushコマンドってAnsibleじゃ使えないよね…? [crayon-5b04590f5518a113995575/]       マスターDBからダンプして、スレーブにインポート [crayon-5b04590f5518c300421325/]       マスターのファイル名とポジションの取得 ここが一番詰まった。 Ansibleは異なるホスト間で変数の参照ができないので ファイル名とポジションの取得はスレーブのときに実行して、実際に実行するコマンドはマスター側で処理をする。 [crayon-5b04590f5518f877441738/]   Change master [crayon-5b04590f55194960883603/]       スレーブの開始 [crayon-5b04590f55196408832816/]       スレーブの状況確認 Slave_IO_Running と Slave_SQL_RunningがどっちもYesであることを確認 [crayon-5b04590f5519a950128256/]       マスターでロックしていたのを解除 [crayon-5b04590f5519d337726971/]