[chef] Re: Re: Re: more of a ruby problem


Chronological Thread 
  • From: Daniel Condomitti < >
  • To:
  • Subject: [chef] Re: Re: Re: more of a ruby problem
  • Date: Tue, 29 Oct 2013 23:23:26 -0700

If you can’t use node[:fqdn] due to it including the rest of the node’s hostname then you need to call .chomp on the output from ShellOut.run_command:

chef > Mixlib::ShellOut.new('hostname -s').run_command.stdout
 => "disrupt\n” 

Otherwise you’ll never match that ‘account-rest.properties’ file since it contains “pdevecsas300:acc1” and not “pdevecsas300\n:acc1”. I’d really recommend leveraging as much of chef’s helpers like node attributes and Ruby classes (File, Dir) as possible instead of shelling out. Look at node.hostname, it may return the result you’re looking for without shelling out; otherwise, use node.hostname.split(‘.’).first so you just get the first part of the hostname that’s contained in the file you’re loading.


On Tuesday, October 29, 2013 at 11:13 PM, Manoj Thakkar wrote:

Thanks Daniel,

but i always get the value of hostname when i run my chef client( even the MixLIb shell out did not fix the issue ) , also i want only the hostname not the fullyqualified hostname so unfortunately i can not use fqdn :( 



hostc=Mixlib::ShellOut.new("hostname -s")
hostc.run_command
host=hostc.stdout

hostp=`hostname -s`
Chef::Log.info " host name is #{hostp} "

puts " hostname is #{host}"


File.open("/local_app/account-rest.properties", "r").each_line do |line|
  puts line
  puts host
   line.chomp
if line.include?(host)

puts " found host #{line}"

logs below ::

Recipe: base_tomcat::default.new
  * ruby_block[acc-deploy-host] action run[2013-10-29T23:09:36-07:00] INFO: Processing ruby_block[acc-deploy-host] action run (base_tomcat::default.new line 9)
[2013-10-29T23:09:36-07:00] INFO:  host name is pdevecsas300
 
 hostname is pdevecsas300
pbldejksu300:acc1,acc2
pdevecsas300
pdevecsas300:acc1,acc2
pdevecsas300


On Tue, Oct 29, 2013 at 11:04 PM, Daniel Condomitti < " target="_blank"> > wrote:
Sean brought this up in your previous thread but it’s most likely due to the back ticks being evaluated during the compile phase versus the run phase. Use Chef::Log.info to output debugging information and avoid shelling out in favor of Mixlib::ShellOut. Also, you can get the node hostname through node[:fqdn].

host = node[:fqdn]
Chef::Log.info "Hostname is #{node[:fqdn]}"

File.open("/local_app/account-rest.properties", "r").each_line do |line|
  Chef::Log.debug "#{host} Account Rest line: #{line}"
  if line.include?(host)
    Chef::Log.info "Found host #{host} in #{line}"
    account_value = line.split(':').last
    Chef::Log.info "Found account value #{account_value}"
  end
end

On Tuesday, October 29, 2013 at 10:51 PM, Manoj Thakkar wrote:

Hi All,

i have written this code but it never goes in if condition , i ma not sure why , 
if i replace the host with the real value of the hostname -s it does work , i am not sure what the issue is ,
might be a syntax error but Ruby does not complain about it , it silently ignores the if condition

please advise.


host=`hostname -s`

puts " hostname is #{host}"


File.open("/local_app/account-rest.properties", "r").each_line do |line|
  puts line
  puts host
   line.chomp
if line.include? "host"

puts " found host #{line}"

value = line.split(":").last
puts " found account value  #{value}"
puts value

end
end






Archive powered by MHonArc 2.6.16.

§