2016-06-30 4 views
0

suのパスワードで非ASCII文字を処理するためにUTF-8を使用するためにParamikoまたはAnsibleを明示的に切り替える必要はありますか?私はこの脚本コマンドを使用してリモートマシンからデータベースを取得しています

ansible-playbook -K -vvv ansible/fetch-database.yml 

は、脚本の最初の部分は次のようになります。

--- 

- name: Set this playbook to run on the live server 
    hosts: webservers 
    remote_user: jon 
    become_method: su 
    become_user: root 

    roles: 
    - fetch-database 

と役割の最初の仕事は、(これで始まります他のタスクがありますが、Anativesがクラッシュする前にクラッシュするので、関係ないと仮定します)。

--- 

- name: Install the MySQL packages to support MySQL exporting on the remote in Python 
    apt: name={{ item }} state=installed update_cache=yes 
    become: true 
    with_items: 
    - python-mysqldb 

Ubuntuリモートサーバーにデータベースライブラリをインストールして、MySQLのダンプを実行してから、SQLファイルをローカルホストにフェッチすることができます。

私は私の地元のコンフィグansible.cfgにthusly構成されたSSHドライバ、としてParamikoを使用しています:

[defaults] 
transport=paramiko 

残念ながら、私はこのエラーを取得する:

An exception occurred during task execution. The full traceback is: 
Traceback (most recent call last): 
    File "/home/jon/Development/Personal/server-build/ansible/lib/ansible/executor/task_executor.py", line 96, in run 
    item_results = self._run_loop(items) 
    File "/home/jon/Development/Personal/server-build/ansible/lib/ansible/executor/task_executor.py", line 252, in _run_loop 
    res = self._execute(variables=task_vars) 
    File "/home/jon/Development/Personal/server-build/ansible/lib/ansible/executor/task_executor.py", line 447, in _execute 
    result = self._handler.run(task_vars=variables) 
    File "/home/jon/Development/Personal/server-build/ansible/lib/ansible/plugins/action/normal.py", line 33, in run 
    results = merge_hash(results, self._execute_module(tmp=tmp, task_vars=task_vars)) 
    File "/home/jon/Development/Personal/server-build/ansible/lib/ansible/plugins/action/__init__.py", line 647, in _execute_module 
    res = self._low_level_execute_command(cmd, sudoable=sudoable, in_data=in_data) 
    File "/home/jon/Development/Personal/server-build/ansible/lib/ansible/plugins/action/__init__.py", line 721, in _low_level_execute_command 
    rc, stdout, stderr = self._connection.exec_command(cmd, in_data=in_data, sudoable=sudoable) 
    File "/home/jon/Development/Personal/server-build/ansible/lib/ansible/plugins/connection/paramiko_ssh.py", line 311, in exec_command 
    chan.sendall(self._play_context.become_pass + '\n') 
    File "/usr/lib/python2.7/dist-packages/paramiko/channel.py", line 797, in sendall 
    sent = self.send(s) 
    File "/usr/lib/python2.7/dist-packages/paramiko/channel.py", line 729, in send 
    m.add_string(s[:size]) 
    File "/usr/lib/python2.7/dist-packages/paramiko/message.py", line 259, in add_string 
    self.packet.write(s) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa3' in position 1: ordinal not in range(128) 

fatal: [server.example.com]: FAILED! => {"failed": true, "msg": "Unexpected failure during module execution.", "stdout": ""} 

私のrootパスワードが渡されているように見えますASCIIとして、それはポンド記号(£)で苦労しているようだ。私は、これが主なエラーだと思う必要があります:私は(それがうまく処理されていないので)、これはバグであることを推測

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa3' in position 1: ordinal not in range(128)

が、私は誰が前にこれを発見していないことを想像することはできません。したがって、このパスワードをUTF-8に渡すオプションがあると仮定します。もしそうなら、どのようにすればいいのですか?

現在のdevelブランチは、GitHubからAnsible、ハッシュ46a97e1f551というブランチを使用しています。それはPythonの問題かのように感じているので、

1d0d5db97a26fefc5ce462ef5fac84086122bbe3 lib/ansible/modules/core (heads/devel-165-g1d0d5db) 
00b8b96906a741afa8eaa1245d0e229f099318a5 lib/ansible/modules/extras (heads/devel-116-g00b8b96) 

私は、それはあまり重要想像していない:私は完全を期すため、彼らはあるので、次のようにこの問題は、使用中のサブモジュールによって影響を受けるであろうことを推測しますconfigの問題ですが、ローカルマシンとリモートマシンはどちらもUbuntu 14.04です。

+0

AnabilitiesはかなりひどいUnicode処理(したがって3に大きなブレーク)を持つPython2上で動作していますので、これに対する回避策があれば驚くでしょう。おそらく、Githubの問題としてこれを上げるのが一番良いでしょう。 – ydaetskcoR

+0

Alright @ydaetskcoR、私はそれを行うでしょう - ありがとう。奇妙なことに、私はParamikoでASCII以外のパスワード文字を使うのは初めてだとは思いません。私はUbuntu 14.04リポジトリのバージョンを使用していますので、おそらくそれは古いものです。 Pythonデポマネージャを使用してロードするのは簡単ですか?私はそれがピップだろうと思う? – halfer

答えて

0

私の現在の解決策はParamikoを無効にし、デフォルトのSSH転送メカニズムを使用することです。これまでは機能していなかったし、suが必要なコマンドに掛かっていたので、最初はParamikoにスワップしました。しかし、この問題は最近修正されたようです。

パラミコ号のバグ報告is here

+0

Paramikoは、OpenSSH接続設定のバージョンに "ControlPersist"オプションがない場合に使用されます。これにより、持続的なSSH接続が可能になり、SSH接続のオーバーヘッドをなくしてスムーズに作業できます。 RHEL6にはParamikoが必要でしたが、RHEL7は必要ありません。 – Sathish

+0

OK、thanks @ Sathish。 – halfer

関連する問題