web-dev-qa-db-ja.com

予期しない例外:ansible2の呼び出し時に名前 'basestring'が定義されていません

Ansible2コマンドを実行しようとしています...

私がする時:

ansible-playbook -vvv -i my/inventory my/playbook.yml

私は得る:

予期しない例外:名前 'basestring'が定義されていません。完全なトレースバックは次のとおりです。

Traceback (most recent call last):
  File "/usr/local/bin/ansible-playbook", line 85, in <module>
    sys.exit(cli.run())
  File "/usr/local/lib/python3.4/site-packages/ansible/cli/playbook.py", line 150, in run
    results = pbex.run()
  File "/usr/local/lib/python3.4/site-packages/ansible/executor/playbook_executor.py", line 87, in run
    self._tqm.load_callbacks()
  File "/usr/local/lib/python3.4/site-packages/ansible/executor/task_queue_manager.py", line 149, in load_callbacks
    Elif isinstance(self._stdout_callback, basestring):
NameError: name 'basestring' is not defined

ansible --versionは次のとおりです。

ansible 2.0.0.2
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides

そしてここにpython --versionがあります

Python 3.4.3
46
code_monk

バージョン2.5以下のAnsibleでは、コントロールホストにPython 2.6または2.7が必要です。 Control Node Requirements

basestringはPythonでは使用できなくなりました。3。から What's New in Python 3.

組み込みbasestring抽象型が削除されました。代わりにstrを使用してください。 strおよびbytesタイプには、共通の基本クラスを保証するほどの共通の機能がありません。 2to3ツール(下記参照)は、basestringのすべての出現をstrに置き換えます。

74
udondan

basestringは、Python 3.では使用できません。

これは、次の方法でpython 2.xおよび3.xで修正できます。

try:
  basestring
except NameError:
  basestring = str
16
DickShinnery

AnsibleでPython 3を使用してこの問題に遭遇し、dopyプロジェクトをフォークし、私のansibleスクリプトにdopyをインストールすることで解決しました。

name: git+https://github.com/eodgooch/[email protected]#Egg=dopy

それでもエラーが発生する場合は、version0.4.0に変更し、Python site-packagesディレクトリから残留Dopyパッケージを削除してください。

また、Ansible Taskの代わりにpip3 install git+https://github.com/eodgooch/[email protected]#Egg=dopyを使用することもできます。

1
eodgooch

Basestringをstrに置き換えます。 2.xには基本文字列があります。しかし、3.xでは、ベースストリングは「str」に置き換えられました。

0
Dila Gurung

問題はpythonバージョンが原因である可能性があります。 2.xではbasestringがありますが、3.xでは "str"に置き換えられています。

0
Dila Gurung