我正在尝试从Ansible自动升级卫星和胶囊。除了以下两个命令外,我能够将命令转换为 ansible 胶合板,没有任何问题,需要您的帮助才能将这些命令合并到剧本中:
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