X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=modules%2Fstdlib%2Flib%2Fpuppet%2Ftype%2Fanchor.rb;fp=modules%2Fstdlib%2Flib%2Fpuppet%2Ftype%2Fanchor.rb;h=6b817321544eaa4b9777c1de084d10dad1c8669c;hb=75e1859b97ece24e50398736c44b27133ef067c9;hp=0000000000000000000000000000000000000000;hpb=4ee17aa1cb1dbd80715204aa062faa4d920c4070;p=mirror%2Fdsa-puppet.git diff --git a/modules/stdlib/lib/puppet/type/anchor.rb b/modules/stdlib/lib/puppet/type/anchor.rb new file mode 100644 index 000000000..6b8173215 --- /dev/null +++ b/modules/stdlib/lib/puppet/type/anchor.rb @@ -0,0 +1,41 @@ +Puppet::Type.newtype(:anchor) do + desc <<-'ENDOFDESC' + A simple resource type intended to be used as an anchor in a composite class. + + In Puppet 2.6, when a class declares another class, the resources in the + interior class are not contained by the exterior class. This interacts badly + with the pattern of composing complex modules from smaller classes, as it + makes it impossible for end users to specify order relationships between the + exterior class and other modules. + + The anchor type lets you work around this. By sandwiching any interior + classes between two no-op resources that _are_ contained by the exterior + class, you can ensure that all resources in the module are contained. + + class ntp { + # These classes will have the correct order relationship with each + # other. However, without anchors, they won't have any order + # relationship to Class['ntp']. + class { 'ntp::package': } + -> class { 'ntp::config': } + -> class { 'ntp::service': } + + # These two resources "anchor" the composed classes within the ntp + # class. + anchor { 'ntp::begin': } -> Class['ntp::package'] + Class['ntp::service'] -> anchor { 'ntp::end': } + } + + This allows the end user of the ntp module to establish require and before + relationships with Class['ntp']: + + class { 'ntp': } -> class { 'mcollective': } + class { 'mcollective': } -> class { 'ntp': } + + ENDOFDESC + + newparam :name do + desc "The name of the anchor resource." + end + +end