我必须遗漏一些东西,但想想,我想从http:// location下载一些文件。如果文件丢失,它会失败,如果文件丢失并且不会失败,我想退出playbook。 这样的例子,不适用于http所在的文件
- stat: path=/usr/local/foo
register: foo_var
- meta: end_play
when: foo_var.stat.exists
答案 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"