The following example shows one way that you could define Oracle Solaris zones configuration by declaring the zone resource type in a Puppet manifest.
Example 8 Configuring Oracle Solaris Zones With PuppetBy running the puppet describe command (as shown in the following partial example output), you would first display a list of all of the attributes that you can declare for the zone resource type:
# puppet describe zone zone ==== Manages 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 attribute (shown in the previous output) enables you to create a zone configuration file resource by using the zonecfg command as follows:
# 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@master:~# 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@master:~# cp /tmp/zone.cfg /etc/puppet/modules/mycompany
The zone that you created becomes configurable when the zone resource type is applied. You would declare the zone resource type in the Puppet manifest as follows:
zone { 'systemazone': zonecfg_export => 'puppet:///modules/mycompany/zone.conf', ensure => 'running', }
Here, the ensure attribute's value is set to installed. The value of ensure matches an acceptable status for a zone (installed, and running). In this example, a zone called systemazone is created on the node.
The last step would be to verify that the node applied the configuration to itself:
# zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / solaris shared - systemazone running /system/zones/systemazone solaris excl
The output of the previous command shows that the non-global zone systemazone is configured, installed, and running.