Fabricでサーバーを操作する

Python学習【365日チャレンジ!】245日目のマスターU(@Udemy11)です。

車検の期限が迫ってきているので、格安車検サービスを利用しようと思って無料見積もりに行ったのですが、想像していた金額を上回っていたので、とりあえずディーラーでも見積もりをもらうことにしました。

その際に格安車検サービスの見積書を渡していたからかもしれませんが、差額は1万円以内で、代車も用意してくれるとのことだったので、ディーラーで車検することに決めました。

格安車検サービスは、ディーラーの車検に比べてかなり安いイメージがあったので、サービスの充実を加味すると、ディーラーとそんなに変わらないということがわかりました。

あくまで一例なので、他のディーラーがすべて格安車検に比べて金額がそんなに変わらないというわけではありませんので、あしからず。。。

ディーラーの安心感が価格差を上回るかどうかということも重要ですので、いくつかのサービスを比較してみてください。

それでは今日もPython学習を始めましょう。

昨日の復習

昨日は、Fabricを使ってサーバーの名前をチェックしてみました。

Fabricを使えば、fabfile.pyに記述しした関数を使って、サーバーからコマンドを実行することができました。

envを使うことで、コマンドを省略して記述することもできました。

詳細については、下記の記事をごらんください。

今日は、デコレーターのrolesを使って関数を実行してみます。

roles

envを使って実行コードを短くできましたが、rolesを使えば、さらにサーバーを指定してコマンドを実行することができます。

from fabric.api import run, env, roles

env.hosts = ['root@172.16.200.101:22', 'root@172.16.200.102:22']
env.passwords = {
    'root@172.16.200.101:22': 'root',
    'root@172.16.200.102:22': 'root',
}

env.roledefs = {
    'web':['root@172.16.200.101:22'],
    'db':['root@172.16.200.102:22']
}

@roles('web')
def host_type():
    run('uname -s')

ハイライトしている部分が昨日のコードから変更した部分です。

rolesは、関数をデコレートするデコレーターで、9行目から12行目でenv.roledefsに代入したサーバーの値をデコレーターの引数に指定することで、指定したサーバーで関数のコマンド(uname -s)を実行することができます。

Fabricでサーバーを操作する

mainサーバーからfab host_typeを実行しているのは同じですが、webという名前で定義したserver1だけが実行されています。

同様に、14行目のデコレーターを@roles('db')に変更すれば、server2だけが実行されます。

host_file

次に、下記のコードを付け加えてみます。

@roles('db')
def host_file():
    run('ls -al')

この関数host_fileは、コマンドls -alを実行しますが、このコマンドは、ファイルの一覧を取得するコマンドになります。

この関数を18行目でrolesの引数に先程定義したdbを指定してデコレートしています。

ターミナルからfab host_fileを実行すると、server2のみファイル一覧が表示されます。

Fabricでサーバーを操作する

まとめ

酒井さんの講座を学習していると、Pythonでできないことはないんじゃないかと感じてきます。

Udemy講師 酒井さん プログラミング Python

どのようなことがしたいのか、筋道を立てて説明することができるのなら、それをコードに落とし込めば思ったような動作をさせることができます。

ただ、どのようにコードを書けばわからないだけで、この問題は数をこなしていけば徐々にやり方が分かってくると思います。

やっぱり継続することが大切なんですよね。

わかっているけど実際やろうと思えば難しいのが継続で、継続して学習できれば必ずゴールに辿り着きます。

かのエジソンも、成功するためには、諦めずに成功するまでやり続けることだと言ってますよね。

明日からもしっかりPython学習を継続していきたいと思います。

それでは明日もGood Python!