[PATCH aeolus-image] Rename image_factory_console to imagefactory-console
by Mark McLoughlin
As discussed here:
https://fedorahosted.org/pipermail/aeolus-devel/2011-July/003247.html
An RPM called rubygem-image_factory_console is a bit ugly, its common
for gem names to use hyphen as a separator and imagefactory is the name
of Image Factory's RPM.
So, imagefactory-console makes the most sense as the gem name.
---
services/image_factory/aeolus-image/Rakefile | 2 +-
.../aeolus-image/lib/build_command.rb | 2 +-
.../aeolus-image/rubygem-aeolus-image.spec | 2 +-
services/image_factory/console/Rakefile | 4 ++--
.../image_factory/console/lib/image_factory.rb | 2 --
services/image_factory/console/lib/imagefactory.rb | 2 ++
.../base_handler.rb | 0
.../console.rb} | 0
...sole.spec => rubygem-imagefactory-console.spec} | 2 +-
services/image_factory/console/spec/spec_helper.rb | 2 +-
10 files changed, 9 insertions(+), 9 deletions(-)
delete mode 100644 services/image_factory/console/lib/image_factory.rb
create mode 100644 services/image_factory/console/lib/imagefactory.rb
rename services/image_factory/console/lib/{image_factory => imagefactory}/base_handler.rb (100%)
rename services/image_factory/console/lib/{image_factory/image_factory_console.rb => imagefactory/console.rb} (100%)
rename services/image_factory/console/{rubygem-image_factory_console.spec => rubygem-imagefactory-console.spec} (97%)
diff --git a/services/image_factory/aeolus-image/Rakefile b/services/image_factory/aeolus-image/Rakefile
index c9bfb7b..2bac2e0 100644
--- a/services/image_factory/aeolus-image/Rakefile
+++ b/services/image_factory/aeolus-image/Rakefile
@@ -26,7 +26,7 @@ spec = Gem::Specification.new do |s|
s.bindir = "bin"
s.add_dependency('nokogiri', '>=0.4.0')
s.add_dependency('rest-client')
- s.add_dependency('image_factory_console', '>=0.4.0')
+ s.add_dependency('imagefactory-console', '>=0.4.0')
s.add_development_dependency('rspec', '~>1.3.0')
end
diff --git a/services/image_factory/aeolus-image/lib/build_command.rb b/services/image_factory/aeolus-image/lib/build_command.rb
index ee8b89c..8712a55 100644
--- a/services/image_factory/aeolus-image/lib/build_command.rb
+++ b/services/image_factory/aeolus-image/lib/build_command.rb
@@ -1,4 +1,4 @@
-require 'image_factory'
+require 'imagefactory'
module Aeolus
module Image
diff --git a/services/image_factory/aeolus-image/rubygem-aeolus-image.spec b/services/image_factory/aeolus-image/rubygem-aeolus-image.spec
index aa55a2a..f7f5e06 100644
--- a/services/image_factory/aeolus-image/rubygem-aeolus-image.spec
+++ b/services/image_factory/aeolus-image/rubygem-aeolus-image.spec
@@ -17,7 +17,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Requires: rubygems
Requires: rubygem(nokogiri) >= 1.4.0
Requires: rubygem(rest-client)
-Requires: rubygem(image_factory_console) >= 0.4.0
+Requires: rubygem(imagefactory-console) >= 0.4.0
BuildRequires: rubygems
BuildArch: noarch
diff --git a/services/image_factory/console/Rakefile b/services/image_factory/console/Rakefile
index 7c9b95c..42e576a 100644
--- a/services/image_factory/console/Rakefile
+++ b/services/image_factory/console/Rakefile
@@ -28,10 +28,10 @@ require 'spec/rake/spectask'
require 'rake/rpmtask'
RPMBUILD_DIR = "#{File.expand_path('~')}/rpmbuild"
-RPM_SPEC = "rubygem-image_factory_console.spec"
+RPM_SPEC = "rubygem-imagefactory-console.spec"
spec = Gem::Specification.new do |s|
- s.name = 'image_factory_console'
+ s.name = 'imagefactory-console'
s.version = '0.4.0'
s.has_rdoc = true
#s.extra_rdoc_files = ['README', 'COPYING']
diff --git a/services/image_factory/console/lib/image_factory.rb b/services/image_factory/console/lib/image_factory.rb
deleted file mode 100644
index af8f3f9..0000000
--- a/services/image_factory/console/lib/image_factory.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-require 'image_factory/image_factory_console'
-require 'image_factory/base_handler'
\ No newline at end of file
diff --git a/services/image_factory/console/lib/imagefactory.rb b/services/image_factory/console/lib/imagefactory.rb
new file mode 100644
index 0000000..2a8bc29
--- /dev/null
+++ b/services/image_factory/console/lib/imagefactory.rb
@@ -0,0 +1,2 @@
+require 'imagefactory/console'
+require 'imagefactory/base_handler'
diff --git a/services/image_factory/console/lib/image_factory/base_handler.rb b/services/image_factory/console/lib/imagefactory/base_handler.rb
similarity index 100%
rename from services/image_factory/console/lib/image_factory/base_handler.rb
rename to services/image_factory/console/lib/imagefactory/base_handler.rb
diff --git a/services/image_factory/console/lib/image_factory/image_factory_console.rb b/services/image_factory/console/lib/imagefactory/console.rb
similarity index 100%
rename from services/image_factory/console/lib/image_factory/image_factory_console.rb
rename to services/image_factory/console/lib/imagefactory/console.rb
diff --git a/services/image_factory/console/rubygem-image_factory_console.spec b/services/image_factory/console/rubygem-imagefactory-console.spec
similarity index 97%
rename from services/image_factory/console/rubygem-image_factory_console.spec
rename to services/image_factory/console/rubygem-imagefactory-console.spec
index 57d93ab..59cfc8a 100644
--- a/services/image_factory/console/rubygem-image_factory_console.spec
+++ b/services/image_factory/console/rubygem-imagefactory-console.spec
@@ -1,7 +1,7 @@
# Generated from image_factory_console-0.2.0.gem by gem2rpm -*- rpm-spec -*-
%define ruby_sitelib %(ruby -rrbconfig -e "puts Config::CONFIG['sitelibdir']")
%define gemdir %(ruby -rubygems -e 'puts Gem::dir' 2>/dev/null)
-%define gemname image_factory_console
+%define gemname imagefactory-console
%define geminstdir %{gemdir}/gems/%{gemname}-%{version}
Summary: QMF Console for Aeolus Image Factory
diff --git a/services/image_factory/console/spec/spec_helper.rb b/services/image_factory/console/spec/spec_helper.rb
index 56baf4a..3772953 100644
--- a/services/image_factory/console/spec/spec_helper.rb
+++ b/services/image_factory/console/spec/spec_helper.rb
@@ -1,3 +1,3 @@
$: << File.expand_path(File.join(File.dirname(__FILE__), "../lib"))
require 'rubygems'
-require 'image_factory'
+require 'imagefactory'
--
1.7.4.4
12 years, 9 months
[PATCH aeolus-image] Fix template rng not found error
by Mark McLoughlin
https://bugzilla.redhat.com/723368
Use an absolute path for loading tdl.rng.
Fixes this error:
/usr/lib/ruby/gems/1.8/gems/aeolus-image-0.0.1/lib/base_command.rb:69:in `read': No such file or directory - examples/tdl.rng (Errno::ENOENT)
from /usr/lib/ruby/gems/1.8/gems/aeolus-image-0.0.1/lib/base_command.rb:69:in `validate_xml_document'
from /usr/lib/ruby/gems/1.8/gems/aeolus-image-0.0.1/lib/build_command.rb:30:in `run'
from /usr/lib/ruby/gems/1.8/gems/aeolus-image-0.0.1/lib/config_parser.rb:194:in `build'
from /usr/lib/ruby/gems/1.8/gems/aeolus-image-0.0.1/lib/config_parser.rb:30:in `send'
from /usr/lib/ruby/gems/1.8/gems/aeolus-image-0.0.1/lib/config_parser.rb:30:in `process'
from /usr/lib/ruby/gems/1.8/gems/aeolus-image-0.0.1/bin/aeolus-image:6
from /usr/bin/aeolus-image:19:in `load'
from /usr/bin/aeolus-image:19
---
.../aeolus-image/lib/build_command.rb | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/services/image_factory/aeolus-image/lib/build_command.rb b/services/image_factory/aeolus-image/lib/build_command.rb
index 50a84f3..ee8b89c 100644
--- a/services/image_factory/aeolus-image/lib/build_command.rb
+++ b/services/image_factory/aeolus-image/lib/build_command.rb
@@ -27,7 +27,7 @@ module Aeolus
end
# Validate XML against TDL Schema
- errors = validate_xml_document("examples/tdl.rng", @options[:template_str])
+ errors = validate_xml_document(File.dirname(__FILE__) + "/../examples/tdl.rng", @options[:template_str])
if errors.length > 0
puts "ERROR: The given Template does not conform to the TDL Schema, see below for specific details:"
errors.each do |error|
--
1.7.4.4
12 years, 9 months
[PATCH conductor] Cleans up tables and their surround controls throughout the application.
by kkeiter@redhat.com
From: Kenneth Keiter <kkeiter(a)redhat.com>
---
src/app/stylesheets/layout.scss | 42 ++++++++++++++++++++++++++-
src/app/views/deployments/_list.haml | 29 +++++++++---------
src/app/views/instances/_list.haml | 2 +-
src/app/views/layouts/_filter_table.haml | 42 +++++++++++++++-----------
src/app/views/layouts/_select_all_none.haml | 8 ++---
src/features/instance.feature | 4 +-
6 files changed, 85 insertions(+), 42 deletions(-)
diff --git a/src/app/stylesheets/layout.scss b/src/app/stylesheets/layout.scss
index 57c2fa7..6dd30bc 100644
--- a/src/app/stylesheets/layout.scss
+++ b/src/app/stylesheets/layout.scss
@@ -2317,8 +2317,48 @@ $cell_header_text_color: #666666;
background-image: linear-gradient($from, $to);
}
+/* Filterable Form */
+form.filterable-data{
+
+ ul.obj_actions{
+ padding: 6px 0px 6px 0px;
+
+ list-style: none;
+ li{ display: inline-block; }
+ li + li{ padding-left: 6px; }
+ }
+
+ div.controls{
+ display: block;
+ font-family: $font-family-primary;
+ font-size: 12px;
+ border: 1px solid #ccc;
+ padding: 10px;
+
+ ul{ list-style: none; display: inline-block; }
+ li{ display: inline; }
+ li + li{ padding-left: 6px; }
+ ul.view-contols{
+
+ }
+ ul.filter-controls{
+ float: right;
+ }
+
+ }
+
+ table{
+ width: 100%;
+ border-bottom: 1px solid #ccc;
+ border-left: 1px solid #ccc;
+ border-right: 1px solid #ccc;
+ }
+
+}
+
+
/* Flat Table ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-table.flat{
+table.flat, form.filterable-data table{
border-collapse: separate;
font-family: $font-family-primary;
diff --git a/src/app/views/deployments/_list.haml b/src/app/views/deployments/_list.haml
index 5305d49..d8a049e 100644
--- a/src/app/views/deployments/_list.haml
+++ b/src/app/views/deployments/_list.haml
@@ -1,25 +1,26 @@
- if request.xhr?
= render :partial => '/layouts/notification'
-- form_tag do
- = restful_submit_tag "Stop", "multi_stop", multi_stop_deployments_path, 'POST', :id => 'stop_button', :class => 'button'
- = label_tag "More actions"
- = select_tag("more_actions",nil, :disabled => true)
+- form_tag({}, :class => 'filterable-data') do
+ %ul.obj_actions
+ %li= restful_submit_tag "Stop Selected Deployments", "multi_stop", multi_stop_deployments_path, 'POST', :id => 'stop_button', :class => 'button'
- %p
- Viewing
- = select_tag("deployments_running", "<option>Deployments running</option>",:disabled => true)
- = @deployments.count.to_s + " results"
- = text_field_tag :q, @search_term || "Search result for...", :disabled => true
- = render :partial => 'layouts/select_all_none'
+ %div.controls
+ %ul.filter-controls
+ %li= render :partial => 'layouts/select_all_none'
- %table#deployments_table.flat.checkbox_table
+ %li
+ %label{:for => "deployments_running"} Viewing
+ = select_tag("deployments_running", "<option>Deployments running</option>",:disabled => true)
+ %li.object-count
+ %strong= @deployments.count.to_s
+ results
+
+ %table#deployments_table.checkbox_table
%thead
%tr
%th.ignore
%th
- -#there will be icons (belongs to mockups)
- %th
= t("pools.index.deployment_name")
%th
= t("pools.index.deployed_on")
@@ -37,8 +38,6 @@
- selected = params[:select] == 'all'
= check_box_tag "deployments_selected[]", deployment.id, selected, :id => "deployment_checkbox_#{deployment.id}"
%td
- -#there will be icons (belongs to mockups)
- %td
= link_to deployment.name, deployment_path(deployment)
%td
= deployment.created_at
diff --git a/src/app/views/instances/_list.haml b/src/app/views/instances/_list.haml
index 4620d1e..8f27e36 100644
--- a/src/app/views/instances/_list.haml
+++ b/src/app/views/instances/_list.haml
@@ -1,5 +1,5 @@
- form_header = capture_haml do
- = restful_submit_tag 'Stop', 'stop', multi_stop_instances_path, 'GET', :class => 'button'
+ = restful_submit_tag 'Stop Selected Instances', 'stop', multi_stop_instances_path, 'GET', :class => 'button'
= hidden_field_tag 'backlink', request.url
- if @hide_stopped
%b Stopped
diff --git a/src/app/views/layouts/_filter_table.haml b/src/app/views/layouts/_filter_table.haml
index f4c885c..a963634 100644
--- a/src/app/views/layouts/_filter_table.haml
+++ b/src/app/views/layouts/_filter_table.haml
@@ -1,24 +1,30 @@
-- form_tag do
- - if form_header
- = form_header
- - if show_filter_widgets
- %p
- Viewing
- = select_tag("select_#{lower_class}", saved_searches.join.html_safe,:disabled => true)
- = object_count.to_s + " results"
- = text_field_tag :q, search_term || "Search result for...", :disabled => true
- = link_to('Filters', '#')
- %p
- = link_to('Share this view', '#')
- = link_to('Add/Remove Columns', '#')
+- form_tag({}, :class => 'filterable-data') do
+
+ -if form_header
+ %ul.obj_actions
+ %li= form_header
- -if show_select_toggle
- = render :partial => 'layouts/select_all_none'
+ %div.controls
+ %ul.filter-controls
+ -if show_select_toggle
+ %li= render :partial => 'layouts/select_all_none'
+ - if show_filter_widgets
+ -# %li
+ -#%a.button.pill{:href => '#'} Filter
+ -# %li
+ -# %a.button.pill{:href => '#'} Add/Remove Columns
+
+ %li
+ %label{:for => "select_#{lower_class}"} Viewing
+ = select_tag("select_#{lower_class}", saved_searches.join.html_safe,:disabled => true)
+ %li.object-count
+ %strong= object_count.to_s
+ results
+ -# %li
+ -# %a.button.pill{:href => '#'} Save and Share
- %table.flat.checkbox_table
+ %table.checkbox_table
%thead
- -if show_filter_widgets or show_select_toggle
- %tr
- columns.each do |column|
%th
= column[:name]
diff --git a/src/app/views/layouts/_select_all_none.haml b/src/app/views/layouts/_select_all_none.haml
index ce2c5e8..fe14d61 100644
--- a/src/app/views/layouts/_select_all_none.haml
+++ b/src/app/views/layouts/_select_all_none.haml
@@ -1,5 +1,3 @@
-%p
- Select:
- = link_to "All", params.merge(:select => 'all')
- %span> ,
- = link_to "None", params.merge(:select => 'none')
+Select:
+= link_to "All", params.merge(:select => 'all')
+= link_to "None", params.merge(:select => 'none')
diff --git a/src/features/instance.feature b/src/features/instance.feature
index 4b1bed4..3df8072 100644
--- a/src/features/instance.feature
+++ b/src/features/instance.feature
@@ -69,7 +69,7 @@ Feature: Manage Instances
Given there is a "mock1" running instance
And I am on the instances page
When I check "mock1" instance
- And I press "Stop"
+ And I press "Stop Selected Instances"
Then I should be on the instances page
And I should see "mock1: stop action was successfully queued"
@@ -81,7 +81,7 @@ Feature: Manage Instances
When I check "mock1" instance
And I check "mock2" instance
And I check "mock3" instance
- And I press "Stop"
+ And I press "Stop Selected Instances"
Then I should be on the instances page
And I should see "mock1: stop action was successfully queued"
And I should see "mock2: stop action was successfully queued"
--
1.7.4.1
12 years, 9 months
Instance key generation
by Jan Provazník
This patchset enables generating of ssh key before an instance is launched (see
https://fedorahosted.org/pipermail/aeolus-devel/2011-June/002518.html for more
details). This is just first part, what needs to be done is:
- remove polymorphic instance key association (not needed for provider account
anymore)
- delete key (on provider side) on instance stop
Anyway this first part allows us to remove delayed_job dependency (which is
quite actual with switching to F15/16). If ACKed, this will be pushed after beta
release (because of potential regressions).
Jan
12 years, 9 months
What is Aeolus final draft for the website
by Hugh O. Brock
OK, I made a few more changes based on folks' responses thus far.
I think this can go up on aeolusproject.org now. If anyone has minor
corrections please reply. Otherwise, Justin, would you put this in the
appropriate spot on the site?
Thanks much,
--Hugh
--
== Hugh Brock, hbrock(a)redhat.com ==
== Engineering Manager, Cloud BU ==
== Aeolus Project: Manage virtual infrastructure across clouds. ==
== http://aeolusproject.org ==
"I know that you believe you understand what you think I said, but I’m
not sure you realize that what you heard is not what I meant."
--Robert McCloskey
====================================
What is Aeolus?
===============
Aeolus mission: To free users from cloud lock-in by making the choice
of cloud provider -- private, public, or hybrid -- a simple
launch-time option.
Aeolus is: A single, consistent set of tools to build and manage
organized groups of virtual machines across clouds.
So, what does Aeolus need to provide a user to accomplish its mission?
* Aeolus Conductor: A way to provide cloud resources to users, manage
users' access to and use of those resources, and control users'
instances in clouds. This lets users make intelligent choices about
which cloud to use.
* Aeolus Composer: A way to build cloud-specific images from
generic templates, so that users can choose clouds freely using
compatible images.
* Aeolus Orchestrator: A way to manage clumps of instances in an
organized way. Users should be able to automatically bring up a set
of different instances on a single cloud or spanning multiple
clouds, configure them, and tell them about each other.
* Aeolus HA Manager (need a better name): A way to make instances or
clumps of instances in the cloud highly available.
All these things are possible because of the Deltacloud cross-cloud
abstraction library -- but Deltacloud itself is a separate project.
What does each Aeolus component do, specifically?
=================================================
Aeolus Conductor:
* lets a user launch a VM on a cloud, track it through its
lifecycle, and clean it up when it is no longer needed
* lets a user easily check how much cloud time she has burned up,
set thresholds for alerting her when interesting things happen
(a VM crashed, she's about to go over n hours of usage this
month). If an admin has defined a per-hour cost for the cloud
providers the user is using, the user can check how much actual
money has been used and set an alert on that
* lets an administrator group cloud resources for other users, so
that they can track and control which resources are used and at what
level.
* lets a user share access to his VMs with others
* lets a user make an informed choice of which of the available
clouds to use, based on cost and QOS data and other useful
metrics. Or, lets the user delegate that choice to Conductor
itself
* lets the user monitor software and services on the guest, and the
health of the guest
* has a truly superior GUI for doing all this
Aeolus Composer:
* lets users create a template that defines an image, which we can
build for each cloud they are interested in
* lets users, as part of building the image, specify arguments to
pass into the build process to configure software installation,
and also to specify values that will be passed back into the image
metadata to be used later
* lets users build images for multiple operating systems, including
Windows and various Linux flavors
* lets users rebuild images from the original template if needed, to
update packages for feature enhacements, bug fixes, or security
issues
Aeolus Orchestrator:
* lets users specify a clump of images to launch and configure
simultaneously. We want the user's specification to be human
readable and portable
* lets users specify values to collect at launch-time. The values
will influence how the instances configure themselves, either by
being interpolated into config snippets in the clump
specification, or by being passed directly to the instance
post-boot. Launch-time values mean the instances in a clump can be
configured differently each time they are launched. (For example,
suppose the user wants to specify in advance the timezone the app
should run in. They would set that parameter in a form presented
at launch-time, and it would be passed through to the instance and
applied to the system configuration at boot time.)
* lets users provide configuration parameters and tooling for each
instance, to be injected and run at launch time. User-provided
configuration tooling can do anything including install software
packages, set config values, or start and stop services. Config
tooling can be in any form that the user's image supports --
puppet manifest, bash script, powershell script are all fine.
Aeolus HA Manager:
* lets users include instances or clumps of instances in an HA
infrastructure which provides isolation, recovery, and
notification of failed applications or instances
* lets users specify policy for maintaining or relaunching services
within an HA infrastructure
12 years, 9 months
Config server feature
by Greg Blomquist
This patch adds the ability to manage config server connections within
conductor. The concept is that a user should be able to add and manage a config
server connection for each provider account.
The overview of changes are:
* updated the provider account "show" view to allow the user to add, edit,
delete, and test a config server connection
* added config server model, controller, and views
* added spec and cucumber tests for the config server feature
12 years, 9 months
[PATCH conductor] span with loading picture as background in tabs
by Tomas Hrcka
---
src/app/stylesheets/custom.scss | 6 ++++++
src/public/javascripts/application.js | 1 +
2 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/src/app/stylesheets/custom.scss b/src/app/stylesheets/custom.scss
index d6dab6a..6f9de87 100644
--- a/src/app/stylesheets/custom.scss
+++ b/src/app/stylesheets/custom.scss
@@ -67,3 +67,9 @@ footer.standard{
#deployable-xml-link {
color: #666;
}
+
+.loading_tabs {
+ height: 30px;
+ display:block;
+ background: url(../../images/loading.gif) no-repeat center;
+}
\ No newline at end of file
diff --git a/src/public/javascripts/application.js b/src/public/javascripts/application.js
index f0dd78d..e2ee43a 100644
--- a/src/public/javascripts/application.js
+++ b/src/public/javascripts/application.js
@@ -65,6 +65,7 @@ var Conductor = {
e.preventDefault();
var url = $(this).attr('href');
+ $('#tab').html('<span class="loading_tabs"></span>');
$.get(url, function(data) {
$('#tab').html(data)
.show();
--
1.7.4.4
12 years, 9 months