2017-06-27 9 views
1

ある程度の変数は、影響を受けていないようです。 Ansible 2.2.1.0 のPython 2.7.10 Mac OSのバージョン10.12.5私のカスタムディレクトリを解決するためにanonymous.module_utilsを入手する方法

私たちは、カスタムAnsibleモジュールで使用されるカスタムクラスを作成しました。クラスはここに住ん:

/sites/utils/local/ansible/agt_module_utils/ldapData.py /サイト/ utilsパッケージ/ローカル/ ansible/agt_module_utils/のinitの.py

クラスldapData.pyの名前は内側:

クラスldapDataClass(オブジェクト):

すべての場合において、のinitの.pyはゼロバイトのファイルです。 当社Ansibleモジュールは次の場所にあります。

/サイト/ utilsパッケージ/ローカル/ ansible/agt_modules/のinitの.py /sites/utils/local/ansible/agt_modules/agtWeblogic.py

atgWeblogicでimport文が見え、次のように:

from ansible.module_utils.ldapData import ldapDataClass 

私も試してみました:

from ldapData import ldapDataClass 

設定ファイルに次の行があります

ライブラリ= /サイト/ utilsの/ローカル/ ansible/att_modules module_utils = /サイト/ utilsパッケージ/ローカル/ ansible/att_module_utils

を私たちのモジュールを実行すると、modulesディレクトリは解決されますが、module_utilsディレクトリは解決されません。インクルードが "anonymous.module_utils.ldapData import ldapDataClass"である場合、障害は遠隔マシンに接続する前でもあります。インクルードが "from ldapData import ldapDataClass"の場合、障害はリモートマシン上にあります。私は、「リモートマシン上の」失敗を示す午前の下には(完全なエラーを見るために右にスクロール):ローカル> ansible ecomtest37 -m agtWeblogic -a @

nverkland「アクション=インスタンスは= tst37ショップ - メインを停止」 -vvv

ecomtest37 | FAILED! => { 
    "changed": false, 
    "failed": true, 
    "invocation": { 
     "module_name": "agtWeblogic" 
    }, 
    "module_stderr": "", 
    "module_stdout": "Traceback (most recent call last):\r\n File \"/tmp/ansible_FwHCmh/ansible_module_attWeblogic.py\", line 63, in <module>\r\n from ldapData import ldapDataClass\r\nImportError: No module named ldapData\r\n", 
    "msg": "MODULE FAILURE" 
} 

私は "ansibleインストール" module_utilsディレクトリ(私のMac上の/Library/Python/2.7/site-packages/ansible/module_utils/)モジュールの実行にldapData.pyファイルを移動した場合良い。 "custom" module_utilsディレクトリの使用を妨げてしまった設定ファイルで、どうしたのですか?

ありがとうございました。

答えて

0

コンスタンチンのノートが助けました。私はその謎を解くことができた。 私が持っていた私の設定ファイルでは:私がクラスを見つけるためにしようとしていた今まで

import ansible.agt_module_utils.ldapData (working) 

module_utils = /sites/utils/local/ansible/agt_module_utils 

これはAnsibleは私のクラスがで発見されていることを考えるようになり

import ansible.module_utils.ldapData (broken) 
3

module_utilsは、Ansible 2.3以降の設定が可能です:changelogPRです。

モジュールをアップグレードまたはリファクタリングする必要があると思います。

更新:実施例

プロジェクトツリー:

. 
├── ansible 
│   └── ansible.cfg 
├── module_utils 
│   └── mycommon.py 
└── modules 
    └── test_module.py 

ansible.cfg:

[defaults] 
library = ../modules 
module_utils = ../module_utils 

mycommon.py:

class MyCommonClass(object): 

    @staticmethod 
    def hello(): 
     return 'world' 

test_module.py:

#!/usr/bin/python 

from ansible.module_utils.basic import * 
from ansible.module_utils.mycommon import MyCommonClass 

module = AnsibleModule(
    argument_spec = dict() 
) 
module.exit_json(changed=True, hello=MyCommonClass.hello()) 

実行:

$ ansible localhost -m test_module 
[WARNING]: Host file not found: /etc/ansible/hosts 

[WARNING]: provided hosts list is empty, only localhost is available 

localhost | SUCCESS => { 
    "changed": true, 
    "hello": "world" 
} 

Ansibleバージョン:

$ ansible --version 
ansible 2.3.1.0 
    config file = /<masked>/ansible/ansible.cfg 
    configured module search path = [u'../modules'] 
    python version = 2.7.10 (default, Feb 7 2017, 00:08:15) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] 
+0

私は今や2.3にアップグレードしましたが、結果は変わりませんでした。 – nverkland

+0

私は今や2.3にアップグレードしましたが、結果は変わりませんでした。 ライブラリ= /サイト/ utilsの/ローカル/ ansible/att_modules module_utils = /サイト/ utilsの/ローカル/ ansible/att_module_utils nverkland @ローカル=> lsの-1 /サイト/ utilsパッケージ/ローカル/ ansible/agt_module_utils __init__。 PY ldapData.py ansible 2.3.0.0 configファイル= /sites/utils/local/ansible/ansible.cfg 構成モジュール検索パス= [U '/サイト/ utilsパッケージ/ローカル/ ansible/agt_modules /'] python version = 2.7.10(デフォルト、Feb 7 2017、00:08:15)[GCC 4.2.1互換Apple LLVM 8.0.0(clang-800.0.34)] – nverkland

+0

私は実際の例を追加しました。あなたの設定を調べてください。 –

関連する問題