oinume journal

Scratchpad of what I learned

Python3に対応したtomahawk 0.7.0をリリース

久々にtomahawkの新しいバージョンをリリース。今回はずっと放置していたPython3対応(Python3.2+)をやっとこさ完了した。

Python3はいろいろ変わり過ぎていてもう諦めようかなーと思っていたんだけど、去年のPyCon APACでsixっていうモジュールを知って、「これ使えばけっこう簡単にPython3対応できるのかー」と思ってやってみた。でも実際はそんな簡単にはいかず、特にunicodeとbytesの違いでけっこうハマってしまったけど。

あとは今回のバージョンから、ReadTheDocsホスティングしてるドキュメントのテーマをReadTheDocs謹製のものにしてみた。おかげでドキュメントのかっこよさはだいぶ増したはず。

自分的には大量のリモートサーバ操作には最近はFabricを使うことが多くて、もはやtomahawkはほとんど使ってないんだけど、コマンドの出力はやっぱりtomahawkの方が見やすかったりしてまだ手放せない状態。なのでしばらくは細々とメンテナンスをつづけようかなーと。

今後はtomahawk -> Fabricの流れを作っていくために、今回のリリースでも

  • ホスト指定を-hじゃなくて-Hにしたり
  • ~/.ssh/configをちゃんと優先するようにしたり

と、割とFabricに楽に移行できるようにしていってるところ。tomahawkのいいところはFabricにも移植していきたいので、Fabricのソースも読まないとなぁ。

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)

tomahawk 0.6.0 リリース

[permalink id=531]前回のエントリ[/permalink]からちょいと時間が経ったけど、tomahawk 0.6.0をリリース

 

新機能は前回のエントリの通りなんだけど、設定ファイルについては $HOME/.tomahawk.conf の場所に固定ではなく、 -C/--conf オプションで指定できるようにした。これで柔軟に設定ファイルを変えて tomahawk の挙動を変えることができるっす。

 

次のバージョンでは、やっと重い腰を上げてPython3に対応しようかと思ってる。

tomahawk 0.6.0-rc1リリース

すごい久々にtomahawkを更新した。(0.6.0-rc1)

 

インストール

まだ正式リリース版ではなくpypiには上げていないため、GitHubから直接インストールする感じで。

 

$ pip install https://github.com/oinume/tomahawk/zipball/0.6.0-rc1

 

 

新機能

 

-V/--verify-output

リモートホストで実行したコマンドの出力が全てのホストで同じかどうかを検証するオプション。「なんか1台だけ設定が違くね?」みたいなのが簡単に検証できる。

 

例えば以下は host1 と host2 の ulimit -a の結果が同一であるかを検証する。

 

$ tomahawk -V -h host1,host2 'ulimit -a'

 

 

host1とhost2のnginx.confが同一であることを検証したいのであれば、cat するか md5sum すればいい。

 

$ tomahawk -V -h host1,host2 'cat /etc/nginx/nginx.conf'

 

 

 

$ tomahawk -V -h host1,host2 'md5sum /etc/nginx/nginx.conf'

 

 

設定ファイル

下記のような $HOME/.tomahawk.conf を用意しておくと、いちいちコマンドラインオプションで指定する手間が省けますよっていう機能。

 

[tomahawk]

options = --parallel 4

 

[tomahawk-rsync]

options = --parallel 4

 

上の例だと、tomahawkやtomahawk-rsyncを実行する時に常に --parallel 4 のオプションをつけて実行する。

 

--output-formatオプションの短縮形-F

-Fで--output-formatが指定できるようになりましたよっと。

CentOS 6.x上でtomahawk-0.4.x使ってsudoつきのコマンドが失敗する場合

CentOS 6.2で sudo 付きのコマンドを送る場合は

 

tomahawk -o=-t -l -h localhost 'sudo uptime'

 

のように、-o=-t をつけます。これでssh時に pseudo-tty が割り当てられる。ちなみに今開発中の0.5系はデフォルトで -o=-t がつく状態になっています。

 

あと、-D でデバッグ出力が有効になります。同僚からバグ報告をもらったのですが、"sudo: sorry, you must have a tty to run sudo

" と言われているので、「ああ、そういうことか」とわかりました。

 

 

$ bin/tomahawk -D -l -h localhost 'sudo uptime'

[DEBUG] options = Namespace(command=['sudo uptime'],

continue_on_error=None, debug=True, delay=0,

expect_delay=0.050000000000000003, expect_encoding='utf-8',

expect_timeout=None, hosts='localhost', hosts_files=None,

no_sudo_password=False, output_format='${user}@${host} %

${command}n${output}n', parallel=1, profile=False,

prompt_login_password=True, prompt_sudo_password=False, ssh='ssh',

ssh_options=None, ssh_user=None, timeout=10)

[DEBUG] arguments = ['sudo uptime']

Enter a password for ssh authentication:

Enter a password for sudo:

 

[DEBUG] command = ssh, args = ['-l', 'kazuhiro', 'localhost', '/bin/sh',

'-c', '"sudo uptime"']

[DEBUG] expect index = 1

[DEBUG] expect.EOF

[DEBUG] child closed.

[DEBUG] exit_status = 1

[DEBUG] line = kazuhiro@localhost's password: *********

[DEBUG] line = sudo: sorry, you must have a tty to run sudo

[DEBUG] output_text = sudo: sorry, you must have a tty to run sudo

[error] kazuhiro@localhost % sudo uptime

sudo: sorry, you must have a tty to run sudo

Command failed ! (status = 1)

[error] Command "sudo uptime" failed on host "localhost"