Skip to content

dell/openmanage-puppet

Repository files navigation

Description

This module supports standards-based implementations of Redfish for out-of-band device management. The Redfish standard is a suite of specifications that deliver an industry standard protocol providing a RESTful interface for the management of servers, storage, networking, and converged infrastructure.

https://en.wikipedia.org/wiki/Redfish_(specification)

Setup

Requirements

  • Enable pluginsync
  • Hostname or IP Address for Out-of-Band Controller (iDRAC/iLO)
  • Install device_manager module
    • puppet module install puppetlabs-device_manager
  • Install redfish_client Ruby Gem

Installation

  • The goal is to publish this to Puppet Forge as an official module. Until that time you can manually install the module for testing.
  • Manual installation:
mkdir /etc/puppetlabs/code/environments/production/modules/redfish
unzip openmanage-puppet-main.zip
cd openmanage-puppet-main
rsync -av . /etc/puppetlabs/code/environments/production/modules/redfish/

Getting Started

Agentless

To get started with agentless setup, the module must be installed in your puppet enterprise enviroment

  1. From Puppet Enterprise Web UI, go to Setup >> Inventory
  2. Select network devices and select redfish as the device type
  3. It will ask for:
    1. host (example of host is https://hostname)
    2. user
    3. password
  4. Find your node under Inspect >> Nodes and click run puppet
  5. You can now inspect the facts
  6. You can add a classification for this remote node on your site.pp or using profiles and roles as you wish.

Proxy Agent OPTIONAL

You can also choose to run the values from a proxy agent. This means another existing node can control your host.

  1. Copy and modify the code below and classify a node with that information. The details can be hardcoded under site.pp or the information can come from hiera.

Example 1: site.pp

device_manager { 
    'node01-idrac':
        type        => 'redfish',
        credentials => {
          host     => 'https://192.168.1.100',
          username => 'admin',
          password => 'password',
        },
}

Example 2: /etc/puppetlabs/code/environments/production/data/nodes/proxyhost.example.com.yaml

device_manager::devices:
    node01-idrac:
        type: 'redfish'
        credentials:
            hostname: 'https://192.168.1.100'
            username: 'root'
            password: 'calvin'
    node02-idrac:
        type: 'redfish'
        credentials:
            hostname: 'https://node02-idrac.example.com'
            username: 'root'
            password: 'calvin'
  1. Proxy Requirements a. You will need the device manager module to make use of the device manager. https://forge.puppet.com/puppetlabs/device_manager puppet module install puppetlabs-device_manager b. You will need to install the redfish_client Ruby Gem. https://rubygems.org/gems/redfish_client
node 'proxynode.example.com'  {
    include device_manager::devices
    package { 'redfish_client' :
        provider => 'puppet_gem',
        ensure   => installed,
    }
}
  1. A requirement of the device manager module is to have a system user called pe-user. useradd pe-user
  2. Once the file has been created, you can run puppet from your proxy agent using cronjobs or from Puppet Enterprise as tasks. Refer to https://forge.puppet.com/puppetlabs/device_manager#orchestration
  3. You can now apply any puppet manifests or make use of puppet device to run puppet on the fly for your appropriate remote device.

Usage

# Applies redfish attributes
redfish_attribute { 'AssetTag':
    value => 'dell'
}

redfish_attribute { 'WriteCache':
    value => 'Enabled'
}

# Creates bios config job (Will report error if "No pending data present to create a Configuration job")
redfish_job {
    'current': apply => 'yes' 
}

# Creates bios job and reboots 
redfish_reboot {'current'
    reboot => true
}

# Sets power state
redfish_power {'current'
    state => 'on' # Enum[on, force_off, force_restart, graceful_shutdown, nmi]
}

# Upgrades firmware
redfish_firmware {'current'
    url => 'http://server.example.com/FIRMWARE.EXE'
}

Example Manifest

node 'node01-idrac','node02-idrac' {
    # Set Attributes
    redfish_attribute { 'AssetTag': value => 'Dell0001' }
    redfish_attribute { 'BootMode': value => 'Bios' }
    redfish_attribute { 'AcPwrRcvry': value => 'On' }
    redfish_attribute { 'AcPwrRcvryDelay': value => 'Random' }

    # Creates BIOS Config Job (Submitting a Configuration Job is a requirement on Dell Servers)
    redfish_job {'current': apply => 'yes' }

    # Reboot Server
    redfish_power {'current': state => 'force_restart' } 
}

Using Devices

# Run against all devices (This will generate certificate requests)
puppet device -v
# Run against target device
puppet device --target node01-idrac -v
# Get specific resource attribute
puppet device --target node01-idrac -v --resource redfish_attribute AssetTag

Support

This code is provided as-is and currently not officially supported by Dell EMC.

To report problems or provide feedback https://github.com/dell/openmanage-puppet/issues

License

Copyright Dell EMC