Ansible 或无法正常工作(我知道是我!)
Ansible OR not working correctly (I know its me!)
我知道这是我做错的事情,但它慢慢地让我发疯。请注意,不幸的是,这不能被 yum 控制。我有一个 ansible playbook 检查是否存在 tomcat,然后检查文件内容并检索版本:
变量:
tomcat_version: 9.0.62
支票:
- name: Check for Tomcat installation
stat:
path: "{{ tomcat_directory }}/lib/catalina.jar"
register: tomcat_already_installed
- name: Get existing Tomcat version
shell: "{{ java_directory }}/bin/java -cp {{ tomcat_directory }}/lib/catalina.jar org.apache.catalina.util.ServerInfo |grep \"Server number\" |awk -F':[[:blank:]]*' '{print }' | sed '/\./ s/\.\{0,1\}0\{1,\}$//'"
register: existing_tomcat_version
这个returns一个true/false还有一个版本号。
如果版本(在 vars 中设置)不匹配或找到 Tomcat,下一个 playbook 将安装 Tomcat 或升级它。
- name: Install tomcat
include_tasks: install.yml
when:
我遇到的问题是 when 语句。这两个独立工作:
# - not tomcat_already_installed
# - "existing_tomcat_version.stdout|string not in tomcat_version"
但是,我尝试了它们之间的 or,它要么根本不安装,要么只是保持 运行每隔 运行 安装程序一次。我尝试过的事情:
# - "not tomcat_already_installed or existing_tomcat_version.stdout|string not in tomcat_version"
# - not tomcat_already_installed or existing_tomcat_version.stdout|string not in tomcat_version
# - not tomcat_already_installed or 'existing_tomcat_version.stdout|string not in tomcat_version'
- not tomcat_already_installed or "existing_tomcat_version.stdout|string" not in tomcat_version
- "( not tomcat_already_installed or existing_tomcat_version.stdout|string not in tomcat_version"
除了值看起来正常之外,调试并没有真正向我显示任何内容:
- name: Debug existing_tomcat_version.stdout
debug:
msg: "existing_tomcat_version = {{ existing_tomcat_version }}"
- name: Debug vars_tomcat_version
debug:
msg: "vars_tomcat_version = {{ tomcat_version }}"
ok: [i-0ddfdsfdsf90b8] => {
"msg": "existing_tomcat_version = 9.0.62"
}
Thursday 12 May 2022 15:38:27 +0200 (0:00:00.012) 0:00:38.711 **********
ok: [i-sdfdsfsdfsdffd] => {
"msg": "vars_tomcat_version = 9.0.62"
}
TASK [tomcat : debug tomcat_already_installed] *********************************************************************************************************************************************************************************************************************************
Thursday 12 May 2022 16:12:12 +0200 (0:00:00.915) 0:00:38.940 **********
Thursday 12 May 2022 16:12:12 +0200 (0:00:00.915) 0:00:38.939 **********
ok: [i-sdfsdfsdfsdfsdf] => {
"msg": "tomcat_already_installed = {'stat': {'exists': False}, 'changed': False, 'failed': False}"
欢迎任何帮助,我确定这只是字符串误读或格式问题。
谢谢!
为了让您步入正轨,以下剧本:
---
- hosts: localhost
gather_facts: false
vars:
# Fake the original example vars from extra_vars on this example
existing_tomcat_version:
stdout: "{{ f_tomcat_version | d('0.0.0') }}"
tomcat_already_installed: "{{ f_tomcat_exists | bool }}"
tomcat_version: 9.0.62
tasks:
- debug:
msg: "Tomcat isn't installed or is not using version {{ tomcat_version }}"
when: not (tomcat_already_installed and existing_tomcat_version.stdout is version(tomcat_version, 'eq'))
具有作为额外变量传递的不同伪造值的给定:
$ ansible-playbook playbook.yml -e f_tomcat_exists=false
PLAY [localhost] ****************************************************************************************************************************
TASK [debug] ********************************************************************************************************************************
ok: [localhost] => {
"msg": "Tomcat isn't installed or is not using version 9.0.62"
}
PLAY RECAP **********************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ ansible-playbook playbook.yml -e f_tomcat_exists=true -e f_tomcat_version=8.4.5
PLAY [localhost] ****************************************************************************************************************************
TASK [debug] ********************************************************************************************************************************
ok: [localhost] => {
"msg": "Tomcat isn't installed or is not using version 9.0.62"
}
PLAY RECAP **********************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ ansible-playbook playbook.yml -e f_tomcat_exists=true -e f_tomcat_version=9.0.62
PLAY [localhost] ****************************************************************************************************************************
TASK [debug] ********************************************************************************************************************************
skipping: [localhost]
PLAY RECAP **********************************************************************************************************************************
localhost : ok=0 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
我知道这是我做错的事情,但它慢慢地让我发疯。请注意,不幸的是,这不能被 yum 控制。我有一个 ansible playbook 检查是否存在 tomcat,然后检查文件内容并检索版本:
变量:
tomcat_version: 9.0.62
支票:
- name: Check for Tomcat installation
stat:
path: "{{ tomcat_directory }}/lib/catalina.jar"
register: tomcat_already_installed
- name: Get existing Tomcat version
shell: "{{ java_directory }}/bin/java -cp {{ tomcat_directory }}/lib/catalina.jar org.apache.catalina.util.ServerInfo |grep \"Server number\" |awk -F':[[:blank:]]*' '{print }' | sed '/\./ s/\.\{0,1\}0\{1,\}$//'"
register: existing_tomcat_version
这个returns一个true/false还有一个版本号。
如果版本(在 vars 中设置)不匹配或找到 Tomcat,下一个 playbook 将安装 Tomcat 或升级它。
- name: Install tomcat
include_tasks: install.yml
when:
我遇到的问题是 when 语句。这两个独立工作:
# - not tomcat_already_installed
# - "existing_tomcat_version.stdout|string not in tomcat_version"
但是,我尝试了它们之间的 or,它要么根本不安装,要么只是保持 运行每隔 运行 安装程序一次。我尝试过的事情:
# - "not tomcat_already_installed or existing_tomcat_version.stdout|string not in tomcat_version"
# - not tomcat_already_installed or existing_tomcat_version.stdout|string not in tomcat_version
# - not tomcat_already_installed or 'existing_tomcat_version.stdout|string not in tomcat_version'
- not tomcat_already_installed or "existing_tomcat_version.stdout|string" not in tomcat_version
- "( not tomcat_already_installed or existing_tomcat_version.stdout|string not in tomcat_version"
除了值看起来正常之外,调试并没有真正向我显示任何内容:
- name: Debug existing_tomcat_version.stdout
debug:
msg: "existing_tomcat_version = {{ existing_tomcat_version }}"
- name: Debug vars_tomcat_version
debug:
msg: "vars_tomcat_version = {{ tomcat_version }}"
ok: [i-0ddfdsfdsf90b8] => {
"msg": "existing_tomcat_version = 9.0.62"
}
Thursday 12 May 2022 15:38:27 +0200 (0:00:00.012) 0:00:38.711 **********
ok: [i-sdfdsfsdfsdffd] => {
"msg": "vars_tomcat_version = 9.0.62"
}
TASK [tomcat : debug tomcat_already_installed] *********************************************************************************************************************************************************************************************************************************
Thursday 12 May 2022 16:12:12 +0200 (0:00:00.915) 0:00:38.940 **********
Thursday 12 May 2022 16:12:12 +0200 (0:00:00.915) 0:00:38.939 **********
ok: [i-sdfsdfsdfsdfsdf] => {
"msg": "tomcat_already_installed = {'stat': {'exists': False}, 'changed': False, 'failed': False}"
欢迎任何帮助,我确定这只是字符串误读或格式问题。 谢谢!
为了让您步入正轨,以下剧本:
---
- hosts: localhost
gather_facts: false
vars:
# Fake the original example vars from extra_vars on this example
existing_tomcat_version:
stdout: "{{ f_tomcat_version | d('0.0.0') }}"
tomcat_already_installed: "{{ f_tomcat_exists | bool }}"
tomcat_version: 9.0.62
tasks:
- debug:
msg: "Tomcat isn't installed or is not using version {{ tomcat_version }}"
when: not (tomcat_already_installed and existing_tomcat_version.stdout is version(tomcat_version, 'eq'))
具有作为额外变量传递的不同伪造值的给定:
$ ansible-playbook playbook.yml -e f_tomcat_exists=false
PLAY [localhost] ****************************************************************************************************************************
TASK [debug] ********************************************************************************************************************************
ok: [localhost] => {
"msg": "Tomcat isn't installed or is not using version 9.0.62"
}
PLAY RECAP **********************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ ansible-playbook playbook.yml -e f_tomcat_exists=true -e f_tomcat_version=8.4.5
PLAY [localhost] ****************************************************************************************************************************
TASK [debug] ********************************************************************************************************************************
ok: [localhost] => {
"msg": "Tomcat isn't installed or is not using version 9.0.62"
}
PLAY RECAP **********************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ ansible-playbook playbook.yml -e f_tomcat_exists=true -e f_tomcat_version=9.0.62
PLAY [localhost] ****************************************************************************************************************************
TASK [debug] ********************************************************************************************************************************
skipping: [localhost]
PLAY RECAP **********************************************************************************************************************************
localhost : ok=0 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0