[PATCH configure] vsphere fix and imagefactory 0.6.x compatibility
by Richard Su
vsphere.json file was omitted when we moved to profiles.
Starting with imagefactory 0.6.x, json files should be in /etc/imagefactory
---
recipes/aeolus/manifests/profiles/rhevm.pp | 2 +-
recipes/aeolus/manifests/profiles/vsphere.pp | 5 +++++
recipes/aeolus/templates/vmware.json | 10 ----------
recipes/aeolus/templates/vsphere.json | 10 ++++++++++
4 files changed, 16 insertions(+), 11 deletions(-)
delete mode 100644 recipes/aeolus/templates/vmware.json
create mode 100644 recipes/aeolus/templates/vsphere.json
diff --git a/recipes/aeolus/manifests/profiles/rhevm.pp b/recipes/aeolus/manifests/profiles/rhevm.pp
index 306729e..47d3e23 100644
--- a/recipes/aeolus/manifests/profiles/rhevm.pp
+++ b/recipes/aeolus/manifests/profiles/rhevm.pp
@@ -14,7 +14,7 @@
class aeolus::profiles::rhevm {
- file {"/etc/rhevm.json":
+ file {"/etc/imagefactory/rhevm.json":
content => template("aeolus/rhevm.json"),
mode => 755,
require => Package['aeolus-conductor-daemons'] }
diff --git a/recipes/aeolus/manifests/profiles/vsphere.pp b/recipes/aeolus/manifests/profiles/vsphere.pp
index c971abc..c85488e 100644
--- a/recipes/aeolus/manifests/profiles/vsphere.pp
+++ b/recipes/aeolus/manifests/profiles/vsphere.pp
@@ -15,6 +15,11 @@
class aeolus::profiles::vsphere {
aeolus::create_bucket{"aeolus":}
+ file {"/etc/imagefactory/vsphere.json":
+ content => template("aeolus/vsphere.json"),
+ mode => 755,
+ require => Package['aeolus-conductor-daemons'] }
+
aeolus::conductor::site_admin{"admin":
email => 'dcuser(a)aeolusproject.org',
password => "password",
diff --git a/recipes/aeolus/templates/vmware.json b/recipes/aeolus/templates/vmware.json
deleted file mode 100644
index 6f70d62..0000000
--- a/recipes/aeolus/templates/vmware.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "vsphere":
- {
- "api-url": "https://<%= vsphere_deltacloud_provider %>/sdk",
- "username": "<%= vsphere_username %>",
- "password": "<%= vsphere_password %>",
- "datastore": "<%= vsphere_datastore %>",
- "network_name": "<%= vsphere_network_name %>"
- }
-}
diff --git a/recipes/aeolus/templates/vsphere.json b/recipes/aeolus/templates/vsphere.json
new file mode 100644
index 0000000..6f70d62
--- /dev/null
+++ b/recipes/aeolus/templates/vsphere.json
@@ -0,0 +1,10 @@
+{
+ "vsphere":
+ {
+ "api-url": "https://<%= vsphere_deltacloud_provider %>/sdk",
+ "username": "<%= vsphere_username %>",
+ "password": "<%= vsphere_password %>",
+ "datastore": "<%= vsphere_datastore %>",
+ "network_name": "<%= vsphere_network_name %>"
+ }
+}
--
1.7.6.2
12 years, 7 months
[PATCH configure 2/2] BZ 739091 - ability to run multiple profiles in a single execution
by Richard Su
Example: aeolus-configure -p rhevm,vsphere,ec2
---
bin/aeolus-configure | 9 +++++++--
1 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/bin/aeolus-configure b/bin/aeolus-configure
index 4fc9c5a..8f65d37 100644
--- a/bin/aeolus-configure
+++ b/bin/aeolus-configure
@@ -67,9 +67,14 @@ echo "Launching aeolus configuration recipe..."
export FACTER_AEOLUS_ENABLE_HTTPS=true
export FACTER_AEOLUS_ENABLE_SECURITY=false
-puppet /usr/share/aeolus-configure/modules/aeolus/aeolus.pp \
+
+NODE_ARRAY=(`echo $PUPPET_NODE | tr "," "\n"`)
+for x in "${NODE_ARRAY[@]}"
+do
+ puppet /usr/share/aeolus-configure/modules/aeolus/aeolus.pp \
--modulepath=/usr/share/aeolus-configure/modules/ \
- --external_nodes "/bin/sh /usr/share/aeolus-configure/modules/aeolus/aeolus-node $PUPPET_NODE" --node_terminus exec \
+ --external_nodes "/bin/sh /usr/share/aeolus-configure/modules/aeolus/aeolus-node $x" --node_terminus exec \
--logdest=/var/log/aeolus-configure/aeolus-configure.log \
--logdest=console \
$LOGLEVEL
+done
\ No newline at end of file
--
1.7.6.2
12 years, 7 months
[PATCH configure 1/2] Move ec2 and mock out of default configure and into their own profiles v2
by Richard Su
Their profiles are activated by running "aeolus-configure -p ec2" and
"aeolus-configure -p mock".
Ensure all provider profiles create a default bucket.
Remove whitespaces.
---
conf/ec2 | 13 ++++++
conf/mock | 12 ++++++
recipes/aeolus/manifests/profiles/default.pp | 41 +-------------------
recipes/aeolus/manifests/profiles/ec2.pp | 52 ++++++++++++++++++++++++++
recipes/aeolus/manifests/profiles/mock.pp | 51 +++++++++++++++++++++++++
recipes/aeolus/manifests/profiles/rhevm.pp | 5 +-
recipes/aeolus/manifests/profiles/vsphere.pp | 4 +-
7 files changed, 136 insertions(+), 42 deletions(-)
create mode 100644 conf/ec2
create mode 100644 conf/mock
create mode 100644 recipes/aeolus/manifests/profiles/ec2.pp
create mode 100644 recipes/aeolus/manifests/profiles/mock.pp
diff --git a/conf/ec2 b/conf/ec2
new file mode 100644
index 0000000..142887f
--- /dev/null
+++ b/conf/ec2
@@ -0,0 +1,13 @@
+# ec2 setup configuration.
+---
+parameters:
+ enable_https: true
+ enable_security: false
+ package_provider: rpm
+classes:
+- aeolus::conductor
+- aeolus::image-factory
+- aeolus::iwhd
+- aeolus::deltacloud::core
+- aeolus::deltacloud::ec2
+- aeolus::profiles::ec2
diff --git a/conf/mock b/conf/mock
new file mode 100644
index 0000000..087c329
--- /dev/null
+++ b/conf/mock
@@ -0,0 +1,12 @@
+# mock setup configuration.
+---
+parameters:
+ enable_https: true
+ enable_security: false
+ package_provider: rpm
+classes:
+- aeolus::conductor
+- aeolus::image-factory
+- aeolus::iwhd
+- aeolus::deltacloud::core
+- aeolus::profiles::mock
diff --git a/recipes/aeolus/manifests/profiles/default.pp b/recipes/aeolus/manifests/profiles/default.pp
index 8bbfb7f..c3a58cd 100644
--- a/recipes/aeolus/manifests/profiles/default.pp
+++ b/recipes/aeolus/manifests/profiles/default.pp
@@ -13,7 +13,6 @@
# limitations under the License.
class aeolus::profiles::default {
- include aeolus::deltacloud::ec2
aeolus::create_bucket{"aeolus":}
@@ -25,31 +24,7 @@ class aeolus::profiles::default {
aeolus::conductor::login{"admin": password => "password",
require => Aeolus::Conductor::Site_admin['admin']}
-
- aeolus::conductor::provider{"mock":
- deltacloud_driver => 'mock',
- url => 'http://localhost:3002/api',
- require => Aeolus::Conductor::Login["admin"] }
-
- aeolus::conductor::provider::account{"mockuser":
- provider => 'mock',
- type => 'mock',
- username => 'mockuser',
- password => 'mockpassword',
- require => Aeolus::Conductor::Provider["mock"] }
-
- aeolus::conductor::provider{"ec2-us-east-1":
- deltacloud_driver => 'ec2',
- deltacloud_provider => 'us-east-1',
- url => 'http://localhost:3002/api',
- require => Aeolus::Conductor::Login["admin"] }
-
- aeolus::conductor::provider{"ec2-us-west-1":
- deltacloud_driver => 'ec2',
- deltacloud_provider => 'us-west-1',
- url => 'http://localhost:3002/api',
- require => Aeolus::Conductor::Login["admin"] }
-
+
aeolus::conductor::hwp{"hwp1":
memory => "512",
cpu => "1",
@@ -57,17 +32,7 @@ class aeolus::profiles::default {
architecture => "x86_64",
require => Aeolus::Conductor::Login["admin"] }
- aeolus::conductor::hwp{"hwp2":
- memory => "1",
- cpu => "",
- storage => "1",
- architecture => "x86_64",
- require => Aeolus::Conductor::Login["admin"] }
-
aeolus::conductor::logout{"admin":
- require => [Aeolus::Conductor::Provider['mock'],
- Aeolus::Conductor::Provider::Account['mockuser'],
- Aeolus::Conductor::Provider['ec2-us-east-1'],
- Aeolus::Conductor::Provider['ec2-us-west-1'],
- Aeolus::Conductor::Hwp['hwp1', 'hwp2']] }
+ require => Aeolus::Conductor::Hwp['hwp1']}
+
}
diff --git a/recipes/aeolus/manifests/profiles/ec2.pp b/recipes/aeolus/manifests/profiles/ec2.pp
new file mode 100644
index 0000000..3dd96e0
--- /dev/null
+++ b/recipes/aeolus/manifests/profiles/ec2.pp
@@ -0,0 +1,52 @@
+# Copyright 2011 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class aeolus::profiles::ec2 {
+ include aeolus::deltacloud::ec2
+
+ aeolus::create_bucket{"aeolus":}
+
+ aeolus::conductor::site_admin{"admin":
+ email => 'dcuser(a)aeolusproject.org',
+ password => "password",
+ first_name => 'aeolus',
+ last_name => 'user'}
+
+ aeolus::conductor::login{"admin": password => "password",
+ require => Aeolus::Conductor::Site_admin['admin']}
+
+ aeolus::conductor::provider{"ec2-us-east-1":
+ deltacloud_driver => 'ec2',
+ deltacloud_provider => 'us-east-1',
+ url => 'http://localhost:3002/api',
+ require => Aeolus::Conductor::Login["admin"] }
+
+ aeolus::conductor::provider{"ec2-us-west-1":
+ deltacloud_driver => 'ec2',
+ deltacloud_provider => 'us-west-1',
+ url => 'http://localhost:3002/api',
+ require => Aeolus::Conductor::Login["admin"] }
+
+ aeolus::conductor::hwp{"hwp1":
+ memory => "512",
+ cpu => "1",
+ storage => "",
+ architecture => "x86_64",
+ require => Aeolus::Conductor::Login["admin"] }
+
+ aeolus::conductor::logout{"admin":
+ require => [Aeolus::Conductor::Provider['ec2-us-east-1'],
+ Aeolus::Conductor::Provider['ec2-us-west-1'],
+ Aeolus::Conductor::Hwp['hwp1']] }
+}
diff --git a/recipes/aeolus/manifests/profiles/mock.pp b/recipes/aeolus/manifests/profiles/mock.pp
new file mode 100644
index 0000000..1656815
--- /dev/null
+++ b/recipes/aeolus/manifests/profiles/mock.pp
@@ -0,0 +1,51 @@
+# Copyright 2011 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class aeolus::profiles::mock {
+
+ aeolus::create_bucket{"aeolus":}
+
+ aeolus::conductor::site_admin{"admin":
+ email => 'dcuser(a)aeolusproject.org',
+ password => "password",
+ first_name => 'aeolus',
+ last_name => 'user'}
+
+ aeolus::conductor::login{"admin": password => "password",
+ require => Aeolus::Conductor::Site_admin['admin']}
+
+ aeolus::conductor::provider{"mock":
+ deltacloud_driver => 'mock',
+ url => 'http://localhost:3002/api',
+ require => Aeolus::Conductor::Login["admin"] }
+
+ aeolus::conductor::provider::account{"mockuser":
+ provider => 'mock',
+ type => 'mock',
+ username => 'mockuser',
+ password => 'mockpassword',
+ require => Aeolus::Conductor::Provider["mock"] }
+
+ aeolus::conductor::hwp{"hwp1":
+ memory => "512",
+ cpu => "1",
+ storage => "",
+ architecture => "x86_64",
+ require => Aeolus::Conductor::Login["admin"] }
+
+ aeolus::conductor::logout{"admin":
+ require => [Aeolus::Conductor::Provider['mock'],
+ Aeolus::Conductor::Provider::Account['mockuser'],
+ Aeolus::Conductor::Hwp['hwp1']] }
+}
diff --git a/recipes/aeolus/manifests/profiles/rhevm.pp b/recipes/aeolus/manifests/profiles/rhevm.pp
index 6ff7e8f..306729e 100644
--- a/recipes/aeolus/manifests/profiles/rhevm.pp
+++ b/recipes/aeolus/manifests/profiles/rhevm.pp
@@ -13,6 +13,7 @@
# limitations under the License.
class aeolus::profiles::rhevm {
+
file {"/etc/rhevm.json":
content => template("aeolus/rhevm.json"),
mode => 755,
@@ -57,14 +58,14 @@ class aeolus::profiles::rhevm {
url => "http://localhost:3002/api",
deltacloud_provider => "$rhevm_deltacloud_provider",
require => Aeolus::Conductor::Login["admin"] }
-
+
aeolus::conductor::provider::account{"rhevm":
provider => 'rhevm',
type => 'rhevm',
username => '$rhevm_deltacloud_username',
password => '$rhevm_deltacloud_password',
require => Aeolus::Conductor::Provider["rhevm"] }
-
+
aeolus::conductor::hwp{"hwp1":
memory => "512",
cpu => "1",
diff --git a/recipes/aeolus/manifests/profiles/vsphere.pp b/recipes/aeolus/manifests/profiles/vsphere.pp
index 570e653..c971abc 100644
--- a/recipes/aeolus/manifests/profiles/vsphere.pp
+++ b/recipes/aeolus/manifests/profiles/vsphere.pp
@@ -29,14 +29,14 @@ class aeolus::profiles::vsphere {
url => "http://localhost:3002/api",
deltacloud_provider => "$vsphere_deltacloud_provider",
require => [Aeolus::Conductor::Login["admin"]] }
-
+
aeolus::conductor::provider::account{"vsphere":
provider => 'vsphere',
type => 'vsphere',
username => '$vsphere_username',
password => '$vsphere_password',
require => Aeolus::Conductor::Provider["vsphere"] }
-
+
aeolus::conductor::hwp{"hwp1":
memory => "512",
cpu => "1",
--
1.7.6.2
12 years, 7 months
#2121 - Preliminary OAuth client
by Matt Wagner
Hello,
This implements a basic OAuth client. It's fairly useless by itself, and the intention is that it will be extended by other classes -- e.g., you'd implement a FactoryClient that includes this code.
By default, it will check config/settings.yml for a key under oauth: with the name of the host. I included a commented-out example. If this is not to your liking, you're free to implement your own consumer_credentials_for_resource, and to customize default_headers. (For example, in Katello, you might want default_headers to return {'katello-user' => 'admin'}.)
As an open question: Where should this code live? I've placed it in Conductor, but I'm wondering if it might actually belong in aeolus-image, which is likely going to be the primary consumer of OAuth providers.
None of the providers we wish to consume using OAuth -- iwhd, Factory, or Config Server -- have OAuth support just yet. However, it should be trivial to implement new clients once they're ready.
I don't have tests ready yet, but wanted to get this on the list for review sooner rather than later.
Sample usage:
require 'oauth_client'
o = OAuthClient.new('http://www.example.com/')
o.authenticated_get('/api/providers')
puts o.body
Best,
Matt
12 years, 7 months
[PATCH conductor] Fixed links when loading data with JSON
by Jan Provazník
From: Jan Provaznik <jprovazn(a)redhat.com>
https://www.aeolusproject.org/redmine/issues/2382
https://bugzilla.redhat.com/show_bug.cgi?id=734503
Links are now generated in views (when jquery template is defined),
and only object id is then passed in JSON data. It's not possible to pass '${id}'
string as id to *_path helper methods because URI.escape is called on id,
so after generating path, id is substituted with ('${id}').
Not saying this is cleanest way how to do it, but it's simplest ATM and buys
us some time to figure out better solution.
---
src/app/helpers/application_helper.rb | 2 +-
src/app/models/deployment.rb | 5 ++---
src/app/models/instance.rb | 7 +------
src/app/models/pool.rb | 3 +--
src/app/views/deployments/_list.haml | 6 +++---
src/app/views/deployments/_pretty_view.haml | 2 +-
src/app/views/deployments/_pretty_view_show.haml | 8 ++++----
src/app/views/instances/_list.haml | 2 +-
src/app/views/pools/_list.haml | 4 ++--
9 files changed, 16 insertions(+), 23 deletions(-)
diff --git a/src/app/helpers/application_helper.rb b/src/app/helpers/application_helper.rb
index b22d1cf..9441d76 100644
--- a/src/app/helpers/application_helper.rb
+++ b/src/app/helpers/application_helper.rb
@@ -120,7 +120,7 @@ module ApplicationHelper
time = (time - hours) / 24
days = time % 7
- result_string<< pluralize(days.to_i, 'day') if days != 0
+ result_string<< "#{days.to_i} #{(days.to_i > 1 ? 'days' : 'day')}" if days != 0
result_string<<"#{"%02d"%hours.to_i}:#{"%02d"%minutes.to_i}:#{"%02d"%seconds.to_i}"
result_string.join(", ")
else
diff --git a/src/app/models/deployment.rb b/src/app/models/deployment.rb
index 5365af2..74b3900 100644
--- a/src/app/models/deployment.rb
+++ b/src/app/models/deployment.rb
@@ -288,17 +288,16 @@ class Deployment < ActiveRecord::Base
:deployable_xml_name => deployable_xml.name,
:instances_count => instances.count,
:uptime => ApplicationHelper.count_uptime(uptime_1st_instance),
- :href => Rails.application.routes.url_helpers.deployment_path(id),
:pool => {
:name => pool.name,
- :href => Rails.application.routes.url_helpers.pool_path(pool.id),
+ :id => pool.id,
},
})
if provider
json[:provider] = {
:name => provider.provider_type.name,
- :href => Rails.application.routes.url_helpers.provider_path(provider.id),
+ :id => provider.id,
}
end
diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb
index 9274533..cb15b16 100644
--- a/src/app/models/instance.rb
+++ b/src/app/models/instance.rb
@@ -370,16 +370,11 @@ class Instance < ActiveRecord::Base
{:include => :hardware_profile}
}
- def instance_key_path
- Rails.application.routes.url_helpers.key_instance_path(self) if instance_key
- end
-
def as_json(options={})
super(options).merge({
:owner => owner.name,
:provider => provider_account ? provider_account.provider.name : '',
- :href => Rails.application.routes.url_helpers.instance_path(id),
- :instance_key_path => instance_key_path,
+ :has_key => !!instance_key
})
end
diff --git a/src/app/models/pool.rb b/src/app/models/pool.rb
index eca5f71..b963e3a 100644
--- a/src/app/models/pool.rb
+++ b/src/app/models/pool.rb
@@ -110,10 +110,9 @@ class Pool < ActiveRecord::Base
result = super(options).merge({
:statistics => statistics,
:deployments_count => deployments.count,
- :href => Rails.application.routes.url_helpers.pool_path(id),
:pool_family => {
:name => pool_family.name,
- :href => Rails.application.routes.url_helpers.pool_family_path(pool_family.id),
+ :id => pool_family.id,
},
})
diff --git a/src/app/views/deployments/_list.haml b/src/app/views/deployments/_list.haml
index c474218..5e9d5cd 100644
--- a/src/app/views/deployments/_list.haml
+++ b/src/app/views/deployments/_list.haml
@@ -39,13 +39,13 @@
<td><input type="checkbox" id="deployment_checkbox_${id}"
name="deployments_selected[]" value="${id}"></td>
<td />
- <td><a href="${href}">${name}</a></td>
+ <td><a href="#{deployment_path('replace_id').sub('replace_id', '${id}')}">${name}</a></td>
<td>${created_at}</td>
<td>${deployable_xml_name}</td>
<td>${instances_count}</td>
- <td><a href="${pool.href}">${pool.name}</a></td>
+ <td><a href="#{pool_path('replace_id').sub('replace_id', '${pool.id}')}">${pool.name}</a></td>
<td>${owner}</td>
{{if provider}}
- <td><a href="${provider.href}">${provider.name}</a></td>
+ <td><a href="#{provider_path('replace_id').sub('replace_id', '${provider.id}')}">${provider.name}</a></td>
{{/if}}
</tr>
diff --git a/src/app/views/deployments/_pretty_view.haml b/src/app/views/deployments/_pretty_view.haml
index f57b770..ccaad6c 100644
--- a/src/app/views/deployments/_pretty_view.haml
+++ b/src/app/views/deployments/_pretty_view.haml
@@ -30,7 +30,7 @@
:plain
<li class="deployment">
<h3 class="name">
- <a href="${href}">${name}</a>
+ <a href="#{deployment_path('replace_id').sub('replace_id', '${id}')}">${name}</a>
</h3>
<dl class="statistics">
<ul>
diff --git a/src/app/views/deployments/_pretty_view_show.haml b/src/app/views/deployments/_pretty_view_show.haml
index 4f7fe6a..86b1bad 100644
--- a/src/app/views/deployments/_pretty_view_show.haml
+++ b/src/app/views/deployments/_pretty_view_show.haml
@@ -11,9 +11,9 @@
%li
State:
= instance.state
- - if instance.instance_key_path
+ - if instance.instance_key
%li
- = link_to("Download key", instance.instance_key_path)
+ = link_to("Download key", key_instance_path(instance))
:javascript
Conductor.setupPrettyFilterURL(
@@ -26,8 +26,8 @@
<ul>
<li>IP Address: ${public_addresses}</li>
<li>State: ${state}</li>
- {{if instance_key_path}}
- <li><a href="${instance_key_path}">Download key</a></li>
+ {{if has_key}}
+ <li><a href="#{key_instance_path('replace_id').sub('replace_id', '${id}')}">Download key</a></li>
{{/if}}
</ul>
</li>
diff --git a/src/app/views/instances/_list.haml b/src/app/views/instances/_list.haml
index 316ad14..70de8e6 100644
--- a/src/app/views/instances/_list.haml
+++ b/src/app/views/instances/_list.haml
@@ -34,7 +34,7 @@
<td><input type="checkbox" id="instance_checkbox_${id}"
name="instance_selected[]" value="${id}"></td>
<td />
- <td><a href="${href}">${name}</a></td>
+ <td><a href="#{instance_path('replace_id').sub('replace_id', '${id}')}">${name}</a></td>
<td>${public_addresses}</td>
<td>${state}</td>
<td>${provider}</td>
diff --git a/src/app/views/pools/_list.haml b/src/app/views/pools/_list.haml
index f691c87..d7bf205 100644
--- a/src/app/views/pools/_list.haml
+++ b/src/app/views/pools/_list.haml
@@ -31,11 +31,11 @@
<td><input type="checkbox" id="pool_checkbox_${id}"
name="pools_selected[]" value="${id}"></td>
<td />
- <td><a href="${href}">${name}</a></td>
+ <td><a href="#{pool_path('replace_id').sub('replace_id', '${id}')}">${name}</a></td>
<td>${deployments_count}</td>
<td>${statistics.total_instances}</td>
<td>${statistics.instances_pending}</td>
<td>${statistics.instances_failed}</td>
<td>${statistics.quota_percent}</td>
- <td><a href="${pool_family.href}">${pool_family.name}</a></td>
+ <td><a href="#{pool_family_path('replace_id').sub('replace_id', '${pool_family.id}')}">${pool_family.name}</a></td>
</tr>
--
1.7.6
12 years, 7 months
rake spec fix
by Jason Guiditta
Resending this to list, accidentally used --to instead of --cc last
night when I sent to Scott.
-j
12 years, 7 months
[PATCH Oz] Add debian Add debian support.
by Richard W.M. Jones
The attached patch adds a debian/ subdirectory, allowing would-be
Debian and Ubuntu users to build their own packages, and/or for us to
distribute binary packages.
Some things to note:
* You'll notice there is a fair amount of duplication between oz.spec
%install section and debian/rules. Ideally you should move the code
which creates directories and installs the config file into setup.py,
if that is possible.
* I tested this, and it didn't actually finish building the package
because it timed out. This is because I'm running this inside a VM so
the nested qemu is very slow. However it did basically appear to be
working. I will test it further -- with longer timeouts -- later.
* I tested building the package on Debian/stable and Ubuntu 11.04.
* If someone steps up and packages Oz in Debian/Ubuntu for real, then
we would likely want to remove the debian directory, since it will
interfere with packaging.
* One lintian warning. Doesn't look very serious.
W: oz: maintainer-script-ignores-errors postinst
* The package version-release field comes from the debian/changelog
file. In libguestfs I usually generate this file using autoconf,
although that's not really the right thing to do.
* gvnccapture is not packaged in commonly available versions of Debian
or Ubuntu. It is currently sitting in Debian/unstable.
* The package runtime depends on python-libguestfs.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://et.redhat.com/~rjones/virt-df/
12 years, 7 months
[PATCH conductor] BZ733902 - exposed html tag in instance multistop
by Tomas Hrcka
---
src/app/controllers/instances_controller.rb | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/app/controllers/instances_controller.rb b/src/app/controllers/instances_controller.rb
index 9d383f4..a670a9d 100644
--- a/src/app/controllers/instances_controller.rb
+++ b/src/app/controllers/instances_controller.rb
@@ -151,7 +151,7 @@ class InstancesController < ApplicationController
raise ActionError.new("stop cannot be performed on this instance.")
end
Taskomatic.stop_instance(@task)
- notices << "#{instance.name}: stop action was successfully queued.<br/>"
+ notices << "#{instance.name}: stop action was successfully queued."
rescue Exception => err
errors << "#{instance.name}: " + err + "<br/>"
end
--
1.7.6.2
12 years, 7 months
Aeolus Project on Twitter
by Matt Wagner
Hi all,
As we try to grow our community presence, I went ahead and populated our
profile on Twitter a bit:
http://twitter.com/#!/aeolusproject
I couldn't find an existing summary of what we were all about that was
160 characters of less, so I went with this:
"Aeolus Project is a software suite freeing users from cloud lock-in,
permitting building, launching, and managing images across cloud
providers.
Do you think this is the best summary possible? I'm eager to revise if
not.
In any event, if you use Twitter, I invite you to start following
@aeolusproject! :)
Best,
Matt
12 years, 7 months