Skip to content

Latest commit

 

History

History
119 lines (84 loc) · 2.74 KB

example_find_mac_addr.markdown

File metadata and controls

119 lines (84 loc) · 2.74 KB
layout title categories published alias tags reviewed reviewed-by
default
Find the MAC address
Examples
Policy
Find the MAC address
true
examples-policy-find-the-mac-address.html
Examples
Policy
MAC address
2013-06-08
atsaloli

Finding the ethernet address can vary between operating systems.

We will use CFEngine's built in function execresult to execute commands adapted for different operating systems, assign the output to variables, and filter for the MAC address. We then report on the result.

body common control
{
bundlesequence => { "example" };
}


bundle agent example
{
vars:

  linux::
    "interface" string => execresult("/sbin/ifconfig eth0", "noshell");

  solaris::
    "interface" string => execresult("/usr/sbin/ifconfig bge0", "noshell");

  freebsd::
    "interface" string => execresult("/sbin/ifconfig le0", "noshell");

  darwin::
    "interface" string => execresult("/sbin/ifconfig en0", "noshell");

# Use the CFEngine function 'regextract' to match the MAC address,
# assign it to an array called mac and set a class to indicate positive match
classes:

  linux::

  "ok" expression => regextract(
                                ".*HWaddr ([^\s]+).*(\n.*)*",  # pattern to match
                                "$(interface)",  # string to scan for pattern
                                "mac"  # put the text that matches the pattern into this array
                                );

  solaris|freebsd::

   "ok" expression => regextract(
                                ".*ether ([^\s]+).*(\n.*)*",
                                "$(interface)",
                                "mac"
                                );


  darwin::

   "ok" expression => regextract(
                                "(?s).*ether ([^\s]+).*(\n.*)*",
                                "$(interface)",
                                "mac"
                                );

# Report on the result
reports:

  ok::

    "MAC address is $(mac[1])";  # return first element in array "mac"

}

This policy can be found in /var/cfengine/masterfiles/example_find_mac_addr.cf

Example run:

# cf-agent -f example_find_mac_addr.cf
2013-06-08T16:59:19-0700   notice: R: MAC address is a4:ba:db:d7:59:32
#

While the above illustrates the flexiblity of CFEngine in running external commands and parsing their output, as of CFEngine 3.3.0, Nova 2.2.0 (2011), you can get the MAC address natively:

body common control
{
bundlesequence => { "example" };
}


bundle agent example
{
vars:

  linux::   "interface" string => "eth0";

  solaris:: "interface" string => "bge0";

  freebsd:: "interface" string => "le0";

  darwin::  "interface" string => "en0";


reports:

    "MAC address of $(interface) is: $(sys.hardware_mac[$(interface)])";
}