How to get processeur vendor ?

1,043 views
Skip to first unread message

Florent B

unread,
Jan 12, 2018, 10:50:38 AM1/12/18
to Ansible Project
Hi,

I would like to get the processor vendor of any host.

I see a lot of examples over the internet using a condition like this :

    '"Intel" in ansible_processor[0]'

But my "ansible_processor[0]" variable on my hosts contains ... "0" !!

I use Ansible 2.4.2.0. When did it change ? Is it expected to work like
this ? What about computers having single CPU ?

Thank you.

Flo

Eric Secrist

unread,
Feb 13, 2018, 4:01:31 PM2/13/18
to Ansible Project
Hi Flow,
Did you ever get an answer to your question. I see a different number of list values for ansible_processor between two hosts, which makes it difficult to easily gather the processor vendor across many hosts.

ok: [host1] => {

    "hostvars[inventory_hostname].ansible_processor": [

        "GenuineIntel",

        "Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz",

        "GenuineIntel",

        "Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz"

    ]

}

ok: [host2] => {

    "hostvars[inventory_hostname].ansible_processor": [

        "0",

        "GenuineIntel",

        "Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz",

        "1",

        "GenuineIntel",

        "Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz"

    ]

}


host2 has the extra list values of "0" and "1".

Thanks,
Eric

Kai Stian Olstad

unread,
Feb 23, 2018, 11:03:54 AM2/23/18
to ansible...@googlegroups.com
On Tuesday, 13 February 2018 22.01.30 CET Eric Secrist wrote:
> Hi Flow,
> Did you ever get an answer to your question. I see a different number of
> list values for ansible_processor between two hosts, which makes it
> difficult to easily gather the processor vendor across many hosts.
>
> ok: [host1] => {
> "hostvars[inventory_hostname].ansible_processor": [
> "GenuineIntel",
> "Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz",
> "GenuineIntel",
> "Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz"
> ]
> }
>
> ok: [host2] => {
> "hostvars[inventory_hostname].ansible_processor": [
> "0",
> "GenuineIntel",
> "Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz",
> "1",
> "GenuineIntel",
> "Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz"
> ]
> }
>
> host2 has the extra list values of "0" and "1".

The variable ansible_processor, on Linux it is parsing /proc/cpuinfo line by line while looking for
'model name', 'Processor', 'vendor_id', 'cpu', 'Vendor', 'processor'

The first one it find become element 0 and the second becomes element 1 and so on.
So if your /proc/cpuinfo differ you will get different result on different host.

So if you host1 and host2 is Linux it did not find processor on host1 because it does not exist in /proc/cpuinfo therefor the element 0 in the list become the vendor_id instead since it found that first.

This make ansible_processor unpredictable and you should probably find the information yourself.

--
Kai Stian Olstad
Reply all
Reply to author
Forward
0 new messages