Ansible,检查文件存在于get_url / win_get_url之前的http路径中

时间:2017-02-27 11:59:04

标签: ansible

我必须遗漏一些东西,但想想,我想从http:// location下载一些文件。如果文件丢失,它会失败,如果文件丢失并且不会失败,我想退出playbook。 这样的例子,不适用于http所在的文件

- stat: path=/usr/local/foo
  register: foo_var
- meta: end_play
  when: foo_var.stat.exists

2 个答案:

答案 0 :(得分:3)

虽然你的问题缺少一些必要的信息,但我想你会找到类似的东西:

---
- hosts: localhost
  gather_facts: no
  tasks:
    # check url with HEAD request
    - uri:
        url: http://localhost:8000/key.pub
        method: HEAD
      register: uri_test
      # fail with error if status is unexpected
      failed_when: uri_test.status is undefined or uri_test.status <= 0
    # gracefully end play if http code is fatal
    - meta: end_play
      when: uri_test.status > 400
    # else download
    - get_url:
        url: http://localhost:8000/key.pub
        dest: /tmp/key.pub

您实际上可以跳过uri测试,仅使用get_url ignore_errors: yes或精心设计的failed_when声明。

答案 1 :(得分:0)

uri 模块和许多其他模块在 windows 上有不同的名称

同一任务不太可能同时适用于两者。然而,代码逻辑可能会很好地工作。

我最终在 shell 任务中的 windows 上使用了 power-shell 解决方案

- name: "Check if the model already exists on artifactory!"
  win_shell: |
    $URI = New-Object System.Uri("{{ artifactory_model_path }}.zip")
    $user = "{{ ci_user }}"
    $pass = "{{ artifactory_header_ci_user }}"
    $pair = "$($user):$($pass)"
    $encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
    $basicAuthValue = "Basic $encodedCreds"
    $Headers = @{
      Authorization = $basicAuthValue
    }
    (Invoke-WebRequest -Uri  $URI -Headers $Headers -UseBasicParsing -DisableKeepAlive -Method head).StatusCode
  register: models_return_code
  ignore_errors: true

然而,你可以使用这样的东西来加载不同的代码,具体取决于同一个游戏中的操作系统

- name: Include system-specific variables or tasks
  include_tasks: "{{ ansible_os_family | lower }}.yml"