*でFabricをインポート

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

思い切って、ハウズオブフレーバーズのチョコレートケーキを購入しました。

ハウスオブフレーバーズ チョコレートケーキ

ハウスオブフレーバーズは知る人ぞ知る日本一高いチーズケーキを販売する鎌倉のお店なのですが、チーズケーキはホールで1万5千円ほどします。

チョコレートケーキは少しリーズナブルですが、私にとっては、ちょっと贅沢な買い物でした。

なんとも言えない濃厚でしっとりした味わいでかなり満足したので、、また何かの機会に注文しようと思います。

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

昨日の復習

昨日は、Fabricの操作で処理を一度だけ行うruns_onceの使い方を学習しました。

一度だけ処理されるのですが、複数のサーバーで処理するコードだとしても、最初に読み込まれるサーバーのみでコードが実行されました。

それぞれのサーバーで初期化を行う作業では使えないので注意が必要です。

詳細については、昨日の記事を参考にしてみてください。

今日は、*(アスタリスク)を使ってFabricのメソッドをまとめて読み込んでコードを記述してみます。

*アスタリスク

これまでFabricについてfabric.apiからいくつかのモジュールを読み込みましたが、*(アスタリスク)を使うことで、ここにインポートすることなくモジュールを使うことができます。

from fabric.api import *

このコードでこれまでに学習してきたrunenvrolestaskparallelなどを使うことができるようになります。

local,put,cd,exists

実際に*でモジュールをインポートして、localputを使ってみます。

from fabric.api import *
from fabric.contrib.files import *

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

def files():
    run('ls -al')

@task
def clean_upload():
    local('ls -a')
    put('fabfile.py', '/tmp/fabfile.py')
    with cd('/tmp'):
        run('pwd')
        run('ls -a')
        print(exists('/tmp/fabfile.py'))

最初にfabric.apifabric.contrib.filesから*でメソッドをインポートします。

今回は、4行目から7行目のenvserver1だけを指定しています。

12行目で@taskを使っているので、10行目と11行目のfiles()は読み込まれません。

13行目の関数clean_upload()では、

  • ローカルでコマンドls -aを実行
  • ローカルのfabfile.pyserver1/tmp/にコピー
  • server1/tmpに移動
  • コマンドpwdで作業ディレクトリの絶対パスを表示
  • コマンドls -aでファイル一覧を取得
  • /tmp/fabfile.pyが存在するかどうかを出力

という作業を実行しています。

ターミナルでfab clean_uploadを実行すると、次のような実行結果が表示されます。

*でFabricをインポート

まとめ

fabric.apiには、これまでに学習したメソッド以外もあるので、ネットで調べて試してみてください。

今日で、Python学習も250日になりましたが、結構頑張って継続してこれたな〜と思っていますが、まだまだ学習しないといけないことはたくさんあります。

Fabricだけでも使い方はたくさんありすぎて、全てを理解するのは至難の技なので、全てを理解するのではなく、公式ドキュメントなどで、自分が作りたいプログラムに必要なコードを調べて使うことで、徐々に必要なコードを覚えていきましょう。

慌てず、焦らず、一つづつ学んでいきましょう。

それでは明日もGood Python!