Neuere Versionen von Chef von Opscode stellen eine interessante Ressource zur Verfügung: ruby_block

Das sind wirklich tolle Neuigkeiten, denn damit lassen sich schnell Lösungen implementieren.

Beispielsweise kann man damit einen speziellen HTTP Request während eines Chef Laufes machen: einen GET Request an den localhost, aber mit dem Host Header auf einen FQDN gesetzt:

Installation eines Ruby Http Clients

Für dieses Beispiel müssen wir zuerst einen Ruby Http Client installieren. Ich habe hier das Gem Curb, welches auf libcurl aufbaut, verwendet. Also installieren wir diesen als erstes.

   1  curl_devel = package "curl-devel" do
   2    action :install
   3  end
   4  
   5  curl_devel.run_action(:install)

Mit dieser Schreibweise weisen wir OpsChef an den Code schon in der Compile-Phase des OpsChef Laufes auszuführen. Das ist notwendig, da wir im selben Lauf die Bibliothek verwenden wollen. Der normale package Aufruf würde nur dafür sorgen, dass curl-devel nach dem Opschef Lauf installiert ist.

Nun brauchen wir noch die Ruby Anbindung von libcurl, das Gem curb

   1  curb_gem = gem_package "curb" do
   2    action :install
   3  end
   4  
   5  curb_gem.run_action(:install)

Wie gehabt muss das wieder hier wieder in der Compile-Phase geschehen. Damit sind die Vorbereitungen für unseren ruby_block fast abgeschlossen. Wir müssen Opschef noch mitteilen, dass wir curb jetzt auch verwenden wollen. Dazu muss der Gem Pfad neu geladen und curb required werden.

   1  Gem.clear_paths
   2  
   3  require 'curb'

Ruby Code in Aktion

So. Jetzt können wir endlich unseren ruby_block verwenden.

   1  ruby_block "do-http-request-with-cutom-header" do
   2    block do
   3      timeout = 600
   4      host = "localhost:8080"
   5      real_host = "my.realhost.com"
   6      Chef::Log.info "call get on #{host}, maximal request time: #{timeout} seconds"
   7      c = Curl::Easy.new("http://#{host}/maintenance/do_something") do |curl|
   8        curl.headers['Host'] = real_host
   9        curl.verbose = true
  10        curl.timeout = timeout
  11      end
  12      c.perform
  13      if c.response_code == 200
  14        Chef::Log.info "GET success! response was:#{c.body_str}"
  15      else
  16        Chef::Log.error "GET FAILED. response code #{c.response_code}, body: #{c.body_str}"
  17      end
  18    end
  19    action :create
  20  end

Wie das Beispiel zeigt kann man mit dieser Ressource wirklich sehr viel machen.

blog comments powered by Disqus

Weitere Artikel die Sie interessieren könnten:

Deployment von Java Web Applikationen mit Chef von Opscode

There is a rework of the data driven deployment of java web applications. This Vagrant project on github ( https://github.com/iteh/vagrant-demos/ ) showcases the application cookbook for chef with a reworked application definition and LWRP for...

Links der Woche vom 2011-05-23 bis 2011-05-29

Diese Woche Links zu den Themen Windows, Ruby, opscode, JavaScript, maps, Leaflet, WordPress, Chef, windows, powershell, opschef, ios, ruby, devops, sysadmin, monitoringsucks

Links der Woche vom 2011-05-16 bis 2011-05-22

Diese Woche Links zu den Themen coffeebeans, Rails, CoffeeScript, Array, Ruby, Chef, Django, zo, devops, sysadmin, git, chef, CSS3, HTML5, WordPress, nipplegate, MongoDB, rails, rails3, asciicast, test, Android, opschef, Gem, aws, slim, Haml, ruby

Links der Woche vom 2011-05-09 bis 2011-05-15

Diese Woche Links zu den Themen wi, opschef, ActiveAdmin, rails, ror, ruby, HTML5, Chef, cnet, MongoDB, Sinatra, Rack, apple, git, aws, chef, opscode, sysadmin, Ksplice, noSQL, RubyTutorials, CSS3, EC2, AWS, MacRuby, iOS, m

Links der Woche vom 2011-05-02 bis 2011-05-08

Diese Woche Links zu den Themen rails, rack, torquebox, jruby, oreilly, opschef, sh, doc, shell, AWS, veewee, devops, mcollective

Links der Woche vom 2011-04-25 bis 2011-05-01

Diese Woche Links zu den Themen op, oschef, opscode, LWRP, Noah, chef, devops, opschef, rails, gem, railscast, Chef

Links der Woche vom 2011-04-11 bis 2011-04-17

Diese Woche Links zu den Themen ipad, iphone, opschef, ruby, OpenCV, detection, image, Weinberg, Ohai, automation, pr, test, gem, cloudfoundry, devops, cfoundry

Data Driven Deployment einer Java Web Application mit Chef Solo

Chef Application Cookbook Showcase Dieses Vagrant Projekt auf unserem Github Repository ( https://github.com/iteh/vagrant-demos/ ) zeigt die Verwendung des Application Cookbooks für Chef

Links der Woche vom 2011-04-04 bis 2011-04-10

Diese Woche Links zu den Themen Pow, Rack, ActiveRecord, Rails, Algorithms, Ruby, rails, optimize, CSS3, railscasts, chat, macbook, opschef, ruby

Links der Woche vom 2011-03-28 bis 2011-04-03

Diese Woche Links zu den Themen design, utilities, rails, asciicast, gem, ux, Awesome, jQuery, devops, Git, radiantcms, rvm, opschef, osx, MacRuby, chef, opscode, Rails, i18n, java, Vagrant, automation, Typography, Type