[PATCH aggregator] Deployables new UI
by lmartinc@redhat.com
From: Ladislav Martincik <lmartinc(a)redhat.com>
This patch contains only basic deployable with property name.
---
.../image_factory/deployables_controller.rb | 63 +++++++++++++++
src/app/models/deployable.rb | 2 +
src/app/views/image_factory/deployables/_form.haml | 7 ++
src/app/views/image_factory/deployables/_list.haml | 28 +++++++
.../image_factory/deployables/_properties.haml | 4 +
src/app/views/image_factory/deployables/edit.haml | 4 +
src/app/views/image_factory/deployables/index.haml | 3 +-
src/app/views/image_factory/deployables/new.haml | 3 +
src/app/views/image_factory/deployables/show.haml | 5 +
src/config/routes.rb | 3 +-
src/db/development_structure.sql | 83 ++++++++++++++++++++
.../migrate/20110112094108_create_deployables.rb | 13 +++
src/features/deployable.feature | 50 ++++++++++++
src/features/step_definitions/deployable_steps.rb | 20 +++++
src/features/support/paths.rb | 3 +
15 files changed, 289 insertions(+), 2 deletions(-)
create mode 100644 src/app/models/deployable.rb
create mode 100644 src/app/views/image_factory/deployables/_form.haml
create mode 100644 src/app/views/image_factory/deployables/_list.haml
create mode 100644 src/app/views/image_factory/deployables/_properties.haml
create mode 100644 src/app/views/image_factory/deployables/edit.haml
create mode 100644 src/app/views/image_factory/deployables/new.haml
create mode 100644 src/app/views/image_factory/deployables/show.haml
create mode 100644 src/db/development_structure.sql
create mode 100644 src/db/migrate/20110112094108_create_deployables.rb
create mode 100644 src/features/deployable.feature
create mode 100644 src/features/step_definitions/deployable_steps.rb
diff --git a/src/app/controllers/image_factory/deployables_controller.rb b/src/app/controllers/image_factory/deployables_controller.rb
index efe521f..5b8210c 100644
--- a/src/app/controllers/image_factory/deployables_controller.rb
+++ b/src/app/controllers/image_factory/deployables_controller.rb
@@ -1,6 +1,69 @@
class ImageFactory::DeployablesController < ApplicationController
before_filter :require_user
+ before_filter :load_deployables, :only => [:index, :show]
def index
end
+
+ def show
+ @deployable = Deployable.find(params[:id])
+ @url_params = params.clone
+ @tab_captions = ['Properties']
+ @details_tab = params[:details_tab].blank? ? 'properties' : params[:details_tab]
+ respond_to do |format|
+ format.js do
+ if @url_params.delete :details_pane
+ render :partial => 'layouts/details_pane' and return
+ end
+ render :partial => @details_tab and return
+ end
+ format.html { render :action => 'show'}
+ end
+ end
+
+ def new
+ @deployable = Deployable.new
+ end
+
+ def create
+ @deployable = Deployable.new(params[:deployable])
+ if @deployable.save
+ flash[:notice] = "Deployable added."
+ redirect_to image_factory_deployable_url(@deployable)
+ else
+ render :action => :new
+ end
+ end
+
+ def edit
+ @deployable = Deployable.find(params[:id])
+ end
+
+ def update
+ @deployable = Deployable.find(params[:id])
+ if @deployable.update_attributes(params[:deployable])
+ flash[:notice] = "Deployable updated."
+ redirect_to image_factory_deployable_url(@deployable)
+ else
+ render :action => :edit
+ end
+ end
+
+ def multi_destroy
+ Deployable.destroy(params[:deployables_selected])
+ redirect_to image_factory_deployables_url
+ end
+
+ protected
+
+ def load_deployables
+ @header = [
+ { :name => "Deployable name", :sort_attr => :name }
+ ]
+ @deployables = Deployable.paginate(:all,
+ :page => params[:page] || 1,
+ :order => (params[:order_field] || 'name') +' '+ (params[:order_dir] || 'asc')
+ )
+ @url_params = params.clone
+ end
end
diff --git a/src/app/models/deployable.rb b/src/app/models/deployable.rb
new file mode 100644
index 0000000..f4891d8
--- /dev/null
+++ b/src/app/models/deployable.rb
@@ -0,0 +1,2 @@
+class Deployable < ActiveRecord::Base
+end
diff --git a/src/app/views/image_factory/deployables/_form.haml b/src/app/views/image_factory/deployables/_form.haml
new file mode 100644
index 0000000..cd08ebc
--- /dev/null
+++ b/src/app/views/image_factory/deployables/_form.haml
@@ -0,0 +1,7 @@
+= form.error_messages
+%fieldset.clear
+ = form.label :name, t(:name), :class => "grid_3 alpha"
+ = form.text_field :name, :class => "grid_5"
+%fieldset.clearfix
+ = form.submit "Save", :class => "submit formbutton"
+ = link_to t(:cancel), image_factory_deployables_path, :class => 'button formbutton'
diff --git a/src/app/views/image_factory/deployables/_list.haml b/src/app/views/image_factory/deployables/_list.haml
new file mode 100644
index 0000000..e2933f0
--- /dev/null
+++ b/src/app/views/image_factory/deployables/_list.haml
@@ -0,0 +1,28 @@
+- form_tag do
+ = link_to "Create", new_image_factory_deployable_url, :class => 'button'
+ = restful_submit_tag "Delete", 'destroy', multi_destroy_image_factory_deployables_path, 'DELETE', :id => 'delete_button'
+
+ %table#deployables_table
+ %thead
+ %tr
+ %th
+ %th= link_to "Name", image_factory_deployables_url(:sort_by => "name")
+ -(a)deployables.each do |deployable|
+ %tr
+ %td
+ %input{:name => "deployables_selected[]", :type => "checkbox", :value => deployable.id, :id => "deployable_checkbox_#{deployable.id}" }
+ %td= link_to deployable.name, image_factory_deployable_path(deployable)
+
+:javascript
+ $(document).ready(function () {
+ $('#delete_button').click(function(e) {
+ if ($("#deployables_table input[@type=radio]:checked").length == 0) {
+ alert('Please select any deployable to be deleted before clicking Delete button.');
+ e.preventDefault();
+ } else {
+ if (!confirm("Are you sure you want to delete this deployable?")) {
+ e.preventDefault();
+ }
+ }
+ });
+ });
diff --git a/src/app/views/image_factory/deployables/_properties.haml b/src/app/views/image_factory/deployables/_properties.haml
new file mode 100644
index 0000000..e8b513c
--- /dev/null
+++ b/src/app/views/image_factory/deployables/_properties.haml
@@ -0,0 +1,4 @@
+.grid_13
+ %h2 #{(a)deployable.name}
+
+ = link_to 'Edit', edit_image_factory_deployable_path(@deployable), :class => 'button'
diff --git a/src/app/views/image_factory/deployables/edit.haml b/src/app/views/image_factory/deployables/edit.haml
new file mode 100644
index 0000000..fc47660
--- /dev/null
+++ b/src/app/views/image_factory/deployables/edit.haml
@@ -0,0 +1,4 @@
+%h2 Editing Deployable: #{(a)deployable.name}
+
+- form_for @deployable, :url => image_factory_deployable_path(@deployable), :html => { :method => :put } do |f|
+ = render :partial => "form", :locals => { :form => f }
diff --git a/src/app/views/image_factory/deployables/index.haml b/src/app/views/image_factory/deployables/index.haml
index edd58fc..62ccbc6 100644
--- a/src/app/views/image_factory/deployables/index.haml
+++ b/src/app/views/image_factory/deployables/index.haml
@@ -1 +1,2 @@
-image_factory/deployables/index.haml
+- content_for :list do
+ = render :partial => 'list'
diff --git a/src/app/views/image_factory/deployables/new.haml b/src/app/views/image_factory/deployables/new.haml
new file mode 100644
index 0000000..cc582a3
--- /dev/null
+++ b/src/app/views/image_factory/deployables/new.haml
@@ -0,0 +1,3 @@
+%h2 New Deployable
+- form_for @deployable, :url => image_factory_deployables_path do |f|
+ = render :partial => "form", :locals => { :form => f }
diff --git a/src/app/views/image_factory/deployables/show.haml b/src/app/views/image_factory/deployables/show.haml
new file mode 100644
index 0000000..05eeedd
--- /dev/null
+++ b/src/app/views/image_factory/deployables/show.haml
@@ -0,0 +1,5 @@
+- content_for :list do
+ = render :partial => 'list'
+
+- content_for :details do
+ = render :partial => 'layouts/details_pane'
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 6d9b5cf..816a13a 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -39,7 +39,8 @@ ActionController::Routing::Routes.draw do |map|
end
map.namespace 'image_factory' do |r|
- r.resources :assemblies, :deployables
+ r.resources :assemblies
+ r.resources :deployables, :collection => { :multi_destroy => :delete }
r.resources :templates, :collection => {:collections => :get, :add_selected => :get, :metagroup_packages => :get, :remove_package => :get, :multi_destroy => :delete}
r.resources :builds
end
diff --git a/src/db/development_structure.sql b/src/db/development_structure.sql
new file mode 100644
index 0000000..e362260
--- /dev/null
+++ b/src/db/development_structure.sql
@@ -0,0 +1,83 @@
+CREATE TABLE "base_permission_objects" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "cloud_accounts" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "label" varchar(255) NOT NULL, "username" varchar(255) NOT NULL, "password" varchar(255) NOT NULL, "provider_id" integer NOT NULL, "quota_id" integer, "lock_version" integer DEFAULT 0, "account_number" varchar(255) NOT NULL, "x509_cert_priv" text NOT NULL, "x509_cert_pub" text NOT NULL, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "cloud_accounts_pool_families" ("cloud_account_id" integer NOT NULL, "pool_family_id" integer NOT NULL);
+CREATE TABLE "deployables" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "hardware_profile_map" ("aggregator_hardware_profile_id" integer, "provider_hardware_profile_id" integer);
+CREATE TABLE "hardware_profile_properties" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "kind" varchar(255) NOT NULL, "unit" varchar(255) NOT NULL, "value" varchar(255) NOT NULL, "range_first" varchar(255), "range_last" varchar(255), "lock_version" integer DEFAULT 0, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "hardware_profiles" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "external_key" varchar(255) NOT NULL, "name" varchar(1024) NOT NULL, "memory_id" integer, "storage_id" integer, "cpu_id" integer, "architecture_id" integer, "provider_id" integer, "lock_version" integer DEFAULT 0, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "images" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "uuid" varchar(255), "name" varchar(255) NOT NULL, "build_id" varchar(255), "uri" varchar(255), "status" varchar(255), "target" varchar(255), "template_id" integer, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "instance_events" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "instance_id" integer NOT NULL, "event_type" varchar(255) NOT NULL, "event_time" datetime, "status" varchar(255), "message" varchar(255), "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "instance_hwps" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "memory" varchar(255), "cpu" varchar(255), "architecture" varchar(255), "storage" varchar(255), "lock_version" integer DEFAULT 0);
+CREATE TABLE "instance_keys" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "cloud_account_id" integer NOT NULL, "name" varchar(255) NOT NULL, "pem" text, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "instances" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "external_key" varchar(255), "name" varchar(1024) NOT NULL, "hardware_profile_id" integer NOT NULL, "template_id" integer NOT NULL, "realm_id" integer, "owner_id" integer, "pool_id" integer NOT NULL, "cloud_account_id" integer, "instance_hwp_id" integer, "public_addresses" varchar(255), "private_addresses" varchar(255), "state" varchar(255), "condor_job_id" varchar(255), "last_error" text(255), "instance_key_id" integer, "lock_version" integer DEFAULT 0, "acc_pending_time" integer DEFAULT 0, "acc_running_time" integer DEFAULT 0, "acc_shutting_down_time" integer DEFAULT 0, "acc_stopped_time" integer DEFAULT 0, "time_last_pending" datetime, "time_last_running" datetime, "time_last_shutting_down" datetime, "time_last_stopped" datetime, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "metadata_objects" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "key" varchar(255) NOT NULL, "value" varchar(255) NOT NULL, "object_type" varchar(255), "lock_version" integer DEFAULT 0, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "permissions" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "role_id" integer NOT NULL, "user_id" integer NOT NULL, "permission_object_id" integer, "permission_object_type" varchar(255), "lock_version" integer DEFAULT 0, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "pool_families" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "description" varchar(255), "lock_version" integer DEFAULT 0, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "pools" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "exported_as" varchar(255), "quota_id" integer, "pool_family_id" integer NOT NULL, "lock_version" integer DEFAULT 0, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "privileges" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "lock_version" integer DEFAULT 0, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "privileges_roles" ("privilege_id" integer NOT NULL, "role_id" integer NOT NULL);
+CREATE TABLE "property_enum_entries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "hardware_profile_property_id" integer NOT NULL, "value" varchar(255) NOT NULL, "lock_version" integer DEFAULT 0, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "providers" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "cloud_type" varchar(255) NOT NULL, "url" varchar(255) NOT NULL, "lock_version" integer DEFAULT 0, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "quotas" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "running_instances" integer DEFAULT 0, "total_instances" integer DEFAULT 0, "maximum_running_instances" integer, "maximum_total_instances" integer, "lock_version" integer DEFAULT 0, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "realm_map" ("frontend_realm_id" integer, "backend_realm_id" integer);
+CREATE TABLE "realms" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "external_key" varchar(255) NOT NULL, "name" varchar(1024) NOT NULL, "provider_id" integer, "lock_version" integer DEFAULT 0, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "replicated_images" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "image_id" integer NOT NULL, "provider_id" integer NOT NULL, "provider_image_key" varchar(255), "uploaded" boolean DEFAULT 'f', "registered" boolean DEFAULT 'f');
+CREATE TABLE "roles" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL, "scope" varchar(255) NOT NULL, "lock_version" integer DEFAULT 0, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
+CREATE TABLE "sessions" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "session_id" varchar(255) NOT NULL, "data" text, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "tasks" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user" varchar(255), "type" varchar(255), "action" varchar(255), "state" varchar(255), "task_target_id" integer, "task_target_type" varchar(255), "args" varchar(255), "created_at" datetime, "time_submitted" datetime, "time_started" datetime, "time_ended" datetime, "message" text, "failure_code" varchar(255), "lock_version" integer DEFAULT 0);
+CREATE TABLE "templates" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "uuid" varchar(255) NOT NULL, "xml" blob NOT NULL, "uri" varchar(255), "name" varchar(255), "platform" varchar(255), "platform_version" varchar(255), "architecture" varchar(255), "summary" text, "complete" boolean DEFAULT 'f', "uploaded" boolean DEFAULT 'f', "imported" boolean DEFAULT 'f', "images_count" integer, "created_at" datetime, "updated_at" datetime);
+CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "login" varchar(255) NOT NULL, "email" varchar(255) NOT NULL, "crypted_password" varchar(255) NOT NULL, "password_salt" varchar(255) NOT NULL, "persistence_token" varchar(255) NOT NULL, "single_access_token" varchar(255) NOT NULL, "perishable_token" varchar(255) NOT NULL, "first_name" varchar(255), "last_name" varchar(255), "quota_id" integer, "login_count" integer DEFAULT 0 NOT NULL, "failed_login_count" integer DEFAULT 0 NOT NULL, "last_request_at" datetime, "current_login_at" datetime, "last_login_at" datetime, "current_login_ip" varchar(255), "last_login_ip" varchar(255), "created_at" datetime, "updated_at" datetime);
+CREATE INDEX "index_sessions_on_session_id" ON "sessions" ("session_id");
+CREATE INDEX "index_sessions_on_updated_at" ON "sessions" ("updated_at");
+CREATE INDEX "index_users_on_last_request_at" ON "users" ("last_request_at");
+CREATE INDEX "index_users_on_login" ON "users" ("login");
+CREATE INDEX "index_users_on_persistence_token" ON "users" ("persistence_token");
+CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
+INSERT INTO schema_migrations (version) VALUES ('200909011700');
+
+INSERT INTO schema_migrations (version) VALUES ('20090731200741');
+
+INSERT INTO schema_migrations (version) VALUES ('20090801045212');
+
+INSERT INTO schema_migrations (version) VALUES ('20090802000000');
+
+INSERT INTO schema_migrations (version) VALUES ('20090803000000');
+
+INSERT INTO schema_migrations (version) VALUES ('20090803141507');
+
+INSERT INTO schema_migrations (version) VALUES ('20090804135630');
+
+INSERT INTO schema_migrations (version) VALUES ('20090804140143');
+
+INSERT INTO schema_migrations (version) VALUES ('20090804141600');
+
+INSERT INTO schema_migrations (version) VALUES ('20090804142049');
+
+INSERT INTO schema_migrations (version) VALUES ('20090831140000');
+
+INSERT INTO schema_migrations (version) VALUES ('20090917192602');
+
+INSERT INTO schema_migrations (version) VALUES ('20091008153046');
+
+INSERT INTO schema_migrations (version) VALUES ('20091008153058');
+
+INSERT INTO schema_migrations (version) VALUES ('20091008153106');
+
+INSERT INTO schema_migrations (version) VALUES ('20091019215838');
+
+INSERT INTO schema_migrations (version) VALUES ('20100707000000');
+
+INSERT INTO schema_migrations (version) VALUES ('20100810221250');
+
+INSERT INTO schema_migrations (version) VALUES ('20100830150014');
+
+INSERT INTO schema_migrations (version) VALUES ('20100902081651');
+
+INSERT INTO schema_migrations (version) VALUES ('20101018174458');
+
+INSERT INTO schema_migrations (version) VALUES ('20101021172441');
+
+INSERT INTO schema_migrations (version) VALUES ('20110103160939');
+
+INSERT INTO schema_migrations (version) VALUES ('20110112094108');
\ No newline at end of file
diff --git a/src/db/migrate/20110112094108_create_deployables.rb b/src/db/migrate/20110112094108_create_deployables.rb
new file mode 100644
index 0000000..5ec0982
--- /dev/null
+++ b/src/db/migrate/20110112094108_create_deployables.rb
@@ -0,0 +1,13 @@
+class CreateDeployables < ActiveRecord::Migration
+ def self.up
+ create_table :deployables do |t|
+ t.string :name
+
+ t.timestamps
+ end
+ end
+
+ def self.down
+ drop_table :deployables
+ end
+end
diff --git a/src/features/deployable.feature b/src/features/deployable.feature
new file mode 100644
index 0000000..17c5764
--- /dev/null
+++ b/src/features/deployable.feature
@@ -0,0 +1,50 @@
+Feature: Manage Deployables
+ In order to manage my cloud infrastructure
+ As a user
+ I want to manage deployables
+
+ Background:
+ Given I am an authorised user
+ And I am logged in
+ And I am using new UI
+
+ Scenario: List deployables
+ Given I am on the homepage
+ And there is a deployable named "MySQL cluster"
+ When I go to the image factory deployables page
+ Then I should see "MySQL cluster"
+
+ Scenario: Create a new Deployable
+ Given there is a deployable named "MySQL cluster"
+ And I am on the image factory deployables page
+ When I follow "Create"
+ Then I should be on the new image factory deployable page
+ And I should see "New Deployable"
+ When I fill in "deployable[name]" with "App"
+ And I press "Save"
+ Then I should be on App's image factory deployable page
+ And I should see "Deployable added"
+ And I should have a deployable named "App"
+ And I should see "App"
+
+ Scenario: Edit a deployable
+ Given there is a deployable named "MySQL cluster"
+ And I am on the image factory deployables page
+ When I follow "MySQL cluster"
+ And I follow "Edit"
+ Then I should be on the edit image factory deployable page
+ And I should see "Editing Deployable"
+ When I fill in "deployable[name]" with "AppModified"
+ And I press "Save"
+ Then I should be on AppModified's image factory deployable page
+ And I should see "Deployable updated"
+ And I should have a deployable named "AppModified"
+ And I should see "AppModified"
+
+ Scenario: Delete a deployable
+ Given there is a deployable named "App"
+ And I am on the image factory deployables page
+ When I check the "App" deployable
+ And I press "Delete"
+ Then I should be on the image factory deployables page
+ And there should be no deployables
diff --git a/src/features/step_definitions/deployable_steps.rb b/src/features/step_definitions/deployable_steps.rb
new file mode 100644
index 0000000..d4b6af6
--- /dev/null
+++ b/src/features/step_definitions/deployable_steps.rb
@@ -0,0 +1,20 @@
+Then /^there should be no deployables$/ do
+ Deployable.count.should == 0
+end
+
+Given /^there are no deployables$/ do
+ Deployable.count.should == 0
+end
+
+Then /^I should have a deployable named "([^"]*)"$/ do |name|
+ Deployable.find_by_name(name).should_not be_nil
+end
+
+Given /^there is a deployable named "([^"]*)"$/ do |name|
+ Deployable.create!(:name => name)
+end
+
+When /^I check the "([^"]*)" deployable$/ do |name|
+ deployable = Deployable.find_by_name(name)
+ check("deployable_checkbox_#{deployable.id}")
+end
diff --git a/src/features/support/paths.rb b/src/features/support/paths.rb
index 66de0d2..c0c77dc 100644
--- a/src/features/support/paths.rb
+++ b/src/features/support/paths.rb
@@ -101,6 +101,9 @@ module NavigationHelpers
when /^(.*)'s provider account page$/
admin_provider_account_path(CloudAccount.find_by_label($1))
+ when /^(.*)'s image factory deployable page$/
+ image_factory_deployable_path(Deployable.find_by_name($1))
+
# Add more mappings here.
# Here is an example that pulls values out of the Regexp:
#
--
1.7.3.5
13 years, 4 months
[PATCH aggregator] Fixed flash message when creating instance
by Jan Provazník
From: Jan Provaznik <jprovazn(a)redhat.com>
Should be used flash.now because render is used.
---
.../controllers/resources/instances_controller.rb | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/app/controllers/resources/instances_controller.rb b/src/app/controllers/resources/instances_controller.rb
index 3bd0c45..f14c838 100644
--- a/src/app/controllers/resources/instances_controller.rb
+++ b/src/app/controllers/resources/instances_controller.rb
@@ -48,7 +48,7 @@ class Resources::InstancesController < ApplicationController
end
rescue
init_new_instance_attrs
- flash[:warning] = "Failed to launch instance: #{$!}"
+ flash.now[:warning] = "Failed to launch instance: #{$!}"
render :new
else
if free_quota
--
1.7.3.4
13 years, 4 months
[PATCH aggregator] Updated InstanceKey model
by Jan Provazník
From: Jan Provaznik <jprovazn(a)redhat.com>
Key per instance setup should work this way:
- create instance key for each provider account
- when creating an instance we use this cloud account key (it's passed to condor)
- when instance is started, we generate unique instance key and update it in instance (from instance observer)
---
src/app/models/cloud_account.rb | 13 +++--------
src/app/models/cloud_account_observer.rb | 9 ++++++++
src/app/models/instance.rb | 2 +
src/app/models/instance_key.rb | 3 +-
src/app/models/instance_observer.rb | 9 ++++++++
src/config/environment.rb | 2 +-
.../20090801045212_create_cloud_accounts.rb | 1 +
.../migrate/20100902081651_create_instance_keys.rb | 3 +-
src/spec/models/cloud_account_observer_spec.rb | 22 ++++++++++++++++++++
src/spec/models/instance_observer_spec.rb | 13 +++++++++++
10 files changed, 64 insertions(+), 13 deletions(-)
create mode 100644 src/app/models/cloud_account_observer.rb
create mode 100644 src/spec/models/cloud_account_observer_spec.rb
diff --git a/src/app/models/cloud_account.rb b/src/app/models/cloud_account.rb
index e4fe6c6..4371a1a 100644
--- a/src/app/models/cloud_account.rb
+++ b/src/app/models/cloud_account.rb
@@ -33,7 +33,7 @@ class CloudAccount < ActiveRecord::Base
:include => [:role],
:order => "permissions.id ASC"
- has_one :instance_key, :dependent => :destroy
+ has_one :instance_key, :as => :instance_key_owner, :dependent => :destroy
# Helpers
attr_accessor :x509_cert_priv_file, :x509_cert_pub_file
@@ -62,7 +62,6 @@ class CloudAccount < ActiveRecord::Base
end
# Hooks
- after_create :generate_cloud_account_key
before_destroy :destroyable?
before_validation :read_x509_files
@@ -170,13 +169,9 @@ EOT
return xml.to_s
end
- private
- def generate_cloud_account_key
+ def generate_auth_key
client = connect
- if client && client.feature?(:instances, :authentication_key)
- key = client.create_key(:name => "#{self.name}_#{Time.now.to_i}_key")
- InstanceKey.create(:cloud_account => self, :pem => key.pem, :name => key.id) if key
- end
+ return nil unless client && client.feature?(:instances, :authentication_key)
+ client.create_key(:name => "#{self.name}_#{Time.now.to_i}_key_#{self.object_id}")
end
-
end
diff --git a/src/app/models/cloud_account_observer.rb b/src/app/models/cloud_account_observer.rb
new file mode 100644
index 0000000..a0826ea
--- /dev/null
+++ b/src/app/models/cloud_account_observer.rb
@@ -0,0 +1,9 @@
+class CloudAccountObserver < ActiveRecord::Observer
+ def after_create(account)
+ if key = account.generate_auth_key
+ account.update_attribute(:instance_key, InstanceKey.create!(:pem => key.pem, :name => key.id, :instance_key_owner => account))
+ end
+ end
+end
+
+CloudAccountObserver.instance
diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb
index 8573c5a..b22ce63 100644
--- a/src/app/models/instance.rb
+++ b/src/app/models/instance.rb
@@ -36,6 +36,8 @@ class Instance < ActiveRecord::Base
belongs_to :instance_key
belongs_to :instance_hwp
+ has_one :instance_key, :as => :instance_key_owner, :dependent => :destroy
+
validates_presence_of :pool_id
validates_presence_of :hardware_profile_id
validates_presence_of :template_id
diff --git a/src/app/models/instance_key.rb b/src/app/models/instance_key.rb
index b3b7513..9c941fe 100644
--- a/src/app/models/instance_key.rb
+++ b/src/app/models/instance_key.rb
@@ -21,7 +21,6 @@
#
class InstanceKey < ActiveRecord::Base
- belongs_to :cloud_account
- has_many :instances
+ belongs_to :instance_key_owner, :polymorphic => true
end
diff --git a/src/app/models/instance_observer.rb b/src/app/models/instance_observer.rb
index 3b9af13..80b39c5 100644
--- a/src/app/models/instance_observer.rb
+++ b/src/app/models/instance_observer.rb
@@ -61,6 +61,15 @@ class InstanceObserver < ActiveRecord::Observer
end
end
+ def before_update(instance)
+ # we try to generate key only when instance is running
+ # and instance_key is not generated yet
+ return if instance.state != Instance::STATE_RUNNING or instance.instance_key
+ if key = instance.cloud_account.generate_auth_key
+ instance.instance_key = InstanceKey.create!(:pem => key.pem, :name => key.id, :instance_key_owner => instance)
+ end
+ end
+
end
InstanceObserver.instance
diff --git a/src/config/environment.rb b/src/config/environment.rb
index 09ec85b..d00ae2f 100644
--- a/src/config/environment.rb
+++ b/src/config/environment.rb
@@ -56,7 +56,7 @@ Rails::Initializer.run do |config|
config.middleware.swap Rack::MethodOverride, 'Rack::RestfulSubmit'
- config.active_record.observers = :instance_observer, :task_observer
+ config.active_record.observers = :instance_observer, :task_observer, :cloud_account_observer
# Only load the plugins named here, in the order given. By default, all plugins
# in vendor/plugins are loaded in alphabetical order.
# :all can be used as a placeholder for all plugins not explicitly named
diff --git a/src/db/migrate/20090801045212_create_cloud_accounts.rb b/src/db/migrate/20090801045212_create_cloud_accounts.rb
index 042c406..991734e 100644
--- a/src/db/migrate/20090801045212_create_cloud_accounts.rb
+++ b/src/db/migrate/20090801045212_create_cloud_accounts.rb
@@ -27,6 +27,7 @@ class CreateCloudAccounts < ActiveRecord::Migration
t.string :password, :null => false
t.integer :provider_id, :null => false
t.integer :quota_id
+ t.integer :instance_key_id
t.integer :lock_version, :default => 0
t.string :account_number, :null => false
t.text :x509_cert_priv, :null => false
diff --git a/src/db/migrate/20100902081651_create_instance_keys.rb b/src/db/migrate/20100902081651_create_instance_keys.rb
index 841d7ff..8ee23fb 100644
--- a/src/db/migrate/20100902081651_create_instance_keys.rb
+++ b/src/db/migrate/20100902081651_create_instance_keys.rb
@@ -1,7 +1,8 @@
class CreateInstanceKeys < ActiveRecord::Migration
def self.up
create_table :instance_keys do |t|
- t.integer :cloud_account_id, :null => false
+ t.integer :instance_key_owner_id, :null => false
+ t.string :instance_key_owner_type, :null => false
t.string :name, :null => false
t.text :pem
t.timestamps
diff --git a/src/spec/models/cloud_account_observer_spec.rb b/src/spec/models/cloud_account_observer_spec.rb
new file mode 100644
index 0000000..48491c0
--- /dev/null
+++ b/src/spec/models/cloud_account_observer_spec.rb
@@ -0,0 +1,22 @@
+require 'spec_helper'
+
+describe CloudAccountObserver do
+ fixtures :all
+
+ it "should create an instance_key if provider is EC2" do
+ @client = mock('DeltaCloud', :null_object => true)
+ @provider = Factory.build :ec2_provider
+ @key = mock('Key', :null_object => true)
+ @key.stub!(:pem).and_return("PEM")
+ @key.stub!(:id).and_return("1_user")
+ @client.stub!(:"feature?").and_return(true)
+ @client.stub!(:"create_key").and_return(@key)
+
+ cloud_account = Factory.build :ec2_cloud_account
+ cloud_account.stub!(:connect).and_return(@client)
+ cloud_account.save
+ cloud_account.instance_key.should_not == nil
+ cloud_account.instance_key.pem == "PEM"
+ cloud_account.instance_key.id == "1_user"
+ end
+end
diff --git a/src/spec/models/instance_observer_spec.rb b/src/spec/models/instance_observer_spec.rb
index a696319..96eac6d 100644
--- a/src/spec/models/instance_observer_spec.rb
+++ b/src/spec/models/instance_observer_spec.rb
@@ -154,4 +154,17 @@ describe InstanceObserver do
end
end
+ it "should generate instance key when instance is running" do
+ client = mock('DeltaCloud', :null_object => true)
+ key = mock('Key', :null_object => true)
+ key.stub!(:pem).and_return("PEM")
+ key.stub!(:id).and_return("1_user")
+ client.stub!(:"feature?").and_return(true)
+ client.stub!(:"create_key").and_return(key)
+ @cloud_account.stub!(:connect).and_return(client)
+
+ @instance.state = Instance::STATE_RUNNING
+ @instance.save!
+ @instance.instance_key.should_not == nil
+ end
end
--
1.7.3.4
13 years, 4 months
[PATCH configure 1/1] Make puppet config a drop in replacement for deltacloud-configure.rpm
by Mike Orazi
- Change bin/* to match the deltacloud-configure equivalents
- Update bin/* to reference new pathes
- Update spec file to reflect new package name
---
Rakefile | 4 +-
bin/dc-install | 4 --
bin/dc-services | 4 --
bin/dc-uninstall | 4 --
bin/deltacloud-cleanup | 4 ++
bin/deltacloud-configure | 4 ++
bin/deltacloud-services | 4 ++
contrib/deltacloud-configure.spec | 76 +++++++++++++++++++++++++++++++++++++
contrib/deltacloud_recipe.spec | 73 -----------------------------------
9 files changed, 90 insertions(+), 87 deletions(-)
delete mode 100755 bin/dc-install
delete mode 100755 bin/dc-services
delete mode 100755 bin/dc-uninstall
create mode 100755 bin/deltacloud-cleanup
create mode 100755 bin/deltacloud-configure
create mode 100755 bin/deltacloud-services
create mode 100644 contrib/deltacloud-configure.spec
delete mode 100644 contrib/deltacloud_recipe.spec
diff --git a/Rakefile b/Rakefile
index 18ba513..f203717 100644
--- a/Rakefile
+++ b/Rakefile
@@ -10,8 +10,8 @@ YUM_REPO = "#{CURRENT_DIR}/repo"
CLEAN.include('pkg', 'build', 'repo')
CLOBBER.include('deltacloud')
-PKG_NAME = "deltacloud_recipe"
-RPM_SPEC = "contrib/deltacloud_recipe.spec"
+PKG_NAME = "deltacloud-configure"
+RPM_SPEC = "contrib/deltacloud-configure.spec"
# Build the rpm
rpm_task =
diff --git a/bin/dc-install b/bin/dc-install
deleted file mode 100755
index 8583232..0000000
--- a/bin/dc-install
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-puppet /usr/share/deltacloud-recipe/deltacloud_recipe.pp \
- --modulepath=/usr/share/deltacloud-recipe/modules/
diff --git a/bin/dc-services b/bin/dc-services
deleted file mode 100755
index 0612c33..0000000
--- a/bin/dc-services
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-puppet /usr/share/deltacloud-recipe/deltacloud_stop_services.pp \
- --modulepath=/usr/share/deltacloud-recipe/modules/
diff --git a/bin/dc-uninstall b/bin/dc-uninstall
deleted file mode 100755
index 02a99de..0000000
--- a/bin/dc-uninstall
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-puppet /usr/share/deltacloud-recipe/deltacloud_uninstall.pp \
- --modulepath=/usr/share/deltacloud-recipe/modules/
diff --git a/bin/deltacloud-cleanup b/bin/deltacloud-cleanup
new file mode 100755
index 0000000..a359fce
--- /dev/null
+++ b/bin/deltacloud-cleanup
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+puppet /usr/share/deltacloud-configure/deltacloud_uninstall.pp \
+ --modulepath=/usr/share/deltacloud-configure/modules/
diff --git a/bin/deltacloud-configure b/bin/deltacloud-configure
new file mode 100755
index 0000000..c034d4c
--- /dev/null
+++ b/bin/deltacloud-configure
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+puppet /usr/share/deltacloud-configure/deltacloud_recipe.pp \
+ --modulepath=/usr/share/deltacloud-configure/modules/
diff --git a/bin/deltacloud-services b/bin/deltacloud-services
new file mode 100755
index 0000000..0612c33
--- /dev/null
+++ b/bin/deltacloud-services
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+puppet /usr/share/deltacloud-recipe/deltacloud_stop_services.pp \
+ --modulepath=/usr/share/deltacloud-recipe/modules/
diff --git a/contrib/deltacloud-configure.spec b/contrib/deltacloud-configure.spec
new file mode 100644
index 0000000..04ff82d
--- /dev/null
+++ b/contrib/deltacloud-configure.spec
@@ -0,0 +1,76 @@
+%define dchome /usr/share/deltacloud-configure
+%define pbuild %{_builddir}/%{name}-%{version}
+
+Summary: DeltaCloud Configure Puppet Recipe
+Name: deltacloud-configure
+Version: 2.0.0
+Release: 1%{?dist}
+
+Group: Applications/Internet
+License: GPLv2+
+URL: http://deltacloud.org
+Source0: %{name}-%{version}.tgz
+BuildRoot: %{_tmppath}/%{name}-%{version}
+BuildArch: noarch
+Requires: puppet
+
+# To send a request to iwhd rest interface to
+# create buckets, eventually replace w/ an
+# iwhd client
+Requires: curl
+
+%description
+Deltacloud Configure Puppet Recipe
+
+%prep
+%setup -q
+
+%build
+
+%install
+rm -rf %{buildroot}
+%{__mkdir} -p %{buildroot}/%{dchome}/modules/deltacloud_recipe %{buildroot}/%{_sbindir}
+%{__cp} -R %{pbuild}/recipes/deltacloud_recipe/deltacloud_recipe.pp %{buildroot}/%{dchome}
+%{__cp} -R %{pbuild}/recipes/deltacloud_recipe/deltacloud_uninstall.pp %{buildroot}/%{dchome}
+%{__cp} -R %{pbuild}/recipes/deltacloud_recipe/*/ %{buildroot}/%{dchome}/modules/deltacloud_recipe
+%{__cp} -R %{pbuild}/recipes/firewall/ %{buildroot}/%{dchome}/modules/firewall
+%{__cp} -R %{pbuild}/recipes/ntp/ %{buildroot}/%{dchome}/modules/ntp
+%{__cp} -R %{pbuild}/recipes/postgres/ %{buildroot}/%{dchome}/modules/postgres
+%{__cp} -R %{pbuild}/bin/deltacloud-configure %{buildroot}/%{_sbindir}/
+%{__cp} -R %{pbuild}/bin/deltacloud-cleanup %{buildroot}/%{_sbindir}/
+
+%clean
+rm -rf %{buildroot}
+
+%files
+%defattr(-,root,root,-)
+%attr(0755, root, root) %{_sbindir}/deltacloud-configure
+%attr(0755, root, root) %{_sbindir}/deltacloud-cleanup
+%{dchome}
+
+%changelog
+* Mon Jan 10 2011 Mike Orazi <morazi(a)redhat.com> 2.0.0-1
+- Make this a drop in replacement for the old deltacloud-configure scripts
+
+* Wed Dec 22 2010 Mohammed Morsi <mmorsi(a)redhat.com> 0.0.4-1
+- Revamp deltacloud recipe to make it more puppetized,
+ use general purpose firewall, postgres, ntp modules,
+ and to fix many various things
+
+* Wed Sep 29 2010 Mohammed Morsi <mmorsi(a)redhat.com> 0.0.3-1
+- Renamed package from deltacloud appliance
+- to deltacloud recipe
+
+* Wed Sep 29 2010 Mohammed Morsi <mmorsi(a)redhat.com> 0.0.2-3
+- Include curl-devel for typhoeus gem
+
+* Wed Sep 29 2010 Mohammed Morsi <mmorsi(a)redhat.com> 0.0.2-2
+- Updated to pull in latest git changes
+
+* Fri Sep 17 2010 Mohammed Morsi <mmorsi(a)redhat.com> 0.0.2-1
+- Updated packages pulled in to latest versions
+- Various fixes
+- Added initial image warehouse bits
+
+* Thu Sep 02 2010 Mohammed Morsi <mmorsi(a)redhat.com> 0.0.1-1
+- Initial package
diff --git a/contrib/deltacloud_recipe.spec b/contrib/deltacloud_recipe.spec
deleted file mode 100644
index 9ad3a62..0000000
--- a/contrib/deltacloud_recipe.spec
+++ /dev/null
@@ -1,73 +0,0 @@
-%define dchome /usr/share/deltacloud-recipe
-%define pbuild %{_builddir}/%{name}-%{version}
-
-Summary: DeltaCloud Puppet Recipe
-Name: deltacloud_recipe
-Version: 0.0.4
-Release: 1%{?dist}
-
-Group: Applications/Internet
-License: GPLv2+
-URL: http://deltacloud.org
-Source0: %{name}-%{version}.tgz
-BuildRoot: %{_tmppath}/%{name}-%{version}
-BuildArch: noarch
-Requires: puppet
-
-# To send a request to iwhd rest interface to
-# create buckets, eventually replace w/ an
-# iwhd client
-Requires: curl
-
-%description
-Deltacloud Puppet Recipe
-
-%prep
-%setup -q
-
-%build
-
-%install
-rm -rf %{buildroot}
-%{__mkdir} -p %{buildroot}/%{dchome}/modules/%{name} %{buildroot}/%{_sbindir}
-%{__cp} -R %{pbuild}/recipes/%{name}/deltacloud_recipe.pp %{buildroot}/%{dchome}
-%{__cp} -R %{pbuild}/recipes/%{name}/deltacloud_uninstall.pp %{buildroot}/%{dchome}
-%{__cp} -R %{pbuild}/recipes/%{name}/*/ %{buildroot}/%{dchome}/modules/%{name}
-%{__cp} -R %{pbuild}/recipes/firewall/ %{buildroot}/%{dchome}/modules/firewall
-%{__cp} -R %{pbuild}/recipes/ntp/ %{buildroot}/%{dchome}/modules/ntp
-%{__cp} -R %{pbuild}/recipes/postgres/ %{buildroot}/%{dchome}/modules/postgres
-%{__cp} -R %{pbuild}/bin/dc-install %{buildroot}/%{_sbindir}/
-%{__cp} -R %{pbuild}/bin/dc-uninstall %{buildroot}/%{_sbindir}/
-
-%clean
-rm -rf %{buildroot}
-
-%files
-%defattr(-,root,root,-)
-%attr(0755, root, root) %{_sbindir}/dc-install
-%attr(0755, root, root) %{_sbindir}/dc-uninstall
-%{dchome}
-
-%changelog
-* Wed Dec 22 2010 Mohammed Morsi <mmorsi(a)redhat.com> 0.0.4-1
-- Revamp deltacloud recipe to make it more puppetized,
- use general purpose firewall, postgres, ntp modules,
- and to fix many various things
-
-* Wed Sep 29 2010 Mohammed Morsi <mmorsi(a)redhat.com> 0.0.3-1
-- Renamed package from deltacloud appliance
-- to deltacloud recipe
-
-* Wed Sep 29 2010 Mohammed Morsi <mmorsi(a)redhat.com> 0.0.2-3
-- Include curl-devel for typhoeus gem
-
-* Wed Sep 29 2010 Mohammed Morsi <mmorsi(a)redhat.com> 0.0.2-2
-- Updated to pull in latest git changes
-
-* Fri Sep 17 2010 Mohammed Morsi <mmorsi(a)redhat.com> 0.0.2-1
-- Updated packages pulled in to latest versions
-- Various fixes
-- Added initial image warehouse bits
-
-* Thu Sep 02 2010 Mohammed Morsi <mmorsi(a)redhat.com> 0.0.1-1
-- Initial package
--
1.7.3.4
13 years, 4 months
Search
by Tomas Sedovic
These patches implement search for Hardware Profiles and Pools sites.
When you apply them, make sure you have the required gems installed
(rake gems:install), that the bundled Solr server is running
(rake sunspot:solr:start) and that the indexes for the models are generated
(rake sunspot:reindex).
13 years, 4 months
[PATCH configure 1/1] Add service wrapper + conf setup to iwhd recipe.
by Mike Orazi
---
recipes/deltacloud_recipe/files/iwhd.init | 13 +++++++++----
recipes/deltacloud_recipe/manifests/iwhd.pp | 13 ++++++++++++-
2 files changed, 21 insertions(+), 5 deletions(-)
mode change 100644 => 100755 recipes/deltacloud_recipe/files/iwhd.init
diff --git a/recipes/deltacloud_recipe/files/iwhd.init b/recipes/deltacloud_recipe/files/iwhd.init
old mode 100644
new mode 100755
index 4907b92..966304a
--- a/recipes/deltacloud_recipe/files/iwhd.init
+++ b/recipes/deltacloud_recipe/files/iwhd.init
@@ -3,14 +3,14 @@
#
# iwhd startup script for iwhd server
#
-# chkconfig: - 97 03
+# chkconfig: - 40 60
# description: iwhd is primary server process for the \
# IWHD component.
#
[ -r /etc/sysconfig/iwhd ] && . /etc/sysconfig/iwhd
-LOCKFILE="${LOCKFILE:-/var/lock/subsys/iwhd }"
+LOCKFILE="${LOCKFILE:-/var/lock/subsys/iwhd}"
PROG=/usr/bin/iwhd
CONF=/etc/iwhd/conf.js
@@ -20,7 +20,10 @@ CONF=/etc/iwhd/conf.js
start() {
echo -n "Starting iwhd: "
- $PROG -c $CONF&
+ # FIXME: we sleep 2 here to make sure that mongod has really come up.
+ # Yes, it's a hack
+ sleep 2
+ $PROG -c $CONF >& /var/log/iwhd.log &
RETVAL=$?
if [ $RETVAL -eq 0 ] && touch $LOCKFILE ; then
echo_success
@@ -34,7 +37,7 @@ start() {
stop() {
echo -n "Shutting down iwhd: "
RETVAL=$?
- killall iwhd
+ killall $PROG
if [ $RETVAL -eq 0 ] && rm -f $LOCKFILE ; then
echo_success
echo
@@ -69,3 +72,5 @@ case "$1" in
exit 1
;;
esac
+
+exit $RETVAL
diff --git a/recipes/deltacloud_recipe/manifests/iwhd.pp b/recipes/deltacloud_recipe/manifests/iwhd.pp
index b756735..9081f4a 100644
--- a/recipes/deltacloud_recipe/manifests/iwhd.pp
+++ b/recipes/deltacloud_recipe/manifests/iwhd.pp
@@ -8,6 +8,16 @@ class deltacloud::iwhd inherits deltacloud {
### Start the deltacloud services
file { "/data": ensure => 'directory' }
file { "/data/db": ensure => 'directory' }
+ file { "/etc/iwhd": ensure => 'directory'}
+ file { "/etc/iwhd/conf.js":
+ source => "puppet:///modules/deltacloud_recipe/iwhd-conf.js",
+ mode => 755, require => File['/etc/iwhd'] }
+
+ #TODO The service wrapper should probably be in the rpm itself
+ file { "/etc/rc.d/init.d/iwhd":
+ source => "puppet:///modules/deltacloud_recipe/iwhd.init",
+ mode => 755 }
+
service { 'mongod':
ensure => 'running',
enable => true,
@@ -16,7 +26,8 @@ class deltacloud::iwhd inherits deltacloud {
ensure => 'running',
enable => true,
hasstatus => true,
- require => [Package['iwhd'],
+ require => [File['/etc/rc.d/init.d/iwhd', '/etc/iwhd/conf.js'],
+ Package['iwhd'],
Service[mongod]]}
# XXX ugly hack but iwhd might take some time to come up
--
1.7.3.4
13 years, 4 months
[PATCH appliance] preliminary httpd/ssl configuration for the deltacloud aggregator
by Mo Morsi
---
bin/dc-install | 1 +
bin/dc-uninstall | 1 +
contrib/deltacloud_recipe.spec | 1 +
recipes/apache/manifests/init.pp | 34 +++++++++++++++++
.../files/aggregator-httpd-ssl.conf | 38 ++++++++++++++++++++
.../deltacloud_recipe/files/aggregator-httpd.conf | 23 ++++++++++++
recipes/deltacloud_recipe/manifests/aggregator.pp | 16 +++++++--
recipes/deltacloud_recipe/manifests/deltacloud.pp | 7 ++++
10 files changed, 120 insertions(+), 3 deletions(-)
create mode 100644 recipes/apache/manifests/init.pp
create mode 100644 recipes/deltacloud_recipe/files/aggregator-httpd-ssl.conf
create mode 100644 recipes/deltacloud_recipe/files/aggregator-httpd.conf
diff --git a/bin/dc-install b/bin/dc-install
index 8583232..058f14b 100755
--- a/bin/dc-install
+++ b/bin/dc-install
@@ -1,4 +1,5 @@
#!/bin/sh
+export FACTER_DELTACLOUD_ENABLE_SECURITY=true
puppet /usr/share/deltacloud-recipe/deltacloud_recipe.pp \
--modulepath=/usr/share/deltacloud-recipe/modules/
diff --git a/bin/dc-uninstall b/bin/dc-uninstall
index 02a99de..8d3c19e 100755
--- a/bin/dc-uninstall
+++ b/bin/dc-uninstall
@@ -1,4 +1,5 @@
#!/bin/sh
+export FACTER_DELTACLOUD_ENABLE_SECURITY=true
puppet /usr/share/deltacloud-recipe/deltacloud_uninstall.pp \
--modulepath=/usr/share/deltacloud-recipe/modules/
diff --git a/contrib/deltacloud_recipe.spec b/contrib/deltacloud_recipe.spec
index 02ed945..7badda8 100644
--- a/contrib/deltacloud_recipe.spec
+++ b/contrib/deltacloud_recipe.spec
@@ -33,6 +33,7 @@ rm -rf %{buildroot}
%{__cp} -R %{pbuild}/recipes/%{name}/deltacloud_recipe.pp %{buildroot}/%{dchome}
%{__cp} -R %{pbuild}/recipes/%{name}/deltacloud_uninstall.pp %{buildroot}/%{dchome}
%{__cp} -R %{pbuild}/recipes/%{name}/*/ %{buildroot}/%{dchome}/modules/%{name}
+%{__cp} -R %{pbuild}/recipes/apache/ %{buildroot}/%{dchome}/modules/apache
%{__cp} -R %{pbuild}/recipes/firewall/ %{buildroot}/%{dchome}/modules/firewall
%{__cp} -R %{pbuild}/recipes/ntp/ %{buildroot}/%{dchome}/modules/ntp
%{__cp} -R %{pbuild}/recipes/postgres/ %{buildroot}/%{dchome}/modules/postgres
diff --git a/recipes/apache/manifests/init.pp b/recipes/apache/manifests/init.pp
new file mode 100644
index 0000000..fa8fe53
--- /dev/null
+++ b/recipes/apache/manifests/init.pp
@@ -0,0 +1,34 @@
+$apache_dir = "/etc/httpd"
+$apache_conf_dir = "${apache_dir}/conf.d"
+
+class apache {
+ # require apache and mod_ssl
+ package { "httpd": ensure => installed }
+
+ if $enable_security {
+ package { "mod_ssl": ensure => installed }
+ }
+
+ service { "httpd":
+ ensure => running,
+ require => Package["httpd"],
+ hasrestart => true,
+ hasstatus => true
+ }
+
+ exec { "reload-apache":
+ command => "/sbin/service httpd reload",
+ refreshonly => true
+ }
+}
+
+define apache::site ( $ensure = 'present', $source = '') {
+ $site_file = "${apache_conf_dir}/${name}.conf"
+ file {
+ $site_file:
+ ensure => $ensure,
+ source => $source,
+ notify => Exec["reload-apache"],
+ require => Service['httpd']
+ }
+}
diff --git a/recipes/deltacloud_recipe/files/aggregator-httpd-ssl.conf b/recipes/deltacloud_recipe/files/aggregator-httpd-ssl.conf
new file mode 100644
index 0000000..4d10fdb
--- /dev/null
+++ b/recipes/deltacloud_recipe/files/aggregator-httpd-ssl.conf
@@ -0,0 +1,38 @@
+NameVirtualHost *:443
+<VirtualHost *:443>
+
+ ErrorLog /etc/httpd/logs/error_log
+ TransferLog /etc/httpd/logs/access_log
+ LogLevel debug
+
+ ProxyRequests Off
+ SSLEngine On
+ SSLCertificateFile /etc/pki/tls/certs/localhost.crt
+ SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
+ ProxyPreserveHost Off
+
+Alias /deltacloud/stylesheets "/usr/share/deltacloud-aggregator/public/"
+Alias /deltacloud/images "/usr/share/deltacloud-aggregator/public/"
+Alias /deltacloud/errors "/usr/share/deltacloud-aggregator/public/"
+
+# TODO Apache will set HTTP_X_FORWARDED_HOST here to the hostname minus the port.
+# Rails (actioncontroller) will take this and use it for the hostname for redirects.
+# Since we define the http->https rewrite below this isn't an issue but
+# should probably be resolved at some point
+ProxyPass /deltacloud/images !
+ProxyPass /deltacloud/stylesheets !
+ProxyPass /deltacloud/errors !
+ProxyPass /deltacloud http://localhost:3000/deltacloud
+ProxyPassReverse /deltacloud http://localhost:3000/deltacloud
+ProxyPassReverse /deltacloud/images !
+ProxyPassReverse /deltacloud/stylesheets !
+ProxyPassReverse /deltacloud/errors !
+
+</VirtualHost>
+
+NameVirtualHost *:80
+<VirtualHost *:80>
+ RewriteEngine On
+ RewriteCond %{HTTPS} off
+ RewriteRule /deltacloud(.*) https://%{HTTP_HOST}%{REQUEST_URI}
+</VirtualHost>
diff --git a/recipes/deltacloud_recipe/files/aggregator-httpd.conf b/recipes/deltacloud_recipe/files/aggregator-httpd.conf
new file mode 100644
index 0000000..9e4bcf5
--- /dev/null
+++ b/recipes/deltacloud_recipe/files/aggregator-httpd.conf
@@ -0,0 +1,23 @@
+NameVirtualHost *:80
+<VirtualHost *:80>
+
+ ErrorLog /etc/httpd/logs/error_log
+ TransferLog /etc/httpd/logs/access_log
+ LogLevel warn
+
+ ProxyRequests Off
+
+Alias /deltacloud/stylesheets "/usr/share/deltacloud-aggregator/public/stylesheets"
+Alias /deltacloud/images "/usr/share/deltacloud-aggregator/public/images"
+Alias /deltacloud/errors "/usr/share/deltacloud-aggregator/public/"
+
+ProxyPass /deltacloud/images !
+ProxyPass /deltacloud/stylesheets !
+ProxyPass /deltacloud/errors !
+ProxyPass /deltacloud http://localhost:3000/deltacloud
+ProxyPassReverse /deltacloud http://localhost:3000/deltacloud
+ProxyPassReverse /deltacloud/images !
+ProxyPassReverse /deltacloud/stylesheets !
+ProxyPassReverse /deltacloud/errors !
+
+</VirtualHost>
diff --git a/recipes/deltacloud_recipe/manifests/aggregator.pp b/recipes/deltacloud_recipe/manifests/aggregator.pp
index 42e5240..0c0c2e2 100644
--- a/recipes/deltacloud_recipe/manifests/aggregator.pp
+++ b/recipes/deltacloud_recipe/manifests/aggregator.pp
@@ -18,13 +18,14 @@ class deltacloud::aggregator inherits deltacloud {
selinux::mode{"permissive":}
### Setup firewall for deltacloud
- firewall::rule{"http": destination_port => '80'}
+ firewall::rule{"http": destination_port => '80' }
+ firewall::rule{"https": destination_port => '443'}
### Start the deltacloud services
file {"/var/lib/condor/condor_config.local":
source => "puppet:///modules/deltacloud_recipe/condor_config.local",
require => Package['deltacloud-aggregator-daemons'] }
- service { ['condor', 'httpd']:
+ service { 'condor':
ensure => 'running',
enable => true,
require => File['/var/lib/condor/condor_config.local'] }
@@ -60,6 +61,14 @@ class deltacloud::aggregator inherits deltacloud {
cwd => "/usr/share/deltacloud-aggregator",
rails_env => "production",
require => Rails::Create::Db[create_deltacloud_database]}
+
+ ### Setup apache for deltacloud
+ include apache
+ if $enable_security {
+ apache::site{"aggregator": source => 'puppet:///modules/deltacloud_recipe/aggregator-httpd-ssl.conf'}
+ } else{
+ apache::site{"aggregator": source => 'puppet:///modules/deltacloud_recipe/aggregator-httpd.conf'}
+ }
}
class deltacloud::aggregator::disabled {
@@ -84,7 +93,7 @@ class deltacloud::aggregator::disabled {
require => Package['deltacloud-aggregator']}
### Stop the deltacloud services
- service { ['condor', 'httpd']:
+ service { 'condor':
ensure => 'stopped',
enable => false,
require => Service['deltacloud-aggregator',
diff --git a/recipes/deltacloud_recipe/manifests/deltacloud.pp b/recipes/deltacloud_recipe/manifests/deltacloud.pp
index e892df5..63a71fa 100644
--- a/recipes/deltacloud_recipe/manifests/deltacloud.pp
+++ b/recipes/deltacloud_recipe/manifests/deltacloud.pp
@@ -3,6 +3,7 @@
import "firewall"
import "postgres"
+import "apache"
import "rails"
import "selinux"
import "ntp"
@@ -12,6 +13,12 @@ import "core"
import "iwhd"
import "image-factory"
+if $deltacloud_enable_security == "true" or $deltacloud_enable_security == "1" {
+ $enable_security = true
+} else {
+ $enable_security = false
+}
+
# Base deltacloud class
class deltacloud {
# Setup repos which to pull deltacloud components
--
1.7.2.3
13 years, 4 months
[PATCH configure 1/1] The puppet requirement got lost when ace was removed. Adding it back explictly.
by Mike Orazi
---
contrib/deltacloud_recipe.spec | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/contrib/deltacloud_recipe.spec b/contrib/deltacloud_recipe.spec
index 02ed945..9ad3a62 100644
--- a/contrib/deltacloud_recipe.spec
+++ b/contrib/deltacloud_recipe.spec
@@ -12,7 +12,7 @@ URL: http://deltacloud.org
Source0: %{name}-%{version}.tgz
BuildRoot: %{_tmppath}/%{name}-%{version}
BuildArch: noarch
-Requires: ruby
+Requires: puppet
# To send a request to iwhd rest interface to
# create buckets, eventually replace w/ an
--
1.7.3.4
13 years, 5 months
deltacloud puppet recipe and installer revamp (rev 2)
by Mo Morsi
This patchset greatly revamps the deltacloud puppet recipe and installer/uninstaller
to clean up a plethora of things and to make it a more state based solution, bringing
it inline with the standard puppet methodology.
13 years, 5 months