grep url 来自文本并在ansible中访问
grep url from text and access in ansible
团队,
我有一个包含 url 的文本文件,我需要使用 uri anisible 模块启动它并捕获其结果以检查 http_status 代码是否为 200。我的剧本在下面,但我收到错误:
当我使用 vars 文件中定义的变量时,同样的工作。但是当我从 GREP 结果的输出中使用它时它不起作用。如果我切换我的评论它有效。那就是如果我使用
url: https://'{{ site_from_vars_file }}'
-
name: Test connectivity to target servers
hosts: all
vars_files:
- vars.yaml
- name: "GREP API server name.. "
shell: "grep 443 $HOME/.kube/config/cluster-user.kubeconfig | awk -F '//' '{print }'"
register: grep_output
ignore_errors: true
- debug:
var: grep_output.stdout_lines
when: grep_output.stdout != ''
- name: "Validate site reachability response as 200 okay "
uri:
#url: https://'{{ site_from_vars_file }}'
url: https://'{{ grep_output }}'
return_content: yes
validate_certs: no
register: uri_output
failed_when: uri_output.status not in [200]
输出:
TASK [Gathering Facts] ****************************************************************************************************************************************
ok: [target1]
TASK [DNS test] ***********************************************************************************************************************************************
changed: [target1]
TASK [Validate DNS server] ************************************************************************************************************************************
ok: [target1] => {
"msg": "Resolved DNS server 'site.test.com' '69.172.200.109' "
}
TASK [GREP API server name..] *********************************************************************************************************************************
changed: [target1]
TASK [debug] **************************************************************************************************************************************************
ok: [target1] => {
"grep_output.stdout_lines": [
"site.test.com:443"
]
}
TASK [Validate site reachability response as 200 okay] ***************************************************************************************
fatal: [target1]: FAILED! => {"changed": false, "failed_when_result": true, "msg": "invalid literal for int() with base 10: \"True, 'end'\"", "status": -1, "url": "https://'{'changed': True, 'end': '2019-09-27 16:52:08.250231', 'stdout': 'site.test.com:443', 'cmd': \"grep 443 $HOME/.kube/config/cluster-user.kubeconfig | awk -F '//' '{print }'\", 'rc': 0, 'start': '2019-09-27 16:52:08.241668', 'stderr': '', 'delta': '0:00:00.008563', 'stdout_lines': ['site.test.com:443'], 'stderr_lines': [], 'failed': False}'"}
PLAY RECAP ****************************************************************************************************************************************************
target1 : ok=5 changed=2 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
这似乎是问题所在:
url: https://'{{ grep_output }}'
您需要将其更改为以下内容:
url: https://'{{ grep_output.stdout }}'
url: https://'{{ grep_output.stdout_lines }}'
你的游戏现在看起来像这样:
- name: "Validate site reachability response as 200 okay "
uri:
#url: https://'{{ site_from_vars_file }}'
url: https://'{{ grep_output.stdout }}'
return_content: yes
validate_certs: no
register: uri_output
failed_when: uri_output.status not in [200]
团队,
我有一个包含 url 的文本文件,我需要使用 uri anisible 模块启动它并捕获其结果以检查 http_status 代码是否为 200。我的剧本在下面,但我收到错误:
当我使用 vars 文件中定义的变量时,同样的工作。但是当我从 GREP 结果的输出中使用它时它不起作用。如果我切换我的评论它有效。那就是如果我使用
url: https://'{{ site_from_vars_file }}'
-
name: Test connectivity to target servers
hosts: all
vars_files:
- vars.yaml
- name: "GREP API server name.. "
shell: "grep 443 $HOME/.kube/config/cluster-user.kubeconfig | awk -F '//' '{print }'"
register: grep_output
ignore_errors: true
- debug:
var: grep_output.stdout_lines
when: grep_output.stdout != ''
- name: "Validate site reachability response as 200 okay "
uri:
#url: https://'{{ site_from_vars_file }}'
url: https://'{{ grep_output }}'
return_content: yes
validate_certs: no
register: uri_output
failed_when: uri_output.status not in [200]
输出:
TASK [Gathering Facts] ****************************************************************************************************************************************
ok: [target1]
TASK [DNS test] ***********************************************************************************************************************************************
changed: [target1]
TASK [Validate DNS server] ************************************************************************************************************************************
ok: [target1] => {
"msg": "Resolved DNS server 'site.test.com' '69.172.200.109' "
}
TASK [GREP API server name..] *********************************************************************************************************************************
changed: [target1]
TASK [debug] **************************************************************************************************************************************************
ok: [target1] => {
"grep_output.stdout_lines": [
"site.test.com:443"
]
}
TASK [Validate site reachability response as 200 okay] ***************************************************************************************
fatal: [target1]: FAILED! => {"changed": false, "failed_when_result": true, "msg": "invalid literal for int() with base 10: \"True, 'end'\"", "status": -1, "url": "https://'{'changed': True, 'end': '2019-09-27 16:52:08.250231', 'stdout': 'site.test.com:443', 'cmd': \"grep 443 $HOME/.kube/config/cluster-user.kubeconfig | awk -F '//' '{print }'\", 'rc': 0, 'start': '2019-09-27 16:52:08.241668', 'stderr': '', 'delta': '0:00:00.008563', 'stdout_lines': ['site.test.com:443'], 'stderr_lines': [], 'failed': False}'"}
PLAY RECAP ****************************************************************************************************************************************************
target1 : ok=5 changed=2 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
这似乎是问题所在:
url: https://'{{ grep_output }}'
您需要将其更改为以下内容:
url: https://'{{ grep_output.stdout }}'
url: https://'{{ grep_output.stdout_lines }}'
你的游戏现在看起来像这样:
- name: "Validate site reachability response as 200 okay "
uri:
#url: https://'{{ site_from_vars_file }}'
url: https://'{{ grep_output.stdout }}'
return_content: yes
validate_certs: no
register: uri_output
failed_when: uri_output.status not in [200]