2016-09-29 14 views
6

Đối với vai trò tôi đang phát triển, tôi cần phải xác minh rằng phiên bản hạt nhân lớn hơn phiên bản cụ thể.Cách so sánh số phiên bản hạt nhân (hoặc khác) trong Ansible

Tôi đã tìm thấy giá trị ansible_kernel, nhưng có cách nào dễ dàng so sánh giá trị này với các phiên bản khác không? Tôi nghĩ rằng tôi có thể tự phát nổ chuỗi phiên bản trên '.'s & so sánh các con số, nhưng tôi thậm chí không thể tìm thấy một bộ lọc thân thiện để phát nổ chuỗi phiên bản, vì vậy tôi đang thua lỗ.

Xin cảm ơn trước.

T

+0

cho tách, vì ansible 2.0, bạn có thể '{{variable.split ('')}} '; sau đó bạn có thể sử dụng vòng lặp bằng cách sử dụng 'with_together' để so sánh phiên bản chính, nhỏ và bản vá lẫn nhau –

+0

Bạn có thể đăng sách của mình không? (bất cứ điều gì bạn có) – helloV

Trả lời

1

Bạn có nghĩ đến việc sử dụng mô-đun trình bao thay thế không? ví dụ:

- 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

Sử dụng shell thay vì mô-đun là ansible anti-pattern. –

+0

Ngoài ra, sẽ không so sánh các chuỗi không nhất thiết phải đặt phiên bản theo đúng thứ tự? (Tôi đã không kiểm tra điều này) – TobyG

7

Có một test cho nó:

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

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

Cảm ơn @ konstantin-suvorov. Bây giờ tôi đã tìm thấy các tài liệu về điều này, nhưng không thể nhìn thấy một lời giải thích về những gì 'nghiêm ngặt' nào. Bạn có biết nơi tôi có thể tìm thấy thông tin này không? – TobyG

+0

Xem [this] (http://stackoverflow.com/a/11887885/2795592) trả lời về StrictVersion và LooseVersion. –

Các vấn đề liên quan