使用Ansible

时间:2018-11-20 02:39:21

标签: ansible

我希望你们能帮助我。

基本上,我需要一段Ansible代码,在该代码中,我向Solaris中的进程发送HUP信号,然后需要监视在处理HUP信号时填充的日志文件(链接到该进程)。这个想法是当在该日志文件上找到字符串“重载配置数据”时,任务完成(否则超时并失败)。请注意,在以前的事件中,日志中存在字符串,但是我需要监视发送到那里的最新条目。

这是我到目前为止尝试过的部分,没有运气(即使该字符串在日志文件中显示了几分钟后仍显示)。请注意,下面的“尾巴”仅显示当时的最新行。我尝试使用“ -f”,但该任务挂在那里,并没有成功。

- name: HUP certain_process
  command: "pkill -HUP certain_process"

- name: Get the content of the last line in logfile
  shell: tail -1 logfile
  register: tail_output

- name: Waits until process HUP finishes
  wait_for:
    path: '{{tail_output.stdout_lines}}'
    search_regex: "Configuration data reloaded"
    delay: 20
    timeout: 280
  register: wait
  ignore_errors: True

- name: Fail if HUP failed
  fail: msg="App HUP failed"
  when: wait|failed

和输出:

TASK [HUP certain_process] **************************************************************
Tuesday 20 November 2018  01:14:18 +0000 (0:00:05.575)       0:00:20.148 ******
changed: [host1]

TASK [Get the contents of the last line in logfile] ***************
Tuesday 20 November 2018  01:14:23 +0000 (0:00:05.413)       0:00:25.561 ******
changed: [host1]

TASK [Waits until process HUP finishes] ****************************************
Tuesday 20 November 2018  01:14:27 +0000 (0:00:04.067)       0:00:29.629 ******
fatal: [host1]: FAILED! => {"changed": false, "elapsed": 280, "failed": true, "msg": "Timeout when waiting for search string Configuration data reloaded in ['Nov 20 01:44:28 host1 SYS(15) HUP signal detected: reloading configuration data...']"}
...ignoring

TASK [Fail if hupped failed] ***************************************************
Tuesday 20 November 2018  01:19:13 +0000 (0:04:45.737)       0:05:15.366 ******
fatal: [host1]: FAILED! => {"changed": false, "failed": true, "msg": "App HUP failed"}
        to retry, use: --limit @/export/home/carlos/project/policyUpdate.retry

1 个答案:

答案 0 :(得分:1)

如果没有别的,这是不正确的:

- name: Waits until process HUP finishes
  wait_for:
    path: '{{tail_output.stdout_lines}}'
    search_regex: "Configuration data reloaded"

the fine manual告诉您,path:字段期望文件系统上的路径,而不是list的{​​{1}}({{ 1}})。

我实际上认为您希望until: str一起使用(因为您不需要静态字符串的正则表达式功能)。尽管我说可能是因为实际上将stdout_linesuntil: "Configuration data reloaded" in tail_output.stdout一起使用意味着您确实冒着“魔术字符串”出现在文件中但被漏掉的风险,因为它已经出现了在tail -1窗口中,但被下一行推到一边。

我认为您可能更愿意使用delay:或类似的东西,以便结合日志文件内容的冗长性给delay:重叠时间。