更新替代模块Ansible

时间:2015-07-22 09:37:54

标签: python ansible

我正在尝试更新其他选择' 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()

当我使用这个新模块时,使用installremove模式,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正在搜索没有错误...

你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果上面的代码是按原样复制粘贴的,那么一个问题是您是在ansible.module_utils.basic函数之后的 之后从main()导入的。

main()需要AnsibleModule的定义才能在解析时使用。相比之下,您可以看到导入发生在原始文件的最顶部。

HTH