有没有办法让一个角色在戏剧中成功之前?
Posted
技术标签:
【中文标题】有没有办法让一个角色在戏剧中成功之前?【英文标题】:Is there a way to running a role until it succeeds in a play? 【发布时间】:2020-03-20 12:55:11 【问题描述】:我有一个角色名称 system_check。 系统启动后,我需要等到这个角色成功。 有没有办法重复运行这个角色直到它成功?
【问题讨论】:
我相信你只能重新运行任务,直到它们成功并重试了一定次数。您最好确定哪些任务容易失败并在那里实施重试机制。 使用wait_for
module 来确保您的机器已经(重新)启动并在之后扮演您的 system_check 角色可能是一个更好的主意。没有简单的方法可以在完整角色/包含上执行 until
循环。
【参考方案1】:
问:“有没有办法让一个角色在演戏成功之前运行?”
答:不可能。模块include_role 说
忽略一些关键字,例如直到和重试。
改为使用ansible-runner。例如Use Runner as a standalone command line tool 和测试artifacts(rc、status、stdout)。
例如
#!/bin/bash
rcfile=private1/artifacts/ID01/rc
statusfile=private1/artifacts/ID01/status
ansible-runner -p test.yml -i ID01 run private1
rc=$(cat $rcfile)
echo "rc: $rc"
until [ "0" == "$rc" ]; do
ansible-runner -p test.yml -i ID01 run private1
rc=$(cat $rcfile)
echo "rc: $rc"
done
$ tree private1
private1
├── artifacts
├── daemon.log
├── env
│ ├── envvars
│ ├── extravars
│ ├── passwords
│ ├── settings
│ └── ssh_key
├── inventory
│ └── hosts
└── project
├── roles
│ └── testrole
│ ├── defaults
│ │ └── main.yml
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml
│ ├── README.md
│ ├── tasks
│ │ └── main.yml
│ ├── tests
│ │ ├── inventory
│ │ └── test.yml
│ └── vars
│ └── main.yml
└── test.yml
【讨论】:
2020 年 9 月仍有此问题。希望可以尽快解决。我遇到了一个时间问题,即运行多个进程来配置相同的服务器。当它们重叠时,角色会失败,但重新启动角色会解决问题。以上是关于有没有办法让一个角色在戏剧中成功之前?的主要内容,如果未能解决你的问题,请参考以下文章