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
バージョン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
に置き換えます。
basestringは、Python 3.では使用できません。
これは、次の方法でpython 2.xおよび3.xで修正できます。
try:
basestring
except NameError:
basestring = str
AnsibleでPython 3を使用してこの問題に遭遇し、dopyプロジェクトをフォークし、私のansibleスクリプトにdopyをインストールすることで解決しました。
name: git+https://github.com/eodgooch/[email protected]#Egg=dopy
。
それでもエラーが発生する場合は、version
を0.4.0
に変更し、Python site-packagesディレクトリから残留Dopyパッケージを削除してください。
また、Ansible Taskの代わりにpip3 install git+https://github.com/eodgooch/[email protected]#Egg=dopy
を使用することもできます。
Basestringをstrに置き換えます。 2.xには基本文字列があります。しかし、3.xでは、ベースストリングは「str」に置き換えられました。
問題はpythonバージョンが原因である可能性があります。 2.xではbasestringがありますが、3.xでは "str"に置き換えられています。