Python의 slackbot 라이브러리에서 terraform plan을 실행하십시오.
여러가지 개량한 것을, 다른 기사로 투고했습니다.
htps : // m / an d romeda / ms / 32 A 6 Ae 52 또는 2cf50449 E 2
소개
상기로 파이썬에서 terraform plan을 실행하고 slack에 알리기 를 투고했습니다.
이번에는 slack bot에 실행하겠습니다
사전 준비
slack bots 을 생성하여 API 토큰을 얻습니다 (토큰을 사용하는 IP 제한을 받을 수 있습니다.)
$ sudo pip install slackbot
환경 준비(디렉토리/파일 작성)
terraformer_by_python.py
파일은 위의 일 script를 사용합니다.├── slackbot # botのプログラムファイルをまとめるディレクトリ
│ ├── models # botの機能(応答とか処理とか)をまとめるパッケージのディレクトリ
│ │ ├── __init__.py # パッケージとして示すためのファイル(空でよい)
│ │ ├── my_mention.py # 機能を書くファイル
│ │ ├── terraformer_by_python.py # terraform planを実行するscript
│ ├── run.py # このファイルを実行するとbotが起動する
│ ├── slackbot_settings.py # botの設定ファイル
스크립트 파일
run.py
파일run.py
# coding: utf-8
from slackbot.bot import Bot
def main():
bot = Bot()
bot.run()
if __name__ == "__main__":
main()
slackbot_settings.py
파일slackbot_settings.py
# coding: utf-8
# 取得したAPIトークン
API_TOKEN = "XXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXXXXXXXXXXXX"
# プラグインスクリプトを置いてあるサブディレクトリ
PLUGINS = ['models']
my_mention.py
파일my_mention.py
# coding: utf-8
from slackbot.bot import respond_to # @botname宛てで反応するデコーダ
from slackbot.bot import listen_to # チャンネル内の発言に反応するデコーダ
from slackbot.bot import default_reply # 何れも該当しない場合に反応するデコーダ
import terraformer_by_python
import json
prj_config = "/terraform/prj_config.json"
@default_reply()
def default_func(message):
message.reply("```コマンド(メンション必要です)\n\
list : terraformer管理project一覧\n\
plan : 全projectのterraform plan実行\n\n\
私が落ちてたら以下のサーバで \n\
'nohup python /terraform/slackbot/run.py &' を実行して下さい\n\
botが稼働しているgceのリンク\n```")
@respond_to(r'^list.*')
def list_func(message):
with open(prj_config, "r") as config_file:
json_data = json.load(config_file)
reply = json.dumps(json_data,indent=4)
message.reply("```\n追加削除はこのファイルです ⇒ /terraform/prj_config.json\n{}```".format(reply))
@respond_to(r'^plan.*')
def plan_func(message):
message.reply("ok! ちょっと待ってて!")
terraformer_by_python.main()
한 개씩 봅니다.
@default_reply
다른 디코더(
respond_to
)에 해당하지 않는 경우에 반응합니다.응답은
message.reply
로 멘션으로 응답하고 message.send('string')
로 멘션 없이 응답합니다.# message.reply('string') @発言者名: string でメッセージを送信
# message.send('string') string を送信
@default_reply()
def default_func(message):
message.reply("```コマンド(メンション必要です)\n\
list : terraformer管理project一覧\n\
plan : 全projectのterraform plan実行\n\n\
私が落ちてたら以下のサーバで \n\
'nohup python /terraform/slackbot/run.py &' を実行して下さい\n\
botが稼働しているgceのリンク\n```")
이런 식으로 응답이 돌아옵니다.
gcp상에서 상시 가동시키고 있으므로, gce의 링크와 떨어졌을 경우의 기동 커멘드를 쓰고 있습니다.
@respond_to
bot에게 (멘션 첨부)의 메세지를 줍습니다. 정규 표현으로 지정이 가능합니다.
이번은 bot 앞으로, 선두에
list
가 있으면, terraform로 관리하고 있는 프로젝트 일람의 파일을 돌려주도록 하고 있습니다.# @respond_to('string') bot宛のメッセージ
# stringは正規表現が可能 「r'string'」
import json
prj_config = "/terraform/prj_config.json"
@respond_to(r'^list.*')
def list_func(message):
with open(prj_config, "r") as config_file:
json_data = json.load(config_file)
reply = json.dumps(json_data,indent=4)
message.reply("```\n追加削除はこのファイルです ⇒ /terraform/prj_config.json\n{}```".format(reply))
그런데 메인입니다만, 선두에
plan
가 있으면, 상기의 일로 쓴 script 를 실행해 terraform plan 의 결과를 돌려주도록(듯이) 하고 있습니다.import terraformer_by_python
@respond_to(r'^plan.*')
def plan_func(message):
message.reply("ok! ちょっと待ってて!")
terraformer_by_python.main()
마지막으로
처음으로 slackbot을 취급했습니다만 여러가지 할 수 있다고 생각합니다!
뭔가 자동화 할 수있는 재료 찾고 도전 해보고 싶습니다!
Reference
이 문제에 관하여(Python의 slackbot 라이브러리에서 terraform plan을 실행하십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/andromeda/items/d68a0c36667cc802987c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)