fabric2 でタスク名に使ったアンダースコアがハイフンになる
作成したタスク名と表示されるタスク名が違うのは少しもにょるので直したい…
背景
↓のようなタスクを記述して、タスク一覧を表示したところ、
@task(optional=["user"]) def remove_crontab(user=""): """指定したユーザで登録されているcrontabを削除します""" if user == "": raise Exit("Aborting: user is not specified.") else: result = sudo("crontab -r", user=user) @task(optional=["user"]) def list_crontab(user="root"): """指定したユーザで登録されているcrontabの一覧を確認します""" result = sudo("crontab -l", user=user, quiet=True) if len(result) == 0: raise Exit("No crontab is registered.") else: print(result)
_
が -
に置き換わって表示されてしまうことがわかった。
$ fab2 -l Available tasks: get-os-version サーバのreleaseバージョンを確認します list-crontab 指定したユーザで登録されているcrontabの一覧を確認します
ちなみに公式ドキュメントには↓のように書かれてた。
Tasks names now get converted from underscores to hyphens. Eg. taskdefjournald_logs()now evaluates tofabjournald-logson the commandline.
設定変更方法
Fabric2ではタスク実行のライブラリとしてinvokeを採用しているが、このinvoke側で _
を -
に変更する設定がされている。
Constructing namespaces — Invoke documentation
Configuration — Fabric documentation
とのことなので、以下の内容の fabric.yml
をプロジェクトディレクトリのルートに配置。
--- tasks: auto_dash_names: false
この状態でタスク一覧を取得すると問題なく表示された。
$ fab2 -l Available tasks: remove_crontab 指定したユーザで登録されているcrontabを削除します list_crontab 指定したユーザで登録されているcrontabの一覧を確認します