variables created with generate() function have a newline when used in a template

2,902 views
Skip to first unread message

bowlby

unread,
Dec 26, 2010, 6:45:04 AM12/26/10
to Puppet Users
I have this in nodes.pp

$puppetmaster_fqdn = generate("/usr/bin/facter","fqdn")

and this in a template

http://<%= puppetmaster_fqdn %>:8080

When puppet runs, this is the result:

http://puppet.home
:8080

Anybody any clue to whats causing this? I've tried -%>

R.I.Pienaar

unread,
Dec 26, 2010, 6:53:55 AM12/26/10
to puppet...@googlegroups.com

----- Original Message -----
> I have this in nodes.pp
>
> $puppetmaster_fqdn = generate("/usr/bin/facter","fqdn")

the output from this command has a new line in it

> http://<%= puppetmaster_fqdn %>:8080

<%= puppetmaster_fqdn.chomp %>

--
R.I.Pienaar

Daniel Pittman

unread,
Dec 26, 2010, 6:54:29 AM12/26/10
to puppet...@googlegroups.com

I suspect that -%> only eats whitespace outside the bracket, not
inside. Anyhow, you can make this do the right thing using a tiny bit
of ruby: <%= puppetmaster_fqdn.chomp %>

Regards,
Daniel
--
✣ Daniel Pittman            ✉ dan...@rimspace.net            ☎ +61 401 155 707
              ♽ made with 100 percent post-consumer electrons

bowlby

unread,
Dec 26, 2010, 7:43:26 AM12/26/10
to Puppet Users
Thanks, both of you! That solved it.

Merry Christmas (for what's left of it...)



On Dec 26, 12:54 pm, Daniel Pittman <dan...@rimspace.net> wrote:

jcbollinger

unread,
Dec 14, 2012, 9:17:24 AM12/14/12
to puppet...@googlegroups.com


On Thursday, December 13, 2012 9:48:44 AM UTC-6, Sven vd wrote:
This works when using the variable inside a template.

But I want to use the variable in an Exec command. How to remove the newline here? .chomp does not seem to work here.


No, it wouldn't.  The 'chomp' is a method of Ruby's String class.  It works in the embedded Ruby context in a template, but it is not part of the Puppet DSL, so it does not work for ordinary variable interpolation.

The underlying problem is that the generate() command you are using is outputting a trailing newline that gets incorporated into the resulting value.  That's not too surprising, as it is good form for programs (such as whatever external command you are running) to terminate their output with a newline.

You have two main options:
  1. Modify the command in some way or filter its output to remove the newline before it reaches Puppet
  2. Remove the newline inside Puppet
I leave you to figure out (1) on your own.  You have multiple approaches available for (2).  The easiest built into Puppet is to use a template, probably via the inline_template() function:

  $result_line = generate('my command')
  $result = inline_template('<%= @result_line.chomp %>')

That's a little ugly, though.  If you have or are willing to install Puppetlabs' "stdlib" add-on module, then it provides a chomp() function in Puppet.  With that, you could replace the second line above with:

  $result = chomp($result_line)

Note well that Puppet variables can only be assigned values once each.  That's why my examples use two variables ($result_line and $result).


John

Sven vd

unread,
Dec 14, 2012, 12:07:30 PM12/14/12
to puppet...@googlegroups.com
Thanks for your complete answer! I used the inline_template method which is good enough for me
Reply all
Reply to author
Forward
0 new messages