こちらの記事は Ansible 3 Advent Calendar 2019 25日目の記事になります。
今回は定期的にAnsibleのモジュール名をTweetするボットを作成したので紹介します。
Ansibleモジュール紹介
— matsumuratomonori (@ma2muratomonori) December 23, 2019
azure_rm_publicipaddress
Manage Azure Public IP Addresses
supported_by: community
version_added: 2.1https://t.co/f7XpVAYtBg
Ansibleモジュール紹介
— matsumuratomonori (@ma2muratomonori) December 22, 2019
win_psmodule
Adds or removes a Windows PowerShell module
supported_by: community
version_added: 2.4https://t.co/Vc6w6j844n
Ansibleモジュール紹介
— matsumuratomonori (@ma2muratomonori) December 22, 2019
oneview_ethernet_network_info
Retrieve the information about one or more of the OneView Ethernet Networks
supported_by: community
version_added: 2.4https://t.co/5fJNdRZaaq
Ansibleモジュール紹介
— matsumuratomonori (@ma2muratomonori) December 22, 2019
win_route
Add or remove a static route
supported_by: community
version_added: 2.4https://t.co/9BkqMLPdlQ
Ansibleモジュール紹介
— matsumuratomonori (@ma2muratomonori) December 22, 2019
script
Runs a local script on a remote node after transferring it
supported_by: core
version_added: 0.9https://t.co/TtWFWP07O0
元ネタ
今日のラッキーAnsibleモジュール
— よこち(yokochi) (@akira6592) December 2, 2019
そんなことないぽて〜 今日のモジュール紹介したいぽて〜
— 怒れるじゃがいも@Ansible AWX リリース早め (@angrypotato_jp) December 19, 2019
リポジトリ
python-tomo/twitter-ansible-bot | GitHub
開発環境を構築するためのDockerfileが含まれていますが実際のプログラム部分は赤枠のファイル のみです。
使い方
- Twitter APIへ登録しアプリケーションキーを発行する
- CircleCIとリポジトリを連携させる
- CircleCIへアプリケーションキーを登録する
- GitHubリポジトリでcronの設定を行う
1. Twitter APIへ登録しアプリケーションキーを発行する
登録方法は こちらのサイト の情報を参考にします
2. CircleCIとリポジトリを連携させる
3. CircleCIへアプリケーションキーを登録する
4. GitHubリポジトリでcronの設定を行う
twitter-ansible-bot/.circleci/config.yml でcronの設定を行います。赤枠の部分はそれぞれcronの設定とコードを配置するブランチになります。
初期設定だと毎時間25分になったらtestブランチに置かれたスクリプトが実行されます。
初期設定はmasterブランチしかないので以下のようなコマンドでtestブランチをGitHubリポジトリに作成します。
testブランチが作成された時点でcronが有効になります。
cd twitter-ansible-bot
git branch test
Git checkout test
git push origin test
また下の画像の部分の赤枠の部分でリポジトリにpushがあった時点で処理が走る設定になっています。testブランチにpushした瞬間にTweetが実行されれば設定は成功です。
改善点
エラー処理が甘い
モジュール情報を取得する処理を以下のように書いてますがモジュール情報が取得できない場合のエラー処理が書いてない
ansible-doc -l | awk '{print $1}' > list.txt
# Get total number of modules
total_number=$(cat list.txt | wc -l)
echo ${total_number}
# Set module number
module_number=$(echo $(($RANDOM % ${total_number})))
echo ${module_number}
# Set module name by random number
module=$(sed -n ${module_number}p list.txt)
echo ${module}
# Get module name
ansible-doc ${module} -j | jq ".${module}.doc.module" > module.txt
# Get short_description
ansible-doc ${module} -j | jq ".${module}.doc.short_description" > short_description.txt
# Get supported_by
ansible-doc ${module} -j | jq ".${module}.metadata.supported_by" > supported_by.txt
# Get version_added
ansible-doc ${module} -j | jq ".${module}.doc.version_added" > version_added.txt
bashの部分をPython3にしたい
作成者のPython力が低いので部分的にbashが使われています。これらをPython3に置き換えたい。
将来的にはAWS Lambdaに置き換えたい
作成者のPython力が低くbashが扱えるCircleCI上で動いてますが将来的にはAWS Lambdaに置き換えたい
参考リンク
Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ ※2019年8月時点の情報 | Qiita