Python의 slackbot 라이브러리에서 terraform plan을 실행하십시오.

6/18 추가
여러가지 개량한 것을, 다른 기사로 투고했습니다.
htps : // m / an d romeda / ms / 32 A 6 Ae 52 또는 2cf50449 E 2

소개



상기로 파이썬에서 terraform plan을 실행하고 slack에 알리기 를 투고했습니다.
이번에는 slack bot에 실행하겠습니다

사전 준비



  • slack bots 을 생성하여 API 토큰을 얻습니다 (토큰을 사용하는 IP 제한을 받을 수 있습니다.)
  • bot를 채널에 초대 한다
  • slack bot 라이브러리 설치
  • $ 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을 취급했습니다만 여러가지 할 수 있다고 생각합니다!
    뭔가 자동화 할 수있는 재료 찾고 도전 해보고 싶습니다!

    좋은 웹페이지 즐겨찾기