How are you arranging for ansible to be in your PYTHONPATH?
-Toshio
On Nov 2, 2017 5:58 AM, "Jae Kim" wrote:
> Hi
>
>
>
> When I run the following command
>
>
>
> pytest -r a -fulltrace --color yest my_new_test_module.py
>
>
>
> I get the following error message.
>
>
>
> = test session starts
> ==
> platform linux -- Python 3.4.5, pytest-3.2.3, py-1.4.34, pluggy-0.4.0
> rootdir: /root/work/mymoduletests, inifile:
> collected 0 items / 1 errors
>
> === short test summary info
>
> ERROR my_new_test_module.py
> ERRORS ==
> ==
> ERROR collecting my_new_test_module.py
>
> [31mImportError while importing test module '/root/work/mymoduletests/my_n
> ew_test_module.py'.
> Hint: make sure your test modules/packages have valid Python names.
> Traceback:
> my_new_test_module.py:63: in
> from ansible.module_utils.basic import AnsibleModule
> E ImportError: No module named 'ansible' [0m
> !!! Interrupted: 1 errors during collection
>
> === 1 error in 0.13 seconds
>
>
>
>
>
>
> my_new_test_module.py is
>
>
>
> #!/usr/bin/python
>
> ANSIBLE_METADATA = {
> 'metadata_version': '1.1',
> 'status': ['preview'],
> 'supported_by': 'community'
> }
>
> DOCUMENTATION = '''
> ---
> module: my_sample_module
>
> short_description: This is my sample module
>
> version_added: "2.4"
>
> description:
> - "This is my longer description explaining my sample module"
>
> options:
> name:
> description:
> - This is the message to send to the sample module
> required: true
> new:
> description:
> - Control to demo if the result of this module is changed or
> not
> required: false
>
> extends_documentation_fragment:
> - azure
>
> author:
> - Your Name (@yourhandle)
> '''
>
> EXAMPLES = '''
> # Pass in a message
> - name: Test with a message
> my_new_test_module:
> name: hello world
>
> # pass in a message and have changed true
> - name: Test with a message and changed output
> my_new_test_module:
> name: hello world
> new: true
>
> # fail the module
> - name: Test failure of the module
> my_new_test_module:
> name: fail me
> '''
>
> RETURN = '''
> original_message:
> description: The original name param that was passed in
> type: str
> message:
> description: The output message that the sample module generates
> '''
>
> from ansible.module_utils.basic import AnsibleModule
>
> def run_module():
> # define the available arguments/parameters that a user can pass to
> # the module
> module_args = dict(
> name=dict(type='str', required=True),
> new=dict(type='bool', required=False, default=False)
> )
>
> # seed the result dict in the object
> # we primarily care about changed and state
> # change is if this module effectively modified the target
> # state will include any data that you want your module to pass back
> # for consumption, for example, in a subsequent task
> result = dict(
> changed=False,
> original_message='',
> message=''
> )
>
> # the AnsibleModule object will be our abstraction working with Ansible
> # this includes instantiation, a couple of common attr would be the
> # args/params passed to the execution, as well as if the module
> # supports check mode
> module = AnsibleModule(
> argument_spec=module_args,
> supports_check_mode=True
> )
>
> # if the user is working with this module in only check mode we do not
> # want to make any changes to the environment, just return the current
> # state with no modifications
> if module.check_mode:
> return result
>
> # manipulate or modify the state as needed (this is going to be the
> # part where your module will do what it needs to do)
> result['original_message'] = module.params['name']
> result['message'] = 'goodbye'
>
> # use whatever logic you need to determine whether or not this module
> # made any modifications to your target
> if module.params['new']:
> result['changed'] = True
>
> # during the execution of the module, if there is an exception or a
> # conditional state that effectively causes a failure, run
> # AnsibleModule.fail_json() to pass in the message and the result
> if module.params['name'] == 'fail me':
> module.fail_json(msg='You requested this to fail', **result)
>
> # in the event of a successful module execution, you will want to
> # simple AnsibleModule.exit_json(), passing the key/value results
> module.exit_json(**result)
>
> def main():
> run_module()
>
> if __name__ == '__main__':
>