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
)を実行することができます。
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
のみファイル一覧が表示されます。
まとめ
酒井さんの講座を学習していると、Pythonでできないことはないんじゃないかと感じてきます。
どのようなことがしたいのか、筋道を立てて説明することができるのなら、それをコードに落とし込めば思ったような動作をさせることができます。
ただ、どのようにコードを書けばわからないだけで、この問題は数をこなしていけば徐々にやり方が分かってくると思います。
やっぱり継続することが大切なんですよね。
わかっているけど実際やろうと思えば難しいのが継続で、継続して学習できれば必ずゴールに辿り着きます。
かのエジソンも、成功するためには、諦めずに成功するまでやり続けることだと言ってますよね。
明日からもしっかりPython学習を継続していきたいと思います。
それでは明日もGood Python!