ansible是否具有允许调试/暂停的任何功能?

时间:2016-02-01 18:05:03

标签: ansible ansible-playbook

我想在远程测试机器上运行我的ansible playbook,但作为测试方法,我想在每个步骤之间验证我期望完成的工作。

我想或多或少地添加"暂停"每个任务命令后的任务,但没有实际将它放入我的yaml脚本。 ansible是否有任何类型的调试'允许这个的模式?

我使用的是ansible 1.5,但我愿意接受使用较新版本功能的答案。

3 个答案:

答案 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!" />