AWXで複数バージョンのAnsibleを実行出来るようカスタム仮想環境を用意する
前ふり
これの続き。
よこちさんに教えてもらったのでやってみた。
カスタムvirtualenvの作成なんですが、インストール時の inventory の custom_venv_dir って設定を有効にすると、コンテナにマウントしてくれるので、コンテナ内に直接作らなくってすみました!https://t.co/u3nwyRPy1M
— よこち(yokochi) (@akira6592) 2020年6月28日
前提環境
CentOS:7.8
Python:3.6.8
AWX:15.0.1
カスタム仮想環境のパス:/opt/awx-envs/
AWXはインストーラ使ってセットアップしたdocker-composeで稼働。管理用RDBはAWXと同じ Docker Compose内のServiceとする。
※今回はAWXがどうのこうのは関係ないのでセットアップについては割愛。詳細は、 awx/INSTALL.md at devel · ansible/awx を参照。
結論
出来たけど罠があるので注意。
仮想環境には pip で psutil を入れないとダメ。
詳細
正しい手順は awx/custom_virtualenvs.md at devel · ansible/awx となります。 おそらく、 Feature: custom virtual environment directories by vismay-golwala · Pull Request #3320 · ansible/awx にて仮想環境を変更出来る機能が追加されてたようです。
実施する前に、デフォルトの仮想環境でインストールしているpipをチェック。
$ docker-compose exec task bash bash-4.4# cat /var/lib/awx/venv/ansible/requirements.txt/requirements.txt jinja2 kubernetes ~= 11.0.0 python-string-utils ruamel.yaml >= 0.15 six
仮想環境の作成
作成したい仮想環境を作成
mkdir /opt/awx-envs/ cd /opt/awx-envs/ python3 -m venv ansible2-7 source ansible2-7/bin/activate
pip install向けに ansible2-7/requirements.txt を作成
cat ansible2-7/requirements.txt psutil ansible ~= 2.7.0 jinja2 python-string-utils ruamel.yaml >= 0.15 six
※ポイントは、最低でもpsutilとansibleは必要です。
pip install実施
pip install -r ansible2-7/requirements.txt
セットアップされたライブラリはこちら。
(ansible2-7) [root awx-envs]# pip freeze ansible==2.7.18 bcrypt==3.2.0 cffi==1.14.3 cryptography==3.2.1 Jinja2==2.11.2 MarkupSafe==1.1.1 paramiko==2.7.2 psutil==5.7.3 pycparser==2.20 PyNaCl==1.4.0 python-string-utils==1.0.0 PyYAML==5.3.1 ruamel.yaml==0.16.12 ruamel.yaml.clib==0.2.2 six==1.15.0
必要であれば、他にも同様にして、ansible ~= 2.9.0
にした ansible2-7
や ansible ~= 2.10.0
にした ansible2-10
なども作成する。
※他にも必要なライブラリがあれば入れる。
インストーラでcustom_venv_dirを利用するよう変更
AWXのインストーラの設定( awx/installer/inventory
)で、以下のように custom_venv_dir
をコメントアウトして、custom_venv_dir
の設定にフルパスで指定
# AWX custom virtual environment folder. Only usable for local install. # require: psutil -> sudo yum install gcc python3-devel custom_venv_dir="/opt/awx-envs/"
インストーラを実行して設定を反映。 AWXのインストール先のdocker-compose.ymlのwebとtaskのserviceに custom_venv_dir で指定したパスをマウントしているのが分かります。
(略) : web: image: ansible/awx:15.0.1 container_name: awx_web depends_on: - redis - postgres ports: - "80:8052" hostname: awxweb user: root restart: unless-stopped volumes: - supervisor-socket:/var/run/supervisor : - "/opt/awx-envs/:/opt/awx-envs/:rw" ・・・・★ : (略) task: image: ansible/awx:15.0.1 container_name: awx_task depends_on: - redis - web - postgres command: /usr/bin/launch_awx_task.sh hostname: awx user: root restart: unless-stopped volumes: - supervisor-socket:/var/run/supervisor : - "/opt/awx-envs/:/opt/awx-envs/:rw" ・・・・★ (略)
AWXの設定変更
AWXの起動後、AWXのWeb UIで設定。
AWXの「設定」→「システム」にて、下図のようにカスタム仮想環境のパスに /opt/awx-envs
を入れて、「保存」ボタンを押下して反映。
次に、設定したカスタム仮想環境を利用したいプロジェクトを選択して、下図のように、「ANSIBLE環境」から利用したいカスタム仮想環境を選択し、「保存」ボタンを押下して反映。
動作確認
使えるか確認。 テンプレートから設定したプロジェクトのジョブテンプレートを選択して実行。
環境がカスタム仮想環境になっているのが分かります。
最後に
これまでは、AWXのインストーラで指定する最新のAnsibleバージョンを使い続けなければならず、AWXの更新が大変でした。
今回のカスタム仮想環境を利用することで、実行するAnsibleのバージョンを固定出来るので、頻繁にAWXをアップデートする更新に追随するもの楽になると思います。
注意事項
custom_venv_dirは「フルパス」で1つだけ。
awx/docker-compose.yml.j2 at 17b5b531bf36e337995aa46735c1b598b2e686fb · ansible/awx · GitHub
をみると分かりますが
volumes: - supervisor-socket:/var/run/supervisor : {% if custom_venv_dir is defined %} - "{{ custom_venv_dir +':'+ custom_venv_dir +':rw' }}" ・・・★ {% endif %}
docker-composeのテンプレが上のとおり、custom_venv_dirをそのままマウントするのでフルパス指定が必要です。
下手にホームディレクトリのどっかを指定してしまうとハマるかも。無難に /opt
とか /var/lib
辺りに作成するのが良いかも。
cf. volumes - Compose file version 2 reference | Docker Documentation
おまけ
他のカスタム仮想環境の設定方法
http://XXXX/api/v2/settings/system/ にアクセスすると設定値が見えます。
おそらく下図の用に変更してもCUSTOM_VENV_PATHSの変更出来るはず。
awx/custom_virtualenvs.md at devel · ansible/awx · GitHub にあった
$ HTTP PATCH /api/v2/settings/system/ {'CUSTOM_VENV_PATHS': ["/opt/my-envs/"]}
あたりのくだりはそういう意味だったのね。。。
踏み台経由してWebUIにローカルからアクセスするメモ
たまにやりたい時に忘れてて探すのがだるいのでメモ。
あるサーバで稼働しているWebシステムにアクセスする際、 踏み台(jump host、jump server)を経由しなければならない場合のTips。
前提条件
http://webui.internal:5678 で稼働しているWebUIにアクセスしたいが踏み台経由しないとローカルからアクセス出来ない
実行イメージ
ローカルから http://localhost:1234 でアクセスしているけど、踏み台経由して http://webui.internal:5678 にアクセスしている
やり方
~/.ssh/config
の設定追加
~/.ssh/config
に以下を追加
# 踏み台の設定 Host jump HostName jump.example.com User yassan IdentityFile ~/.ssh/id_rsa # 踏み台を経由してアクセスしたいサーバ Host webui Hostname webui.internal User yassan Port 22 ProxyCommand ssh -W %h:%p nagatomi@jump LocalForward 1234 webui.internal:5678
踏み台経由してローカルとwebui.internalをつなぐ
アクセスしたい時にターミナルで以下を実行
$ ssh -N webui yassan@webui.internal's password: XXX # webui.internalのPWを入力
※ターミナルは起動しっぱなし
-N
: リモートコマンドを実行しない。単にポートの中継だけを行う。
ブラウザでアクセス
ブラウザにて以下の用にアクセス http://localhost:1234
止めたい場合
起動しているターミナルで Ctrl+C でsshをkillする。
おまけ
ssh -N webui
を実行する際に -f
を追加して、バックグランド実行してもOKだけど、探すのが面倒なのと消し忘れるのであえてやってない
補足
AWXの環境構築をもうちょい良い感じにしたいところ
公式の方法+αくらいで、Docker Composeで稼働するAWXのセットアップ方法をまとめてみた。
コンテナのログ見たら、公式そのままだとちらほらエラーが出てたので、色々対策をしてある。
後、AWXって長時間稼働するので、コンテナログが膨大になるので、Logging Driverでローテートするとか別で吐くとかしないとDiskフルで死亡するので注意が必要(あるある案件)。
ただ、この構成だと、AWXからAnsibleのバージョンを変えて実行とか出来ないので、この辺りは対策したいところ。
例えばカスタムvirtualenv 1 を使って、python2とpyhton3のroleを共存出来るようにしたい。
また、以下にあるとおり カスタムvirtualenv はAWXでも使えるらしい。
ただし、dockerで動かしている場合?、awx_webとawx_taskの両方に作成しないとダメっぽい 2
dockerコンテナに入ってから手動でやるのは微妙オブ微妙なので、Dockerfileいじって変更するかな。
ただ、その場合は、AWXのインストーラの設定でDocker registoryの設定を追加する必要あり 3 。
後、KubernetesでもHelmでインストール出来るようなので、 Rancher Labs の K3s を使ってやっても面白そう。
インターネット利用可能な精神と時の部屋無いですかね?
追記:公開後、ありがたい情報を よこちさん から共有いただいたので追記!
カスタムvirtualenvの作成なんですが、インストール時の inventory の custom_venv_dir って設定を有効にすると、コンテナにマウントしてくれるので、コンテナ内に直接作らなくってすみました!https://t.co/u3nwyRPy1M
— よこち(yokochi) (@akira6592) 2020年6月28日
Why Should I write good commit messages? ~なんでコミットメッセージが大事なん?~
私は、SVNとかGitとか関係なしに、コミットメッセージは開発していく上でとても大事だと考えています。
昨今は、ソフトウェアエンジニアだけでなく、ITインフラエンジニアもコードを書く時代なのでその重要さはもっと上がっているとすら考えています。
ただ残念なことに「コードの差分からどんな更新であったかが分かるから不要」って乱暴な人もいますが、そんな事はありません。 私は過去の経験から意識して良いコミットメセージを書くことで以下の効果があると考えています。
良いコミットメセージを書くことで得られる効果
勘違いした 変更 or 修正 を探しやすくなる
その差分が本当にやりたかった事とイコールとは限りません。その為、良いコミットメッセージを書くことで、その食い違いに気がつくことが出来ます。
また、PRでレビューする際に、レビューアがそのコミットの正しさを確認するときにも非常に役に立ちます。
未来の自分や他のメンバにとって助けになる
良いコミットメセージを書くことで、後からその更新がどんなものであったかを探しやすくなります。
半年後、1年度、そのコミット内容説明できますか?そして、未来永劫、その会社に所属していますか?
障害発生時にコードを確認する際に「1年前のあのコミットって、なんで更新したんだろう?」って頭抱えた経験無いですか?
リファクタリングする際に、ここの更新意図が曖昧でほんとに正しく更新出来ているか悩んだ経験無いですか?
コミット粒度を意識するようになる
端的にコミットメセージを書けない場合は、コミット粒度が適切でない場合が多々あります。 例えば、変更や修正が混ざっているとか、更新サイズがデカイとか。
どうやって書いたら良いのか?
その為に必要な考え方や書き方について、私が書くよりも過去の素晴らしい記事を紹介した方が効率が良いので紹介します。
コミットメッセージの書き方(考え方)
- Gitのコミットメッセージの書き方 | POSTD
- Gitコミットメッセージのプラクティスまとめ | 酒と涙とRubyとRailsと
- Gitのコミットメッセージの書き方 - Qiita
- gitとプルリクエストに関して思うことまとめ - Qiita
コミットメセージの書き方(例文)
最後に
他にも良記事があれば、是非教えて下さい!
Google ChromeからFirefoxに浮気中だけどGoogle Chromeに戻りそうな件
Ubuntu 18.04 LTSを会社と私用で使っているのだけど、ブラウザのタブを大量に開く派閥の人なので、Google Chromeのメモリどか食い問題が深刻。
現在、Firefoxもどうかなぁと、浮気中なのだけど、より戻しそう。。。
私のブラウザの使い方
- 会社と私用でブックマークを分けたい
- タブをたくさん開く(10個とか普通。出来れば無限に開いておきたいくらい)
- 会社はG Suite使ってるので基本的に、Google Docs・Spreadsheet・Slideを使う(MS系は使わない)
Firefoxで困った事
会社と私用でブックマークは変えたいけど、Google Chromeのようにアカウント切り替えとかなかった。
Firefox Multi-Account Containersでブラウザで開くアカウントを切り替え出来るのは分かるけど、ブックマークは変更できない。。 そこで、Profileを会社と私用で分けることでブラウザのブックマークを会社と私用で切り替えられるようにした。
しばらく浮気してみた結果
🙆♂️ Google Chromeより描画が速い感じで良かった
🙆♂️ Google Chromeより同じくらいタブを開いてもメモリの消費が少なそう(前よりタブを開けるようになった)
🙆♂️ Firefoxタブのデバイス間のタブ同期が優秀(Chromeは重複しまくる)
🙅♂️ Googleスライドでグループ化したオブジェクトのコピペが出来ない(矢印と画像のグループで別のスライドにコピペすると画像だけ)
🙅♂️ Slackのメッセージのリンクを踏むと、Slack開いた時のProfileのプロセスが死んでたらリンクが開けない(Google Chromeならどっちかで開く)
🙅♂️ 複数ウィンドウ開いた状態で、一つのウィンドウを閉じた後に、「開いたタブを戻す」と直前に閉じたウィンドウごとタブを戻せない
🙅♂️ LINE拡張がない(Ubuntu用LINEアプリが無いので、家族との会話が不便)
より戻すきっかけ
こないだの rebuild.fm で、 The Great Suspender - Chrome ウェブストア が紹介されてて、
Firefox向けにも似たような拡張として Auto Tab Discard :: add0n.com があって試した結果、前よりさらに開けるようになった。
これ、Chromeでも同じ感じになるんジャマイカ?
追記:この後、よりを戻した。ただいまGoogle Chrome。
ミヨシのUSBタッチパッド( TTP-US01 )を半年使ってみて
こっちの長期利用メモ。
その昔、会社のMacを使っていたがどうしても体が受け付けず、Ubuntu Desktopに戻ったのだけど、その際、Macの体験で最高に良い体験だったのがTrackpadだった。 んで、UbuntuやWindowsマシンでもTrackpad使えないかなぁと思ってAppleのサイトみて見つけたのがこれ。
「うん。そうそう。これ。」って感じなのだけど、とてつもなく高い。お小遣いな私にはとても高いので見送り。
さて、どうしてものやらと諦めてたときに、CloudNativeDays のSlackチャンネルで挙がってたのを見て、お値段も手頃で失敗でもダメージが小さいのでお試しで使ってみた。
初見の印象がこれ。
MacのタッチパッドのようにWindows10でも扱えて超便利。しかもMacの純正に比べたら遥かに安いしこれホント良いわ。スクロール方向だけ替えたけど他はデフォルト設定で十分。>
— やっさん🍶@休み! (@yassan168) 2019年7月1日
ミヨシ の なめらかUSBタッチパッド TTP-US01/BK ミヨシ(MCO)https://t.co/FVWWLcX86P
値段もお安く、Windows10はもとより、Ubuntu 18.04でもちゃんと動く代物。
半年使ってみたので、レビューしてみる。
2019年の日本の井戸水を振り返る
この記事は、 日本酒 Advent Calendar 2019 - Adventar の 24日目の記事です。
毎年、恒例なのにウッカリしてた。。。
さぁ、今年も日本の井戸水を振り返ります。 今年飲んで美味しかったTop5を挙げて行きます。
大信州 秋の純吟
長野:大信州酒造株式会社
香りよく、軽い感じでスルスル行く感じで美味しかった。
不動 夏吟醸 30BY
千葉:鍋店株式会社
スッキリとして良い香りと生酒のフレッシュ感が夏って感じで美味しかった。
山本 サンシャインイエロー 山廃純米吟醸
秋田:山本合名会社
白瀑・山本で有名な秋田のNext5の1つ、山本合名会社 さんの山本。 夏の純吟。燗にして楽しむのが一般的(知らんかった)だけど、敢えて「冷やして楽しむフレッシュな山廃」がテーマだそうです。
確かにジューシーなフレッシュ感はとても美味しかった!スルスルーっと直ぐに飲んでしまう危ないやつです。
不動 出羽燦々 おりがらみ 純米吟醸 無濾過 生原酒
千葉:鍋店株式会社
またもや不動。
ここ数年お気に入りの酒蔵。不動シリーズが好みで去年も同じものを買ってる。 今年も美味しかった。おりがらみの天然のシュワッと感が好き。
澤屋まつもと 守破離 五百万石 うすにごり
京都:松本酒造
お正月に飲んだ最初の1本。守破離の限定「のうすにごり」。 香りが最高に良くてバランスの良い甘みとちゃんと後口スーッとキレる感じが、流石の食中酒って感じでした。最高に美味しかった!
さいごに
順位は?って思いました? どれも美味いのでこの5つは順番付けられないです。
これ以外にも熱燗のお酒も良かったし、ホントはどれも美味しい。もっと日本で日本酒が身近でコスパ高く美味しいって事が広まると良いな。
以上、24日目でした。