执行任务,直到文件在Ansible中删除

问题描述 投票:0回答:1

我将执行kill命令,直到文件“ / proc / pid / status”或文件夹“ / proc / pid”被删除。

以下是我的剧本:

- name: Kill running processes

  shell: "kill -9 {{ item }}"
  retries: 5
  delay: 4
  until: "/proc/{{ item }}/status is exists"
  with_items: "{{ running_processes.stdout_lines }}"

但是,我的剧本因以下错误而失败。

TASK [Kill running processes] **************************************************
[1;30mtask path: /app/scripts/test.yml:182[0m
[1;35mdelimiters such as {{ }} or {% %}. Found: /proc/{{ item }}/status is exists[0m
[1;35m[0m
[0;31mfatal: [10.9.9.131]: FAILED! => {"msg": "The conditional check '/proc/{{ item }}/status is exists' failed. The error was: Invalid conditional detected: invalid syntax (<unknown>, line 1)"}[0m

我正在使用最新版本的Ansible。

您能否建议我的剧本代码有什么问题?

ansible runtime-error kill
1个回答
0
投票

错误是“检测到无效的条件”,这是正确的。您已写过:

  until: "/proc/{{ item }}/status is exists"

当您编写这样的布尔表达式时,语法为:

<value> is <test>

<value>必须是文字值(如字符串或数字)或变量名。您有/proc/<some number>/status,而这些都不是。您可以通过引用/proc路径使表达式语法上正确,如下所示:

  until: "'/proc/{{ item }}/status' is exists"

但是仍然存在一个问题:条件是在一个隐式jinja2模板上下文中评估的,这意味着您永远不要使用{{...}}标记(untilwhen都是如此)。在模板上下文中,您仅按名称引用变量,然后使用字符串格式或字符串串联将它们与其他字符串放在一起。例如:

  until: "'/proc/%s/status' % item is exists"

或:

  until: "'/proc/{}/status'.format(item) is exists"

最后,我认为您的意思是is not exists,因为您正在杀死一个进程并等待其死亡。

© www.soinside.com 2019 - 2024. All rights reserved.