如何解决Ansible playbook 中的交互式输入
我正在尝试从 Ansible 自动执行卫星和胶囊升级。除了以下两个命令之外,我可以将命令转换为 ansible plybook,没有任何问题,需要您的帮助才能将这些命令合并到 playbook 中:
satellite-maintain upgrade check --target-version 6.8
satellite-maintain upgrade run --target-version 6.8
但问题是这个命令需要用户多次输入 YES / NO / CANCEL
。使用“shell 模块”不会帮助我们提供用户输入。我们是否有任何其他选项可以在屏幕中查看命令执行输出并根据我们的用户要求提供输入。
解决方法
这是来自 https://gist.github.com/confiks/6d7b0ee3e137df01b758 的 action plugin
。全部归功于其原作者。复制到这里一样,有时外部链接会坏。请注意,这是基本版本,可以根据需求进行广泛调整。
重要提示: 将此脚本放在您的剧本目录的 action_plugins 目录中。
用法:
- name: "Ask the user if we should continue."
action: ask_key prompt="Continue? Yes / No / Random (y/n/r)?" accepted_keys="['y','n','r']"
register: answer
名为 ask_key.py 的脚本
from __future__ import (absolute_import,division,print_function)
__metaclass__ = type
from ansible import constants as C
from ansible.errors import AnsibleError
from ansible.module_utils.parsing.convert_bool import boolean
from ansible.plugins.action import ActionBase
try:
from __main__ import display
except ImportError:
from ansible.utils.display import Display
display = Display()
class ActionModule(ActionBase):
TRANSFERS_FILES = False
def run(self,tmp=None,task_vars=None):
result = super(ActionModule,self).run(tmp,task_vars)
result.update(
dict(
changed=False,failed=False,msg='',skipped=False
)
)
self._supports_check_mode = True
self._supports_async = False
setup_module_args=dict(
gather_subset='all',gather_timeout=10
)
setup_result = self._execute_module(
delete_remote_tmp=True,module_name='setup',module_args=setup_module_args,persist_files=False,task_vars=task_vars,tmp=tmp,wrap_async=self._task.async
)
if setup_result['ansible_facts']['ansible_system'] != 'Linux':
result['failed'] = True
return result
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。