String substitution in Puppet?
Solution 1
Yes, it is possible.
Check the puppet function reference: http://docs.puppetlabs.com/references/2.7.3/function.html
There's a regular expression substitution function built in. It probably calls the same underlying gsub function.
$hostname_without_number = regsubst($hostname, '\d+$', '')
Or if you prefer to actually call out to Ruby, you can use an inline ERB template:
$hostname_without_number = inline_template('<%= hostname.gsub(/\d+$/, "") %>')
Solution 2
In this page:
https://blog.kumina.nl/2010/03/puppet-tipstricks-testing-your-regsubst-replacings-2/comment-page-1/
it is quite well explained and there is a fantastic trick for testing your regular expressions with irb.
Whith this link and the answer of freiheit I could resolve my problem with substitution of '\' for '/'.
$programfiles_sinbackslash = regsubst($env_programfiles,'\','/','G')
Related videos on Youtube
richardkmiller
Building software for genealogists at www.goldiemay.com.
Updated on December 07, 2020Comments
-
richardkmiller over 3 years
Is it possible to do a string substitution/transformation in Puppet using a regular expression?
If $hostname is "web1", I want $hostname_without_number to be "web". The following isn't valid Puppet syntax, but I think I need something like this:
$hostname_without_number = $hostname.gsub(/\d+$/, '')
-
richardkmiller about 12 yearsThanks! I'll use the built-in regsubst() this time, but I'm very glad to know about inline_template as well! That's very flexible.
-
killthrush over 7 yearsIt's worth pointing out that
regsubst()
also supports a flags arg in the 4th position. A flag such as 'G' will globally replace all matches in the provided string. -
Ceddaerrix over 2 yearsProviding Puppet v6 version of the link puppet.com/docs/puppet/6/function.html