我是Ansible的新手(1.9.2).我想检查当前的zlib版本.如果它不是1.2.8,那么Ansible需要从源代码安装它.
检查当前zlib版本的命令是
root@node2 zlib-1.2.8]# cat /usr/local/include/zlib.h | grep "#define ZLIB_VERSION" | awk '{print $3}'
"1.2.8
Run Code Online (Sandbox Code Playgroud)
我的Ansible代码
- name: "Check zlib version "
shell: "cat /usr/local/include/zlib.h | grep \"#define ZLIB_VERSION\" | awk '{print $3}'"
register: zlib_version
- name: "Debug result"
debug: result
- name: "Build zlib "
command: "{{ item }} chdir=/home/zlib-1.2.8"
with_items:
- "./configure --prefix=/usr/local --shared"
- make
- make install
when: "zlib_version!=1.2.8"
Run Code Online (Sandbox Code Playgroud)
调试打印"你好世界"!!!
TASK: [Debug result] **********************************************************
ok: [192.168.111.81] => {
"msg": "Hello world!"
}
Run Code Online (Sandbox Code Playgroud)
如何检查shell输出并相应地运行命令.
我改变了debug: var=zlib_version.stdout
.它打印
TASK: [Debug result] **********************************************************
ok: [192.168.111.81] => {
"var": {
"zlib_version.stdout": "\"1.2.8\""
}
}
Run Code Online (Sandbox Code Playgroud)
但是,现在我需要写zlib_version.stdout.find ("\"1.2.8\"") == -1
两次.是否有一种简单的方法可以使Ansible在匹配时跳过所有命令,shell和unarchive zlib_version.stdout.find ("\"1.2.8\"") == -1
?
- name: "Check zlib version "
shell: "cat /usr/local/include/zlib.h | grep \"#define ZLIB_VERSION\" | awk '{print $3}'"
ignore_errors: true
register: zlib_version
- unarchive: src=/home/files/nigex/zlib-1.2.8.tar.gz dest=/home/
when: zlib_version.stdout.find ("\"1.2.8\"") == -1
- name: "Debug result"
debug: var=zlib_version.stdout
- name: "Build zlib "
command: "{{ item }} chdir=/home/zlib-1.2.8"
with_items:
- "./configure --prefix=/usr/local --shared"
- make
- make install
when: zlib_version.stdout.find ("\"1.2.8\"") == -1
Run Code Online (Sandbox Code Playgroud)
shell命令的输出可通过stdout
属性获得.所以zlib_version.stdout
会给你输出命令.
- name: "Debug result"
debug: var=zlib_version.stdout
Run Code Online (Sandbox Code Playgroud)
可以创建一个简单的角色以避免两次写入条件.像这样的东西:
# file roles/zlib/tasks/main.yml
---
- unarchive: src=/home/files/nigex/zlib-1.2.8.tar.gz dest=/home/
- name: "Build zlib "
command: "{{ item }} chdir=/home/zlib-1.2.8"
with_items:
- "./configure --prefix=/usr/local --shared"
- make
- make install
Run Code Online (Sandbox Code Playgroud)
然后仅在条件为真时包括角色.
# pre_tasks is needed instead of tasks since this needs to be run before the role is included
pre_tasks:
- name: "Check zlib version "
shell: "cat /usr/local/include/zlib.h | grep \"#define ZLIB_VERSION\" | awk '{print $3}'"
ignore_errors: true
register: zlib_version
roles:
- { role: zlib, when: "zlib_version.stdout.find ('\"1.2.8\"') == -1" }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7294 次 |
最近记录: |