對於我正在開發的角色,我需要驗證內核版本是否大於特定版本。如何比較Ansible中的內核(或其他)版本號
我找到了ansible_kernel的值,但有沒有簡單的方法來比較這個與其他版本?我想我可能會手動分解'。的&上的版本字符串來比較數字,但我甚至找不到一個友好的過濾器來將版本字符串分解出來,所以我不知所措。
在此先感謝。
T
對於我正在開發的角色,我需要驗證內核版本是否大於特定版本。如何比較Ansible中的內核(或其他)版本號
我找到了ansible_kernel的值,但有沒有簡單的方法來比較這個與其他版本?我想我可能會手動分解'。的&上的版本字符串來比較數字,但我甚至找不到一個友好的過濾器來將版本字符串分解出來,所以我不知所措。
在此先感謝。
T
你有沒有想過使用shell模塊呢?例如:
- name: Get Kernel version
shell: uname -r | egrep '^[0-9]*\.[0-9]*' -o
register: kernel_shell_output
- debug: msg="{{ kernel_shell_output.stdout}}"
- name: Add cstate and reboot bios if kernel is 4.8
shell: echo "do what yo need to do"
when: kernel_shell_output.stdout == "4.8"
使用shell而不是模塊是可行的反模式。 –
另外,不會比較字符串不一定以正確的順序放置版本? (我沒有測試過) – TobyG
有是它的一個test:
{{ ansible_distribution_version | version_compare('12.04', '>=') }}
{{ sample_version_var | version_compare('1.0', operator='lt', strict=True) }}
謝謝@ konstantin-suvorov。我現在已經找到了關於這方面的文檔,但看不到「嚴格」做什麼的解釋。你知道我在哪裏可以找到這個信息嗎? – TobyG
請參閱[this](http://stackoverflow.com/a/11887885/2795592)關於StrictVersion vs LooseVersion的回答。 –
用於分割,因爲ansible 2.0,可以'{{variable.split( '')}}';你可以使用'with_together'循環來比較主要版本,次要版本和補丁版本 –
你可以發佈你的劇本嗎? (無論你有什麼) – helloV