うさぎ好きエンジニアの備忘録

うさぎたちに日々癒されているエンジニアが業務で直面したもの & 個人的な学習メモを残していきます。

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の一覧を確認します