只有在需要的软件包具有正确的版本时才运行任务。在我的例子中,它是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版本。
答案 0 :(得分:2)
您可以分两步完成此操作。
首先注册openssh-server版本:
- name: Get openssh-server version
shell: 'dpkg -s openssh-server | grep "^Version" | sed -re "s/^.*:([0-9]+\.[0-9]+).*/\1/"'
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版本。
答案 1 :(得分:0)
对前一个答案进行一点跟进,你不需要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