Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible 直到条件匹配为止。_Ansible - Fatal编程技术网

Ansible 直到条件匹配为止。

Ansible 直到条件匹配为止。,ansible,Ansible,我想在每次调用检查结果中的特定参数后,进行一系列API调用,如果该参数大于特定值,则将其保存在寄存器中,并继续执行playbook 基本上,我正在对RHEV进行API调用以检查存储域。然后我想检查存储域是否有足够的空间,如果有,将该存储域id存储在寄存器中,以便在存储域上创建磁盘 下面是我如何对storagedomain进行单个API调用的代码段 - name: Get Free Storage Domain On RHEV uri: url: "{{ rhevurl }}/sto

我想在每次调用检查结果中的特定参数后,进行一系列API调用,如果该参数大于特定值,则将其保存在寄存器中,并继续执行playbook

基本上,我正在对RHEV进行API调用以检查存储域。然后我想检查存储域是否有足够的空间,如果有,将该存储域id存储在寄存器中,以便在存储域上创建磁盘

下面是我如何对storagedomain进行单个API调用的代码段

 - name: Get Free Storage Domain On RHEV
  uri:
    url: "{{ rhevurl }}/storagedomains/7649aea2-d87c-4066-acca-4399d5261ade"
    method: GET
    user: "{{ rhevusername }}"
    password: "{{ rhevpassword }}"
    return_content: yes
    headers:
      Version: 4
      Accept: "application/xml"
      Content-type: "application/xml"
  register: storagedomain
  tags: storagedomain


- name: Retriving size.
  xml:
    xmlstring: "{{ storagedomain.content }}"
    xpath: /storage_domain/available
    content: text
  register: availablesize
  tags: storagedomain


- name: storage_domain size
  debug:
    var: availablesize.matches[0].available
  tags: storagedomain
现在我想对多个存储域执行此过程,当它获得具有可用空间的storagedomain时,循环应该会中断

像下面这样

- name: Get Free Storage Domain On RHEV
  uri:
    url: "{{ rhevurl }}/storagedomains/{{ item }}"
    method: GET
    user: "{{ rhevusername }}"
    password: "{{ rhevpassword }}"
    return_content: yes
    headers:
      Version: 4
      Accept: "application/xml"
      Content-type: "application/xml"
  loop:
    - 7649aea2-d87c-4066-acca-4399d5261ade
    - 40cceee7-a8d3-45af-a2d0-70c414be32cc
    - a81411b0-4ddb-4467-a4c6-ac9364905248
    - b288c547-231c-44b9-8329-98adcbdfc726 
    - 8cdef991-3edc-4c35-9228-feeef8f29004
    - 837a2e1b-6365-4309-a526-0cd05801fe43
    - 8981bf82-a1da-405e-a7f5-d84f2c94d71d
    - 7a9e3904-e37b-48fd-b850-0f026dc5cde9

在循环中,我应该如何使用xml模块解析xml,然后检查可用空间大于特定大小的条件,以及(可能)或(已经)的条件是否可以做您想做的事情。您不能中断循环,但如果您的条件在任何项上都满足,则可以跳过循环执行。查看下面的示例

test.yml此剧本将执行
shell
模块,忽略错误并设置
var1
变量。但是
模块将仅在未定义
var1
之前执行

- block:
  - shell: expr {{item}} + 1
    ignore_errors: yes
    register: cmd_stat

  - set_fact: var1={{item}}
    when: cmd_stat.rc == 0
  when: var1 is not defined
sites.yml该剧根据您的循环项目多次包括test.yml剧本

---
- hosts: localhost
  connection: local
  vars:
  tasks:
    - include: test.yml
      loop: ["abc","def", "ghi",1, "jkl"]

    - name: increase var1 variable by 1 and write to text file
      shell: expr {{var1}} + 1 > text
因此,使用您可以在剧本中实现的相同逻辑。例如,如果
url
get200状态,然后设置
storage
变量并将其与when条件一起使用


我希望你能理解这个例子。

谢谢。我想你的逻辑会对我有用。我将测试它并让您知道。
直到:
不受
包括:
支持。