我想知道是否有一种方法可以在模块执行时打印信息——主要是为了证明进程正在工作并且没有挂起。具体来说,我试图在执行cloudformation模块期间获得反馈。我尝试修改(Python)源代码以包括以下内容:
def debug(msg):
print json.dumps({
"DEBUG" : msg
})
...
debug("The stack operation is still working...")
当然,这样做的目的是存储所有这些输出,并且只在模块完成执行后打印所有输出。所以对于特别大的cloudformation模板,这意味着我要等5分钟左右,然后突然看到屏幕上出现了大量的文本。我所期望的是看到“堆栈操作仍在工作…”每x秒打印一次。
看来Asynchronous Actions and Polling是我要找的。。。但这也没用。整个任务“为{{stackname}}启动CloudFormation”被完全跳过。以下是我的剧本中的相关(YAML)片段:
- name: Launch CloudFormation for {{ stackname }}
cloudformation: >
stack_name="{{ stackname }}" state=present
region="{{ region }}" disable_rollback=true
template="{{ template }}"
register: cloud
args:
template_parameters:
KeyName: "{{ keyName }}"
Region: "{{ region }}"
SecurityGroup: "{{ securityGroup }}"
BootStrapper: "{{ bootStrapper }}"
BootStrapCommand: "powershell.exe -executionpolicy unrestricted -File C:\\{{ bootStrapper }} {{ region }}"
S3Bucket: "{{ s3Bucket }}"
async: 3600
poll: 30
这告诉我,异步用于典型的shell命令,而不是复杂的模块,如cloudformation。或——我可能做错了什么。
有人能解释一下这种情况吗?同样,对于需要一段时间的大型cloudformation任务,我希望得到一些周期性的指示,表明该任务仍在运行,而不是挂起。我很感激你的帮助!
答案很简单-不。 Ansible是一个连续的系统,它的目标是处理在一堆服务器上运行并显示实时stdout结果的能力可能非常不可靠。
但我认为如果目标系统能够支持后台执行,那么您可以使用一些技巧。我看到您的系统是windows,因此您必须在其上安装cygwin,以便在下面的示例中运行诸如“sleep 20&;”之类的后台命令
你可以用
ansible-playbook -vv background.yml
运行这个剧本 你可以看到标准输出在改变。echo Test---- >> /tmp/test && tail /tmp/test
是一个演示命令。您应该将数据输出到某个文件并跟踪它,以便查看进度。或者您可以查看stdout文件的文件大小并显示它。使用想象力)我的本地主机模块方法:
然后在另一个窗口上:
有一种方法可以解决这个问题,它将显示实时输出,但是您必须在每一行处理注入的前缀。这很混乱/有点黑,但为了调试/监视的目的,它完成了工作:
命令
:
只是一个noop,如果更简单的话,您可以轻松地使用command: /usr/bin/true
。在任何情况下,这将输出类似于:相关问题 更多 >
编程相关推荐