---
.../aeolus_recipe/lib/puppet/provider/web/curl.rb | 128 --------------------
.../lib/puppet/provider/web_request/curl.rb | 128 ++++++++++++++++++++
recipes/aeolus_recipe/lib/puppet/type/web.rb | 49 --------
.../aeolus_recipe/lib/puppet/type/web_request.rb | 49 ++++++++
recipes/aeolus_recipe/manifests/conductor.pp | 4 +-
recipes/aeolus_recipe/manifests/defaults.pp | 2 +-
6 files changed, 180 insertions(+), 180 deletions(-)
delete mode 100644 recipes/aeolus_recipe/lib/puppet/provider/web/curl.rb
create mode 100644 recipes/aeolus_recipe/lib/puppet/provider/web_request/curl.rb
delete mode 100644 recipes/aeolus_recipe/lib/puppet/type/web.rb
create mode 100644 recipes/aeolus_recipe/lib/puppet/type/web_request.rb
diff --git a/recipes/aeolus_recipe/lib/puppet/provider/web/curl.rb
b/recipes/aeolus_recipe/lib/puppet/provider/web/curl.rb
deleted file mode 100644
index 5f86e87..0000000
--- a/recipes/aeolus_recipe/lib/puppet/provider/web/curl.rb
+++ /dev/null
@@ -1,128 +0,0 @@
-require 'curb'
-require 'uuid'
-require 'fileutils'
-
-# Helper to invoke the web request w/ curl
-def web_request(method, uri, request_params, params = {})
- raise Puppet::Error, "Must specify http method and uri" if method.nil? ||
uri.nil?
-
- curl = Curl::Easy.new
-
- if params.has_key?(:cookie)
- curl.enable_cookies = true
- curl.cookiefile = params[:cookie]
- curl.cookiejar = params[:cookie]
- end
-
- curl.follow_location = (params.has_key?(:follow) && params[:follow])
-
- case(method)
- when 'get'
- url = uri
- url += ";" + request_params.collect { |k,v| "#{k}=#{v}"
}.join("&") unless request_params.nil?
- curl.url = url
- curl.http_get
- return curl
-
- when 'post'
- cparams = []
- request_params.each_pair { |k,v| cparams << Curl::PostField.content(k,v) }
unless request_params.nil?
- curl.url = uri
- curl.http_post(cparams)
- return curl
-
- #when 'put'
- #when 'delete'
- end
-end
-
-# Helper to verify the response
-def verify_result(result, verify = {})
- returns = (verify.has_key?(:returns) && !verify[:returns].nil?) ?
verify[:returns] : "200"
- returns = [returns] unless returns.is_a? Array
- unless returns.include?(result.response_code.to_s)
- raise Puppet::Error, "Invalid HTTP Return Code: #{result.response_code},
- was expecting one of #{returns.join(", ")}"
- end
-
- if verify.has_key?(:body) && !verify[:body].nil? && !(result.body_str
=~ Regexp.new(verify[:body]))
- raise Puppet::Error, "Expecting #{verify[:body]} in the result"
- end
-end
-
-# Helper to process/parse web parameters
-def process_params(request_method, params, uri)
- begin
- # Set request method and generate a unique session key
- session = "/tmp/#{UUID.new.generate}"
-
- # Invoke a login request if necessary
- if params[:login]
- login_params = params[:login].reject { |k,v| ['http_method',
'uri'].include?(k) }
- web_request(params[:login]['http_method'], params[:login]['uri'],
- login_params, :cookie => session, :follow =>
params[:follow]).close
- end
-
- # Check to see if we should actually run the request
- skip_request = !params[:unless].nil?
- if params[:unless]
- result = web_request(params[:unless]['http_method'],
params[:unless]['uri'],
- params[:unless]['parameters'],
- :cookie => session, :follow => params[:follow])
- begin
- verify_result(result,
- :returns => params[:unless]['returns'],
- :body => params[:unless]['verify'])
- rescue Puppet::Error => e
- skip_request = false
- end
- result.close
- end
- return if skip_request
-
- # Actually run the request and verify the result
- uri = params[:name] if uri.nil?
- result = web_request(request_method, uri, params[:parameters],
- :cookie => session, :follow => params[:follow])
- verify_result(result,
- :returns => params[:returns],
- :body => params[:verify])
- result.close
-
- # Invoke a logout request if necessary
- if params[:logout]
- logout_params = params[:login].reject { |k,v| ['http_method',
'uri'].include?(k) }
- web_request(params[:logout]['http_method'],
params[:logout]['uri'],
- logout_params, :cookie => session, :follow =>
params[:follow]).close
- end
-
- rescue Exception => e
- raise Puppet::Error, "An exception was raised when invoking web request:
#{e}"
-
- ensure
- FileUtils.rm_f(session) if params[:logout]
- end
-end
-
-# Puppet provider definition
-Puppet::Type.type(:web).provide :curl do
- desc "Use curl to access web resources"
-
- def get
- @uri
- end
-
- def post
- @uri
- end
-
- def get=(uri)
- @uri = uri
- process_params('get', @resource, uri)
- end
-
- def post=(uri)
- @uri = uri
- process_params('post', @resource, uri)
- end
-end
diff --git a/recipes/aeolus_recipe/lib/puppet/provider/web_request/curl.rb
b/recipes/aeolus_recipe/lib/puppet/provider/web_request/curl.rb
new file mode 100644
index 0000000..925b865
--- /dev/null
+++ b/recipes/aeolus_recipe/lib/puppet/provider/web_request/curl.rb
@@ -0,0 +1,128 @@
+require 'curb'
+require 'uuid'
+require 'fileutils'
+
+# Helper to invoke the web request w/ curl
+def web_request(method, uri, request_params, params = {})
+ raise Puppet::Error, "Must specify http method and uri" if method.nil? ||
uri.nil?
+
+ curl = Curl::Easy.new
+
+ if params.has_key?(:cookie)
+ curl.enable_cookies = true
+ curl.cookiefile = params[:cookie]
+ curl.cookiejar = params[:cookie]
+ end
+
+ curl.follow_location = (params.has_key?(:follow) && params[:follow])
+
+ case(method)
+ when 'get'
+ url = uri
+ url += ";" + request_params.collect { |k,v| "#{k}=#{v}"
}.join("&") unless request_params.nil?
+ curl.url = url
+ curl.http_get
+ return curl
+
+ when 'post'
+ cparams = []
+ request_params.each_pair { |k,v| cparams << Curl::PostField.content(k,v) }
unless request_params.nil?
+ curl.url = uri
+ curl.http_post(cparams)
+ return curl
+
+ #when 'put'
+ #when 'delete'
+ end
+end
+
+# Helper to verify the response
+def verify_result(result, verify = {})
+ returns = (verify.has_key?(:returns) && !verify[:returns].nil?) ?
verify[:returns] : "200"
+ returns = [returns] unless returns.is_a? Array
+ unless returns.include?(result.response_code.to_s)
+ raise Puppet::Error, "Invalid HTTP Return Code: #{result.response_code},
+ was expecting one of #{returns.join(", ")}"
+ end
+
+ if verify.has_key?(:body) && !verify[:body].nil? && !(result.body_str
=~ Regexp.new(verify[:body]))
+ raise Puppet::Error, "Expecting #{verify[:body]} in the result"
+ end
+end
+
+# Helper to process/parse web parameters
+def process_params(request_method, params, uri)
+ begin
+ # Set request method and generate a unique session key
+ session = "/tmp/#{UUID.new.generate}"
+
+ # Invoke a login request if necessary
+ if params[:login]
+ login_params = params[:login].reject { |k,v| ['http_method',
'uri'].include?(k) }
+ web_request(params[:login]['http_method'], params[:login]['uri'],
+ login_params, :cookie => session, :follow =>
params[:follow]).close
+ end
+
+ # Check to see if we should actually run the request
+ skip_request = !params[:unless].nil?
+ if params[:unless]
+ result = web_request(params[:unless]['http_method'],
params[:unless]['uri'],
+ params[:unless]['parameters'],
+ :cookie => session, :follow => params[:follow])
+ begin
+ verify_result(result,
+ :returns => params[:unless]['returns'],
+ :body => params[:unless]['verify'])
+ rescue Puppet::Error => e
+ skip_request = false
+ end
+ result.close
+ end
+ return if skip_request
+
+ # Actually run the request and verify the result
+ uri = params[:name] if uri.nil?
+ result = web_request(request_method, uri, params[:parameters],
+ :cookie => session, :follow => params[:follow])
+ verify_result(result,
+ :returns => params[:returns],
+ :body => params[:verify])
+ result.close
+
+ # Invoke a logout request if necessary
+ if params[:logout]
+ logout_params = params[:login].reject { |k,v| ['http_method',
'uri'].include?(k) }
+ web_request(params[:logout]['http_method'],
params[:logout]['uri'],
+ logout_params, :cookie => session, :follow =>
params[:follow]).close
+ end
+
+ rescue Exception => e
+ raise Puppet::Error, "An exception was raised when invoking web request:
#{e}"
+
+ ensure
+ FileUtils.rm_f(session) if params[:logout]
+ end
+end
+
+# Puppet provider definition
+Puppet::Type.type(:web_request).provide :curl do
+ desc "Use curl to access web resources"
+
+ def get
+ @uri
+ end
+
+ def post
+ @uri
+ end
+
+ def get=(uri)
+ @uri = uri
+ process_params('get', @resource, uri)
+ end
+
+ def post=(uri)
+ @uri = uri
+ process_params('post', @resource, uri)
+ end
+end
diff --git a/recipes/aeolus_recipe/lib/puppet/type/web.rb
b/recipes/aeolus_recipe/lib/puppet/type/web.rb
deleted file mode 100644
index 5701ac2..0000000
--- a/recipes/aeolus_recipe/lib/puppet/type/web.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-Puppet::Type.newtype(:web) do
- @doc = "Issue a request via the world wide web"
-
- newparam :name
-
- newproperty(:get) do
- desc "Issue get request to the specified uri"
- # TODO valid value to be a uri
- end
-
- newproperty(:post) do
- desc "Issue get request to the specified uri"
- # TODO valid value to be a uri
- end
-
- #newproperty(:delete)
- #newproperty(:put)
-
- newparam(:parameters) do
- desc "Hash of parameters to include in the web request"
- end
-
- newparam(:returns) do
- desc "Expected http return codes of the request"
- defaultto "200"
- # TODO validate value(s) is among possible valid http return codes
- end
-
- newparam(:follow) do
- desc "Boolean indicating if redirects should be followed"
- newvalues(:true, :false)
- end
-
- newparam(:verify) do
- desc "String to verify as being part of the result"
- end
-
- newparam(:login) do
- desc "Login parameters to be used if a login is required before making the
request"
- end
-
- newparam(:logout) do
- desc "Logout parameters to be used if a logout is requred after making the
request"
- end
-
- newparam(:unless) do
- desc "Do not run request if the request specified here succeeds"
- end
-end
diff --git a/recipes/aeolus_recipe/lib/puppet/type/web_request.rb
b/recipes/aeolus_recipe/lib/puppet/type/web_request.rb
new file mode 100644
index 0000000..5225633
--- /dev/null
+++ b/recipes/aeolus_recipe/lib/puppet/type/web_request.rb
@@ -0,0 +1,49 @@
+Puppet::Type.newtype(:web_request) do
+ @doc = "Issue a request via the world wide web"
+
+ newparam :name
+
+ newproperty(:get) do
+ desc "Issue get request to the specified uri"
+ # TODO valid value to be a uri
+ end
+
+ newproperty(:post) do
+ desc "Issue get request to the specified uri"
+ # TODO valid value to be a uri
+ end
+
+ #newproperty(:delete)
+ #newproperty(:put)
+
+ newparam(:parameters) do
+ desc "Hash of parameters to include in the web request"
+ end
+
+ newparam(:returns) do
+ desc "Expected http return codes of the request"
+ defaultto "200"
+ # TODO validate value(s) is among possible valid http return codes
+ end
+
+ newparam(:follow) do
+ desc "Boolean indicating if redirects should be followed"
+ newvalues(:true, :false)
+ end
+
+ newparam(:verify) do
+ desc "String to verify as being part of the result"
+ end
+
+ newparam(:login) do
+ desc "Login parameters to be used if a login is required before making the
request"
+ end
+
+ newparam(:logout) do
+ desc "Logout parameters to be used if a logout is requred after making the
request"
+ end
+
+ newparam(:unless) do
+ desc "Do not run request if the request specified here succeeds"
+ end
+end
diff --git a/recipes/aeolus_recipe/manifests/conductor.pp
b/recipes/aeolus_recipe/manifests/conductor.pp
index 31c5145..c3a569a 100644
--- a/recipes/aeolus_recipe/manifests/conductor.pp
+++ b/recipes/aeolus_recipe/manifests/conductor.pp
@@ -230,7 +230,7 @@ define aeolus::site_admin($email="", $password="",
$first_name="", $last_name=""
# Create a new provider via the conductor
define aeolus::conductor::provider($type="",$url=""){
- web{ "provider-$name":
+ web_request{ "provider-$name":
post => "https://localhost/conductor/admin/providers",
parameters => { 'provider[name]' => $name, 'provider[url]'
=> $url,
'provider[provider_type_codename]' => $type },
@@ -245,7 +245,7 @@ define
aeolus::conductor::provider($type="",$url=""){
}
define aeolus::conductor::hwp($memory='', $cpu='', $storage='',
$architecture=''){
- web{ "hwp-$name":
+ web_request{ "hwp-$name":
post => "https://localhost/conductor/admin/hardware_profiles",
parameters => {'hardware_profile[name]' => $name,
'hardware_profile[memory_attributes][value]' =>
$memory,
diff --git a/recipes/aeolus_recipe/manifests/defaults.pp
b/recipes/aeolus_recipe/manifests/defaults.pp
index 57b79f6..f2fc891 100644
--- a/recipes/aeolus_recipe/manifests/defaults.pp
+++ b/recipes/aeolus_recipe/manifests/defaults.pp
@@ -12,7 +12,7 @@ $admin_user='admin'
$admin_password='password'
# Setup the default login/logout targets for web requests
-Web{
+Web_request{
login => { 'http_method' => 'post',
'uri' =>
'https://localhost/conductor/user_session',
'user_session[login]' => "$admin_user",
--
1.7.2.3