2016-09-29 122 views
6

對於我正在開發的角色,我需要驗證內核版本是否大於特定版本。如何比較Ansible中的內核(或其他)版本號

我找到了ansible_kernel的值,但有沒有簡單的方法來比較這個與其他版本?我想我可能會手動分解'。的&上的版本字符串來比較數字,但我甚至找不到一個友好的過濾器來將版本字符串分解出來,所以我不知所措。

在此先感謝。

T

+0

用於分割,因爲ansible 2.0,可以'{{variable.split( '')}}';你可以使用'with_together'循環來比較主要版本,次要版本和補丁版本 –

+0

你可以發佈你的劇本嗎? (無論你有什麼) – helloV

回答

1

你有沒有想過使用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" 
+2

使用shell而不是模塊是可行的反模式。 –

+0

另外,不會比較字符串不一定以正確的順序放置版本? (我沒有測試過) – TobyG

7

有是它的一個test

{{ ansible_distribution_version | version_compare('12.04', '>=') }} 

{{ sample_version_var | version_compare('1.0', operator='lt', strict=True) }} 
+0

謝謝@ konstantin-suvorov。我現在已經找到了關於這方面的文檔,但看不到「嚴格」做什麼的解釋。你知道我在哪裏可以找到這個信息嗎? – TobyG

+0

請參閱[this](http://stackoverflow.com/a/11887885/2795592)關於StrictVersion vs LooseVersion的回答。 –