Ansible:当包版本大于或等于时做一些事情
Ansible: Do something when package version greater or equals
只有当任务需要的包具有正确的版本时,我才能 运行 执行任务。在我的示例中,它是 OpenSSH 服务器。只有在 6.5 或更高版本上才能生成 ed25519 主机密钥。
这是我的任务:
- name: ensure openssh-server is present
apt:
pkg: openssh-server
state: latest
install_recommends: no
force: yes
default_release: "{{ sshd_apt_backports_distribution }}"
notify: restart sshd
- name: ensure ed25519 host key is present
command: ssh-keygen -q -t ed25519 -N "" -f ssh_host_ed25519_key
args:
chdir: /etc/ssh
creates: /etc/ssh/ssh_host_ed25519_key
错误:
failed: [localhost] => {"changed": true, "cmd": ["ssh-keygen", "-q", "-t", "ed25519", "-N", "", "-f", "ssh_host_ed25519_key"], "delta": "0:00:00.012330", "end": "2015-05-17 12:16:51.062852", "rc": 1, "start": "2015-05-17 12:16:51.050522", "warnings": []}
stderr: unknown key type ed25519
只有在存在 OpenSSH 6.5 或更高版本时,才会触发第二个任务。您可以看到 here 我的构建失败了,因为 Travis CI 在 Ubuntu 12.04 LTS 下测试 运行 并且没有实际的 OpenSSH 版本。
您可以分两步完成此操作。
首先注册openssh-server版本:
- name: Get openssh-server version
shell: 'dpkg -s openssh-server | grep "^Version" | sed -re "s/^.*:([0-9]+\.[0-9]+).*//"'
register: openssh_version
然后根据需要创建密钥:
- name: ensure ed25519 host key is present
command: ssh-keygen -q -t ed25519 -N "" -f ssh_host_ed25519_key
args:
chdir: /etc/ssh
creates: /etc/ssh/ssh_host_ed25519_key
when: openssh_version.stdout | version_compare('6.5', '>=')
我没有测试过,所以YMMV,但它应该接近你需要的。
可能还有一种更简单的方法来检查 openssh-server 版本。
上一个答案的一点后续,你不需要 grep 或 sed dpkg 的结果,命令 dpkg-query 有一个 --showformat 选项来准确获取你想要的信息:
dpkg-query --show --showformat '${Version}' openssh-server
因此您可以将它与简单命令模块一起使用:
- name: Get openssh-server version
command: /usr/bin/dpkg-query --show --showformat ${Version} openssh-server
register: openssh_version
只有当任务需要的包具有正确的版本时,我才能 运行 执行任务。在我的示例中,它是 OpenSSH 服务器。只有在 6.5 或更高版本上才能生成 ed25519 主机密钥。
这是我的任务:
- name: ensure openssh-server is present
apt:
pkg: openssh-server
state: latest
install_recommends: no
force: yes
default_release: "{{ sshd_apt_backports_distribution }}"
notify: restart sshd
- name: ensure ed25519 host key is present
command: ssh-keygen -q -t ed25519 -N "" -f ssh_host_ed25519_key
args:
chdir: /etc/ssh
creates: /etc/ssh/ssh_host_ed25519_key
错误:
failed: [localhost] => {"changed": true, "cmd": ["ssh-keygen", "-q", "-t", "ed25519", "-N", "", "-f", "ssh_host_ed25519_key"], "delta": "0:00:00.012330", "end": "2015-05-17 12:16:51.062852", "rc": 1, "start": "2015-05-17 12:16:51.050522", "warnings": []}
stderr: unknown key type ed25519
只有在存在 OpenSSH 6.5 或更高版本时,才会触发第二个任务。您可以看到 here 我的构建失败了,因为 Travis CI 在 Ubuntu 12.04 LTS 下测试 运行 并且没有实际的 OpenSSH 版本。
您可以分两步完成此操作。
首先注册openssh-server版本:
- name: Get openssh-server version
shell: 'dpkg -s openssh-server | grep "^Version" | sed -re "s/^.*:([0-9]+\.[0-9]+).*//"'
register: openssh_version
然后根据需要创建密钥:
- name: ensure ed25519 host key is present
command: ssh-keygen -q -t ed25519 -N "" -f ssh_host_ed25519_key
args:
chdir: /etc/ssh
creates: /etc/ssh/ssh_host_ed25519_key
when: openssh_version.stdout | version_compare('6.5', '>=')
我没有测试过,所以YMMV,但它应该接近你需要的。 可能还有一种更简单的方法来检查 openssh-server 版本。
上一个答案的一点后续,你不需要 grep 或 sed dpkg 的结果,命令 dpkg-query 有一个 --showformat 选项来准确获取你想要的信息:
dpkg-query --show --showformat '${Version}' openssh-server
因此您可以将它与简单命令模块一起使用:
- name: Get openssh-server version
command: /usr/bin/dpkg-query --show --showformat ${Version} openssh-server
register: openssh_version