我正在尝试更新其他选择' Ansible的模块。
可以在此处找到默认模块:https://github.com/ansible/ansible-modules-extras/blob/devel/system/alternatives.py
我试图为remove
命令添加update-alternatives
arg。
我的更新代码如下:
DEFAULT_LINK_PRIORITY = 50
def main():
module = AnsibleModule(
argument_spec = dict(
name = dict(required=True),
path = dict(required=True),
link = dict(required=False),
### Mode Added by isador999 ###
mode = dict(required=False),
)
)
params = module.params
name = params['name']
path = params['path']
link = params['link']
### Mode Added by isador999 ###
mode = params['mode']
UPDATE_ALTERNATIVES = module.get_bin_path('update-alternatives',True)
current_path = None
all_alternatives = []
(rc, query_output, query_error) = module.run_command(
[UPDATE_ALTERNATIVES, '--query', name]
)
if rc == 0:
for line in query_output.splitlines():
split_line = line.split(':')
if len(split_line) == 2:
key = split_line[0]
value = split_line[1].strip()
if key == 'Value':
current_path = value
elif key == 'Alternative':
all_alternatives.append(value)
elif key == 'Link' and not link:
link = value
if not mode or mode == "install":
if current_path != path:
try:
# install the requested path if necessary
if path not in all_alternatives:
module.run_command(
[UPDATE_ALTERNATIVES, '--install', link, name, path, str(DEFAULT_LINK_PRIORITY)],
check_rc=True
)
# select the requested path
module.run_command(
[UPDATE_ALTERNATIVES, '--set', name, path],
check_rc=True
)
module.exit_json(changed=True)
except subprocess.CalledProcessError, cpe:
module.fail_json(msg=str(dir(cpe)))
else:
module.exit_json(changed=False)
elif mode == "remove":
if current_path == path:
module.run_command(
[UPDATE_ALTERNATIVES, '--remove', name, path],
check_rc=True
from ansible.module_utils.basic import *
main()
当我使用这个新模块时,使用install
或remove
模式,Ansible返回给我:
failed: [HOST] => {"failed": true, "parsed": false}
invalid output was:
* keychain 2.7.1 ~ http://www.funtoo.org
* Found existing ssh-agent: 2352
* Known ssh key: /path/id_rsa
FATAL: all hosts have already failed -- aborting
使用remove
模式,脚本似乎正常工作,我的Java链接被正确删除,但我不明白Ansible正在搜索没有错误...
你有什么想法吗?
答案 0 :(得分:0)
如果上面的代码是按原样复制粘贴的,那么一个问题是您是在ansible.module_utils.basic
函数之后的 之后从main()
导入的。
main()
需要AnsibleModule
的定义才能在解析时使用。相比之下,您可以看到导入发生在原始文件的最顶部。
HTH