我正在开发一些用于与 REST API 交互的 ansible 模块。当我写它们时,我发现我正在复制/粘贴常用选项。例如,在模块 1 中:
module1.py
def run_module():
module_args = dict(
api_key=dict(type='str', required=True),
host=dict(type='str', required=True),
port=dict(type='int', required=False, default=443),
module1_option=dict(type='str', required=True)
)
result = dict(
changed=False,
)
module = AnsibleModule(
argument_spec = module_args,
supports_check_mode = True
)
if module.check_mode:
module.exit_json(**result)
host = module.params['host']
api_key = module.params['api_key']
port = module.params['port']
module1_option= module.params['module1_option']
#do module1 stuff here
def main():
run_module()
if __name__ == '__main__':
main()
然后在 module2 中,它与相同的 REST API 交互,因此需要许多相同的选项:
module2.py
def run_module():
module_args = dict(
api_key=dict(type='str', required=True),
host=dict(type='str', required=True),
port=dict(type='int', required=False, default=443),
module2_option1=dict(type='str', required=True),
module2_option2=dict(type='bool', required=False)
)
result = dict(
changed=False,
)
module = AnsibleModule(
argument_spec = module_args,
supports_check_mode = True
)
if module.check_mode:
module.exit_json(**result)
host = module.params['host']
api_key = module.params['api_key']
port = module.params['port']
module2_option1= module.params['module2_option1']
module2_option2= module.params['module2_option2']
#do module2 stuff here
def main():
run_module()
if __name__ == '__main__':
main()
这里的设置和要求非常相似。我还复制/粘贴了大部分DOCUMENTATION
字符串,为简洁起见,我在这里省略了。
我想知道这是否被认为是好的做法。我可以将其中一些东西(包括基本DOCUMENTATION
字符串)提取到一个公共文件中,或者将功能包装在我为每个模块扩展的基类中......我真的不确定在这种情况下什么是最佳实践,我在 Ansible 模块开发中没有看到任何关于继承的内容。有人可以给我一些建议吗?这些也是我编写的第一个 Ansible 模块,因此也将不胜感激任何其他建议,非常感谢!