我想在远程测试机器上运行我的ansible playbook,但作为测试方法,我想在每个步骤之间验证我期望完成的工作。
我想或多或少地添加"暂停"每个任务命令后的任务,但没有实际将它放入我的yaml脚本。 ansible是否有任何类型的调试'允许这个的模式?
我使用的是ansible 1.5,但我愿意接受使用较新版本功能的答案。
答案 0 :(得分:4)
为了获得时间,您可以使用--start-at-task仅执行可能是那些窃听的最后一个命令。但为此你必须命名你的任务:
此shell
任务没有名称
- shell: vagrant provision; vagrant up;
args:
chdir: /vm/vagrant
这个确实:
- name: start vagrant
shell: vagrant provision; vagrant up;
args:
chdir: /vm/vagrant
然后运行:
ansible-playbook playbook.yml --start-at-task="start vagrant"
另一个有用的提示是使用标签。例如,您只想尝试一个命令
- shell: vagrant provision; vagrant up;
args:
chdir: /linux/{{item.name}}
tags: [shell, debug]
现在你可以调试这个:
ansible-playbook playbook.yml --tags="debug"
它将仅启动接收标签调试的任务。
如果你想要更多的信息,你可以使用-v,-vv,-vvv或-vvvvv
让Ansible更加冗长ansible-playbook -vvvv playbook.yml --tags="debug"
这将告诉您指定任务的所有内容
答案 1 :(得分:3)
我不认为ansible提供了这样的功能。一种方法是在播放之间暂停并使其成为条件。执行playbook时,请定义一个决定是否暂停的变量。
- pause:
when: PAUSE is defined
执行Playbook时,如果您不想暂停,请不要定义PAUSE。但是如果你想在戏剧之间暂停,那就定义它。
ansible-playbook -v .... --extra-vars "PAUSE=yes" ... myplay.yml
答案 2 :(得分:3)
是的,ansible有一个"step" mode,它会在每个任务之前暂停,等待用户确认执行任务。
只需使用步骤标记调用您的剧本:
$("#test").click(function(){
var num1 = $('#number1').val();
var num2 = $('#number2').val();
// we'll get "12" instead of 3
alert(num1 + num2);
// we convert the text into actual numbers here
num1 = parseFloat(num1);
num2 = parseFloat(num2);
// now since we're dealing with numbers.. we'll get 3
alert(num1 + num2);
});
<input id="number1" value="1" />
<input id="number2" value="2" />
<input type='button' id="test" value="test!" />