Using Puppet to Configure Oracle Solaris Zones
The example in this section shows one way that you can declare the zone resource type in a Puppet manifest to define an Oracle Solaris Zones configuration.
Example 5-5 Configuring Oracle Solaris Zones With Puppet
The following example puppet describe command shows an excerpted list of the zone resource type characteristics:
# puppet describe zone
zone
====
Manages Oracle Solaris zones.
Parameters
----------
- **archive**
The archive file containing an archived zone.
- **archived_zonename**
The archived zone to configure and install
- **brand**
The zone's brand type
- **clone**
Instead of installing the zone, clone it from another zone.
If the zone root resides on a zfs file system, a snapshot will be
used to create the clone; if it resides on a ufs filesystem, a copy of
the
zone will be used. The zone from which you clone must not be running.
- **config_profile**
Path to the config_profile to use to configure a solaris zone.
This is set when providing a sysconfig profile instead of running the
sysconfig SCI tool on first boot of the zone.
- **ensure**
The running state of the zone. The valid states directly reflect
the states that `zoneadm` provides. The states are linear,
in that a zone must be `configured`, then `installed`, and
only then can be `running`. Note also that `halt` is currently
used to stop zones.
Valid values are `absent`, `configured`, `installed`, `running`.
.
.
.
- **zonecfg_export**
Contains the zone configuration information. This can be passed in
in the form of a file generated by the zonecfg command, in the form
of a template, or a string.
- **zonepath**
The path to zone's file system.
Providers
---------
solaris
The zonecfg_export parameter shown in the previous output enables you to create a zone configuration file resource by running the following zonecfg -z zonename command:
# zonecfg -z testzone1 Use 'create' to begin configuring a new zone. zonecfg:testzone> create create: Using system default template 'SYSdefault' zonecfg:testzone> export -f /tmp/zone.cfg zonecfg:testzone> exit root@puppet_server:~# cat /tmp/zone.cfg create -b set zonepath=/system/zones/%{zonename} set autoboot=false set autoshutdown=shutdown set ip-type=exclusive add anet set linkname=net0 set lower-link=auto set configure-allowed-address=true set link-protection=mac-nospoof set mac-address=auto end root@puppet_server:~# cp /tmp/zone.cfg /etc/puppetlabs/code/modules/mycompany
The zone that you create becomes configurable when the zone resource type is applied, so declare the zone resource type in the Puppet manifest as follows:
zone { 'systemazone':
zonecfg_export => 'puppet:///modules/mycompany/zone.conf',
ensure => 'running',
}
The ensure parameter value is installed, which is one of the valid installed or running values. In this example, the systemazone zone is created on the node.
The following command verifies that the node applied the configuration to itself successfully:
# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / solaris shared
- systemazone running /system/zones/systemazone solaris excl
This example output shows that the systemazone non-global zone is configured, installed, and running.