[PATCH conductor] Fix BZ #683517: Internal Server Error, clicking histroy/Permissions of an instance
by Tomas Sedovic
From: Tomas Sedovic <tsedovic(a)redhat.com>
https://bugzilla.redhat.com/show_bug.cgi?id=683517
When user clicked on the History or Permissions tab on the Instances page, the
tab content read "Internal Server Error".
Fixed by adding placeholder views for of both of the tabs.
---
src/app/views/resources/instances/_history.haml | 3 +++
.../views/resources/instances/_permissions.haml | 3 +++
2 files changed, 6 insertions(+), 0 deletions(-)
create mode 100644 src/app/views/resources/instances/_history.haml
create mode 100644 src/app/views/resources/instances/_permissions.haml
diff --git a/src/app/views/resources/instances/_history.haml b/src/app/views/resources/instances/_history.haml
new file mode 100644
index 0000000..854743e
--- /dev/null
+++ b/src/app/views/resources/instances/_history.haml
@@ -0,0 +1,3 @@
+%h3
+ History for
+ = @instance.name
diff --git a/src/app/views/resources/instances/_permissions.haml b/src/app/views/resources/instances/_permissions.haml
new file mode 100644
index 0000000..02da418
--- /dev/null
+++ b/src/app/views/resources/instances/_permissions.haml
@@ -0,0 +1,3 @@
+%h3
+ Permissions for
+ = @instance.name
--
1.7.4
13 years, 1 month
[PATCH] allow retrying of image build and upload (rev 3).
by Scott Seago
Signed-off-by: Scott Seago <sseago(a)redhat.com>
---
.../controllers/image_factory/builds_controller.rb | 36 ++++++++++++++++++++
src/app/models/image.rb | 11 ++++++
src/app/models/provider_image.rb | 6 +++
src/app/views/image_factory/templates/_builds.haml | 12 +++++-
src/config/routes.rb | 2 +-
src/spec/controllers/builds_controller_spec.rb | 14 ++++++++
6 files changed, 78 insertions(+), 3 deletions(-)
create mode 100644 src/app/views/image_factory/builds/index.haml
diff --git a/src/app/controllers/image_factory/builds_controller.rb b/src/app/controllers/image_factory/builds_controller.rb
index b6efe81..58c3fa6 100644
--- a/src/app/controllers/image_factory/builds_controller.rb
+++ b/src/app/controllers/image_factory/builds_controller.rb
@@ -1,6 +1,9 @@
class ImageFactory::BuildsController < ApplicationController
before_filter [:require_user], :except => [:update_status]
+ def index
+ end
+
def create
@tpl = Template.find(params[:template_id])
check_permission
@@ -43,6 +46,39 @@ class ImageFactory::BuildsController < ApplicationController
# FIXME: is @tpl defined here? do we need check_permission here?
end
+ def retry
+ @tpl = Template.find(params[:template_id])
+ check_permission
+ begin
+ if params[:image_id]
+ image = Image.find(params[:image_id])
+ if image
+ errors = {}
+ warnings = []
+ image.rebuild!
+ flash[:notice] = "Queued rebuild for image #{image.name}"
+ else
+ flash[:warning] = "could not find image #{image_id}"
+ end
+ elsif params[:provider_image_id]
+ provider_image = ProviderImage.find(params[:provider_image_id])
+ if provider_image
+ provider_image.retry_upload!
+ flash[:notice] = "Queued upload of provider image #{provider_image.image.name} to #{provider_image.provider.name}"
+ else
+ flash[:warning] = "could not find provider image #{provider_image_id}"
+ end
+ else
+ flash[:warning] = 'You need to specify either a provider or a provider image'
+ end
+ rescue
+ flash[:warning] = $!.message
+ logger.error $!.message
+ logger.error $!.backtrace.join("\n ")
+ end
+ redirect_to image_factory_template_path(@tpl, :details_tab => 'builds')
+ end
+
def update_status
image = Image.find_by_uuid(params[:uuid])
image = ProviderImage.find_by_uuid(params[:uuid]) unless image
diff --git a/src/app/models/image.rb b/src/app/models/image.rb
index ff9f811..923dd23 100644
--- a/src/app/models/image.rb
+++ b/src/app/models/image.rb
@@ -84,6 +84,17 @@ class Image < ActiveRecord::Base
end
end
+ def rebuild!
+ # TODO: remove this check when we have UI for pushing images
+ if self.provider_type.providers.empty? or not self.provider_type.providers.detect {|p| !p.provider_accounts.empty?}
+ raise "Error: A valid provider and provider account are required to create and build templates"
+ end
+ self.status = STATE_QUEUED
+ self.save!
+ self.provider_images.each {|pimg| pimg.destroy}
+ Delayed::Job.enqueue(BuildJob.new(self.id))
+ end
+
def not_uploaded_providers
uploaded = self.provider_images
Provider.all(:conditions => {:provider_type_id => self.provider_type.id}).select do |p|
diff --git a/src/app/models/provider_image.rb b/src/app/models/provider_image.rb
index aee69a9..23e9d6a 100644
--- a/src/app/models/provider_image.rb
+++ b/src/app/models/provider_image.rb
@@ -37,6 +37,12 @@ class ProviderImage < ActiveRecord::Base
end
end
+ def retry_upload!
+ self.status = STATE_QUEUED
+ self.save!
+ Delayed::Job.enqueue(PushJob.new(self.id))
+ end
+
def warehouse_bucket
'provider_images'
end
diff --git a/src/app/views/image_factory/builds/index.haml b/src/app/views/image_factory/builds/index.haml
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/views/image_factory/templates/_builds.haml b/src/app/views/image_factory/templates/_builds.haml
index 65cbc5a..a6bdd4b 100644
--- a/src/app/views/image_factory/templates/_builds.haml
+++ b/src/app/views/image_factory/templates/_builds.haml
@@ -19,12 +19,20 @@ Builds for
- else
- @images.each do |img|
%li
- = "#{img.name}-#{img.template.architecture}: #{img.status}"
+ - form_tag(retry_image_factory_builds_path, { :method => :post }) do
+ = "#{img.name}-#{img.template.architecture}: #{img.status}"
+ = hidden_field_tag :template_id, @tpl.id
+ = hidden_field_tag :image_id, img.id
+ = submit_tag "Retry build", :name => "build"
- if img.status == Image::STATE_COMPLETED
%ul
- img.provider_images.each do |pimg|
%li
- = "#{pimg.provider.name}: #{pimg.status}"
+ - form_tag(retry_image_factory_builds_path, { :method => :post }) do
+ = "#{pimg.provider.name}: #{pimg.status}"
+ = hidden_field_tag :template_id, @tpl.id
+ = hidden_field_tag :provider_image_id, pimg.id
+ = submit_tag "Retry upload", :name => "build"
- unless @tpl.imported
- img.not_uploaded_providers.each do |provider|
%li
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 98bc4f8..a7b0044 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -47,7 +47,7 @@ ActionController::Routing::Routes.draw do |map|
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.connect "/builds/update_status.:format", :controller => :builds, :action => :update_status
- r.resources :builds, :collection => { :delete => :delete, :upload => :get }
+ r.resources :builds, :collection => { :delete => :delete, :upload => :get, :retry => :post }
end
map.namespace 'admin' do |r|
diff --git a/src/spec/controllers/builds_controller_spec.rb b/src/spec/controllers/builds_controller_spec.rb
index a3d7f4d..17fac9c 100644
--- a/src/spec/controllers/builds_controller_spec.rb
+++ b/src/spec/controllers/builds_controller_spec.rb
@@ -53,5 +53,19 @@ describe ImageFactory::BuildsController do
post :create, :template_id => @template.id, :target => ProviderType.find_by_codename("mock").id
end.should change(Image, :count).by(1)
end
+
+ it "retry build should update Image status" do
+ lambda do
+ post :create, :template_id => @template.id, :target => ProviderType.find_by_codename("mock").id
+ end.should change(Image, :count).by(1)
+ @template.images.size.should == 1
+ image = @template.images[0]
+ image.reload.status.should == "queued"
+ post :update_status, :uuid => image.uuid, :status => 'failed'
+ image.reload.status.should == "failed"
+ post :retry, :image_id => image.id, :template_id => @template.id
+ image.reload.status.should == "queued"
+
+ end
end
end
--
1.7.4
13 years, 1 month
[PATCH configure] remove firewall bits from recipe
by Mo Morsi
---
recipes/aeolus_recipe/manifests/aeolus.pp | 2 -
recipes/aeolus_recipe/manifests/conductor.pp | 5 -
recipes/firewall/README | 1 -
.../firewall/files/chain_rules/filter/FORWARD.head | 1 -
.../firewall/files/chain_rules/filter/FORWARD.tail | 1 -
.../firewall/files/chain_rules/filter/INPUT.head | 9 -
.../firewall/files/chain_rules/filter/INPUT.tail | 5 -
.../firewall/files/chain_rules/filter/OUTPUT.head | 1 -
.../firewall/files/chain_rules/filter/OUTPUT.tail | 1 -
.../firewall/files/chain_rules/mangle/FORWARD.head | 1 -
.../firewall/files/chain_rules/mangle/FORWARD.tail | 1 -
.../firewall/files/chain_rules/mangle/INPUT.head | 1 -
.../firewall/files/chain_rules/mangle/INPUT.tail | 1 -
.../files/chain_rules/mangle/POSTROUTING.head | 1 -
.../files/chain_rules/mangle/POSTROUTING.tail | 1 -
recipes/firewall/files/chain_rules/nat/OUTPUT.head | 1 -
recipes/firewall/files/chain_rules/nat/OUTPUT.tail | 1 -
.../files/chain_rules/nat/POSTROUTING.head | 1 -
.../files/chain_rules/nat/POSTROUTING.tail | 1 -
.../firewall/files/chain_rules/nat/PREROUTING.head | 1 -
.../firewall/files/chain_rules/nat/PREROUTING.tail | 1 -
recipes/firewall/files/chain_rules/raw/OUTPUT.head | 1 -
recipes/firewall/files/chain_rules/raw/OUTPUT.tail | 1 -
.../firewall/files/chain_rules/raw/PREROUTING.head | 1 -
.../firewall/files/chain_rules/raw/PREROUTING.tail | 1 -
recipes/firewall/files/iptables-update.sh | 199 --------------------
recipes/firewall/manifests/defines.pp | 77 --------
recipes/firewall/manifests/init.pp | 102 ----------
recipes/firewall/templates/rule.erb | 70 -------
29 files changed, 0 insertions(+), 490 deletions(-)
delete mode 100644 recipes/firewall/README
delete mode 100644 recipes/firewall/files/chain_rules/filter/FORWARD.head
delete mode 100644 recipes/firewall/files/chain_rules/filter/FORWARD.tail
delete mode 100644 recipes/firewall/files/chain_rules/filter/INPUT.head
delete mode 100644 recipes/firewall/files/chain_rules/filter/INPUT.tail
delete mode 100644 recipes/firewall/files/chain_rules/filter/OUTPUT.head
delete mode 100644 recipes/firewall/files/chain_rules/filter/OUTPUT.tail
delete mode 100644 recipes/firewall/files/chain_rules/mangle/FORWARD.head
delete mode 100644 recipes/firewall/files/chain_rules/mangle/FORWARD.tail
delete mode 100644 recipes/firewall/files/chain_rules/mangle/INPUT.head
delete mode 100644 recipes/firewall/files/chain_rules/mangle/INPUT.tail
delete mode 100644 recipes/firewall/files/chain_rules/mangle/POSTROUTING.head
delete mode 100644 recipes/firewall/files/chain_rules/mangle/POSTROUTING.tail
delete mode 100644 recipes/firewall/files/chain_rules/nat/OUTPUT.head
delete mode 100644 recipes/firewall/files/chain_rules/nat/OUTPUT.tail
delete mode 100644 recipes/firewall/files/chain_rules/nat/POSTROUTING.head
delete mode 100644 recipes/firewall/files/chain_rules/nat/POSTROUTING.tail
delete mode 100644 recipes/firewall/files/chain_rules/nat/PREROUTING.head
delete mode 100644 recipes/firewall/files/chain_rules/nat/PREROUTING.tail
delete mode 100644 recipes/firewall/files/chain_rules/raw/OUTPUT.head
delete mode 100644 recipes/firewall/files/chain_rules/raw/OUTPUT.tail
delete mode 100644 recipes/firewall/files/chain_rules/raw/PREROUTING.head
delete mode 100644 recipes/firewall/files/chain_rules/raw/PREROUTING.tail
delete mode 100644 recipes/firewall/files/iptables-update.sh
delete mode 100644 recipes/firewall/manifests/defines.pp
delete mode 100644 recipes/firewall/manifests/init.pp
delete mode 100644 recipes/firewall/templates/rule.erb
diff --git a/recipes/aeolus_recipe/manifests/aeolus.pp b/recipes/aeolus_recipe/manifests/aeolus.pp
index a7496db..fec4265 100644
--- a/recipes/aeolus_recipe/manifests/aeolus.pp
+++ b/recipes/aeolus_recipe/manifests/aeolus.pp
@@ -1,7 +1,5 @@
# Aeolus puppet definitions
-import "firewall"
-
import "postgres"
import "apache"
import "rails"
diff --git a/recipes/aeolus_recipe/manifests/conductor.pp b/recipes/aeolus_recipe/manifests/conductor.pp
index 1d43ce8..cd2934a 100644
--- a/recipes/aeolus_recipe/manifests/conductor.pp
+++ b/recipes/aeolus_recipe/manifests/conductor.pp
@@ -20,11 +20,6 @@ class aeolus::conductor inherits aeolus {
### Setup selinux for deltacloud
selinux::mode{"permissive":}
- ### Setup firewall for deltacloud
- firewall::rule{"http": destination_port => '80' }
- firewall::rule{"https": destination_port => '443'}
- firewall::rule{"ssh": destination_port => '22'}
-
### Start the aeolus services
file {"/var/lib/condor/condor_config.local":
source => "puppet:///modules/aeolus_recipe/condor_config.local",
diff --git a/recipes/firewall/README b/recipes/firewall/README
deleted file mode 100644
index 5fb3acc..0000000
--- a/recipes/firewall/README
+++ /dev/null
@@ -1 +0,0 @@
-Module documentation for firewall
diff --git a/recipes/firewall/files/chain_rules/filter/FORWARD.head b/recipes/firewall/files/chain_rules/filter/FORWARD.head
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/filter/FORWARD.head
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/filter/FORWARD.tail b/recipes/firewall/files/chain_rules/filter/FORWARD.tail
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/filter/FORWARD.tail
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/filter/INPUT.head b/recipes/firewall/files/chain_rules/filter/INPUT.head
deleted file mode 100644
index ca7bbed..0000000
--- a/recipes/firewall/files/chain_rules/filter/INPUT.head
+++ /dev/null
@@ -1,9 +0,0 @@
-# INPUT.head
--P INPUT ACCEPT
-#-i lo -m comment --comment "localhost access" -j ACCEPT
--i lo -j ACCEPT
-#-m state --state RELATED,ESTABLISHED -m comment --comment "All established/related" -j ACCEPT
--m state --state RELATED,ESTABLISHED -j ACCEPT
-# -p icmp -m comment --comment "allow icmp/ping traffic" -j ACCEPT
--p icmp -j ACCEPT
-
diff --git a/recipes/firewall/files/chain_rules/filter/INPUT.tail b/recipes/firewall/files/chain_rules/filter/INPUT.tail
deleted file mode 100644
index 1c983ec..0000000
--- a/recipes/firewall/files/chain_rules/filter/INPUT.tail
+++ /dev/null
@@ -1,5 +0,0 @@
-# INPUT.tail
-# -m comment --comment "Logging" -m limit --limit 3/minute -j LOG --log-prefix "[IPTABLES] INPUT : "
--m limit --limit 3/minute -j LOG --log-prefix "[IPTABLES] INPUT : "
-
--j REJECT
diff --git a/recipes/firewall/files/chain_rules/filter/OUTPUT.head b/recipes/firewall/files/chain_rules/filter/OUTPUT.head
deleted file mode 100644
index 4c40843..0000000
--- a/recipes/firewall/files/chain_rules/filter/OUTPUT.head
+++ /dev/null
@@ -1 +0,0 @@
-# OUTPUT.head
diff --git a/recipes/firewall/files/chain_rules/filter/OUTPUT.tail b/recipes/firewall/files/chain_rules/filter/OUTPUT.tail
deleted file mode 100644
index 9effd41..0000000
--- a/recipes/firewall/files/chain_rules/filter/OUTPUT.tail
+++ /dev/null
@@ -1 +0,0 @@
-# OUTPUT.tail
diff --git a/recipes/firewall/files/chain_rules/mangle/FORWARD.head b/recipes/firewall/files/chain_rules/mangle/FORWARD.head
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/mangle/FORWARD.head
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/mangle/FORWARD.tail b/recipes/firewall/files/chain_rules/mangle/FORWARD.tail
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/mangle/FORWARD.tail
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/mangle/INPUT.head b/recipes/firewall/files/chain_rules/mangle/INPUT.head
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/mangle/INPUT.head
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/mangle/INPUT.tail b/recipes/firewall/files/chain_rules/mangle/INPUT.tail
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/mangle/INPUT.tail
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/mangle/POSTROUTING.head b/recipes/firewall/files/chain_rules/mangle/POSTROUTING.head
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/mangle/POSTROUTING.head
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/mangle/POSTROUTING.tail b/recipes/firewall/files/chain_rules/mangle/POSTROUTING.tail
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/mangle/POSTROUTING.tail
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/nat/OUTPUT.head b/recipes/firewall/files/chain_rules/nat/OUTPUT.head
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/nat/OUTPUT.head
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/nat/OUTPUT.tail b/recipes/firewall/files/chain_rules/nat/OUTPUT.tail
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/nat/OUTPUT.tail
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/nat/POSTROUTING.head b/recipes/firewall/files/chain_rules/nat/POSTROUTING.head
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/nat/POSTROUTING.head
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/nat/POSTROUTING.tail b/recipes/firewall/files/chain_rules/nat/POSTROUTING.tail
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/nat/POSTROUTING.tail
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/nat/PREROUTING.head b/recipes/firewall/files/chain_rules/nat/PREROUTING.head
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/nat/PREROUTING.head
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/nat/PREROUTING.tail b/recipes/firewall/files/chain_rules/nat/PREROUTING.tail
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/nat/PREROUTING.tail
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/raw/OUTPUT.head b/recipes/firewall/files/chain_rules/raw/OUTPUT.head
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/raw/OUTPUT.head
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/raw/OUTPUT.tail b/recipes/firewall/files/chain_rules/raw/OUTPUT.tail
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/raw/OUTPUT.tail
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/raw/PREROUTING.head b/recipes/firewall/files/chain_rules/raw/PREROUTING.head
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/raw/PREROUTING.head
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/chain_rules/raw/PREROUTING.tail b/recipes/firewall/files/chain_rules/raw/PREROUTING.tail
deleted file mode 100644
index 1bb8bf6..0000000
--- a/recipes/firewall/files/chain_rules/raw/PREROUTING.tail
+++ /dev/null
@@ -1 +0,0 @@
-# empty
diff --git a/recipes/firewall/files/iptables-update.sh b/recipes/firewall/files/iptables-update.sh
deleted file mode 100644
index 3911548..0000000
--- a/recipes/firewall/files/iptables-update.sh
+++ /dev/null
@@ -1,199 +0,0 @@
-#!/bin/bash
-
-firewallDir="/usr/share/firewall"
-
-# firewallDir contains a directory for each table (filter, nat, mangle)
-# - each table dir contains a dir for each chain in that table
-# - each chain dir has link files that are iptables snippets
-# - each table dir can contain a CHAIN.head file, which goes in front of the chain
-# - each table dir can contain a CHAIN.tail file, which goes in back of the chain
-# and should set default policy
-#
-# Example firewallDir layout
-# filter
-# INPUT
-# ftp
-# http
-# smb
-# INPUT.head
-# INPUT.tail
-# OUTPUT
-# OUTPUT.head
-# FORWARD
-# nat
-# PREROUTING
-#
-# Any chains not in this tree will be removed from the running config
-
-#oldTable=$(mktemp oldTable.XXXXXX)
-#currentTable=$(mktemp currTable.XXXXXX)
-if [ "$1" == 'DEBUG' ]; then
- DEBUG=1
-else
- DEBUG=0
-fi
-IPTABLES="/sbin/iptables"
-
-# iptables wrapper
-function ipt {
-
- if [ "$DEBUG" -eq 1 ]; then
- echo "DEBUG: running $IPTABLES $@"
- eval $IPTABLES $@
- else
- eval $IPTABLES $@ 2>/dev/null
- fi
-
- retVal="$?"
- return $retVal
-}
-
-function insertEntry {
- table="$1"
- chain="$2"
- entryNum="$3"
- shift; shift; shift
- ENTRY="$@"
-
- # Remove the -A if it's there, we already know the table and chain
- # This will make it easier to create the files, as you can just copy/paste
- # from an iptables-save
- ENTRY=$(echo $ENTRY | sed 's/^-A [0-9a-zA-Z-]* //')
-
- # Insert at the enegrep -v '^([[:space:]]*#|[[:space:]]*$)'d of the new section
- if echo "$ENTRY" | grep -q '^-P'; then
- ipt -t $table $ENTRY
- else
- ipt -t $table -I $chain $entryNum $ENTRY
- fi
-}
-
-function removeComments {
- filename="$1"
- egrep -v '^([[:space:]]*#|[[:space:]]*$)' $filename 2>/dev/null
-}
-
-
-# write out the current firewall
-#iptables-save > $oldTable
-
-# Set up all the tables in advance.
-pushd ${firewallDir} > /dev/null
-for table in *; do
- # A particular table
- if [ -d "$table" ]; then
- pushd "$table" > /dev/null
- for chain in *; do
- if [ ! -d "$chain" ]; then
- # Only directories are valid chains
- continue
- fi
-
- #create the table
- ipt -t $table -N $chain 2> /dev/null
- done
- popd > /dev/null
- fi
-done
-popd > /dev/null
-
-# Put the iptables pieces into the full layout of the table
-pushd ${firewallDir} > /dev/null
-for table in *; do
- if [ -d "$table" ]; then
- pushd "$table" > /dev/null
- for chain in *; do
- if [ ! -d "$chain" ]; then
- # Only directories are valid chains
- continue
- fi
-
- echo "Working on chain $chain in table $table"
- numEntries=0
-
- echo "Adding rules to chain $chain in table $table"
- if [ -f "${chain}.head" ]; then
- # The head of the firewall goes in first.
- while read ENTRY; do
- if echo "$ENTRY" | grep -qv '^-P'; then
- let numEntries="$numEntries + 1"
- fi
- insertEntry $table $chain $numEntries $ENTRY
- done < <( removeComments "${chain}.head" )
- fi
-
- # go into the chain, add all the link files to the firewall
- pushd $chain > /dev/null
- for link in *; do
- while read ENTRY; do
- if echo "$ENTRY" | grep -qv '^-P'; then
- let numEntries="$numEntries + 1"
- fi
- insertEntry $table $chain $numEntries $ENTRY
- done < <( removeComments "$link" )
- done
- popd > /dev/null
-
- if [ -f "$chain.tail" ]; then
- # The tail of the firewall goes in last.
- while read ENTRY; do
- if echo "$ENTRY" | grep -qv '^-P'; then
- let numEntries="$numEntries + 1"
- fi
-
- insertEntry $table $chain $numEntries $ENTRY
- done < <( removeComments "${chain}.tail" )
- fi
-
- # flush out the old rules from this chain
- echo "Cleaning chain $chain in table $table..."
- let oldEntry="$numEntries + 1"
- while ipt -t $table -D $chain $oldEntry; do
- echo -en "."
- done
- echo -en "\n"
- done
- popd > /dev/null
- fi
-done
-popd > /dev/null
-
-# Delete all rules from the chains that shouldn't be there
-pushd ${firewallDir} > /dev/null
-for table in *; do
- pushd "$table" > /dev/null > /dev/null
- for chain in $(iptables-save | sed -n '/^\*'$table'/,/^\*/p' | grep '^:' | cut -d' ' -f1 | sed 's/://'); do
- if [ ! -d "$chain" ]; then
- # Flush the chain
- echo "Flushing rules from chain $chain in table $table"
- ipt -t $table -F $chain
- fi
- done
- popd > /dev/null
-done
-popd > /dev/null
-
-# delete the chains that shouldn't be there
-pushd ${firewallDir} > /dev/null
-for table in filter nat mangle; do
- if [ ! -d "$table" ]; then
- # This table isn't used, clear it
- ipt -t $table -F
- ipt -t $table -X
- else
-
- pushd "$table" > /dev/null
- for chain in $(iptables-save | sed -n '/^\*'$table'/,/^\*/p' | grep '^:' | cut -d' ' -f1 | sed 's/://'); do
- if [ "$chain" == "FORWARD" ]; then
- continue
- fi
- if [ ! -d "$chain" ]; then
- # Delete the chain
- echo "Deleting chain $chain from table $table"
- ipt -t $table -P $chain ACCEPT
- ipt -t $table -X $chain
- fi
- done
- popd > /dev/null
- fi
-done
diff --git a/recipes/firewall/manifests/defines.pp b/recipes/firewall/manifests/defines.pp
deleted file mode 100644
index 871f357..0000000
--- a/recipes/firewall/manifests/defines.pp
+++ /dev/null
@@ -1,77 +0,0 @@
-# usage
-# firewall::rule { 'rulename':
-# chain => "INPUT",
-# table => "filter",
-# source_port => 123423,
-# destination_port => 22,
-# destination => foo.com,
-# source => bar.com,
-# to_ports => "443"
-# action => ACCEPT
-# }
-define firewall::rule (
- $chain = 'INPUT',
- $table = 'filter',
- $comment = '',
- $protocol = 'tcp',
- $source_port = '',
- $destination_port = '',
- $source = '',
- $destination = '',
- $to_ports = '',
- $to_destination = '',
- $modules = [],
- $destination_range = '',
- $not_physdev_bridged = '',
- $source_range = '',
- $out_interface = '',
- $in_interface = '',
- $uid_owner = '',
- $reject_with = '',
- $log_prefix = '',
- $state = '',
- $every = '',
- $mode = '',
- $action = 'ACCEPT'
- ) {
-
- include firewall
-
- $table_path = "${firewall::firewall_dir}/${table}"
- $chain_path = "${firewall::firewall_dir}/${table}/${chain}"
-
- if defined(File["${chain_path}"]) {
- # do nothing
- $trash = ''
- } else {
- file { "${chain_path}":
- ensure => directory,
- purge => true,
- recurse => true,
- require => File["${table_path}"],
- }
- }
-
- $link_path = "$firewall::firewall_dir/${table}/${chain}/${name}"
-
- file { "${link_path}":
- content => template("firewall/rule.erb"),
- notify => Service["firewall"],
- }
-}
-
-define firewall::rule::stub () {
- file {
- "${name}.head":
- name => "${firewall_dir}/${name}.head",
- mode => 0700,
- source => "puppet:///modules/firewall/chain_rules/${name}.head",
- ;
- "${name}.tail":
- name => "${firewall_dir}/${name}.tail",
- mode => 0700,
- source => "puppet:///modules/firewall/chain_rules/${name}.tail",
- ;
- }
-}
-
diff --git a/recipes/firewall/manifests/init.pp b/recipes/firewall/manifests/init.pp
deleted file mode 100644
index c38abc3..0000000
--- a/recipes/firewall/manifests/init.pp
+++ /dev/null
@@ -1,102 +0,0 @@
-import "defines.pp"
-
-class firewall {
-
- $firewall_dir = "/usr/share/firewall"
- package { "iptables":
- ensure => installed,
- }
-
- service { "firewall":
- name => "iptables",
- enable => true,
- hasstatus => true,
- require => [ Package["iptables"], File["iptables-update"] ],
- restart => "/usr/local/bin/iptables-update.sh",
- }
-
- # the reload script (thanks rmonk)
- file { "iptables-update":
- name => "/usr/local/bin/iptables-update.sh",
- mode => 0755,
- source => "puppet:///modules/firewall/iptables-update.sh",
- }
-
- file { "${firewall_dir}":
- ensure => directory,
- mode => 0755,
- }
-
- # create the table directories
- file {
- [
- "${firewall_dir}/filter",
- "${firewall_dir}/filter/INPUT",
- "${firewall_dir}/filter/OUTPUT",
- "${firewall_dir}/filter/FORWARD",
- "${firewall_dir}/nat",
- "${firewall_dir}/nat/PREROUTING",
- "${firewall_dir}/nat/OUTPUT",
- "${firewall_dir}/nat/POSTROUTING",
- "${firewall_dir}/mangle",
- "${firewall_dir}/mangle/FORWARD",
- "${firewall_dir}/mangle/POSTROUTING",
- "${firewall_dir}/mangle/INPUT",
- "${firewall_dir}/raw",
- "${firewall_dir}/raw/PREROUTING",
- "${firewall_dir}/raw/OUTPUT"
- ]:
- ensure => directory,
- notify => Service["firewall"],
- require => File["${firewall_dir}"],
- mode => 0755,
- }
-
- # create the head/tail files -- we tried a recursive resource here but it failed.
- $wrapper_rules = [
- 'filter/INPUT',
- 'filter/OUTPUT',
- 'filter/FORWARD',
- 'nat/PREROUTING',
- 'nat/POSTROUTING',
- 'nat/OUTPUT',
- 'mangle/FORWARD',
- 'mangle/INPUT',
- 'mangle/POSTROUTING',
- 'raw/PREROUTING',
- 'raw/OUTPUT'
- ]
-
- firewall::rule::stub { $wrapper_rules:
- notify => Service["firewall"],
- require => File["${firewall_dir}"],
- }
-
- # relevent execs
- exec { "reload-firewall":
- command => "/usr/local/bin/iptables-update.sh",
- require => File["iptables-update"],
- refreshonly => true,
- }
-}
-
-class firewall::disabled inherits firewall {
- Service["firewall"] {
- ensure => stopped,
- enable => false,
- }
-}
-
-class firewall::ckmtest inherits firewall {
-
- firewall::rule { "NAT":
- table => 'nat',
- chain => 'PREROUTING',
- protocol => 'tcp',
- destination_port => '8443',
- action => 'REDIRECT',
- to_ports => "443",
- comment => "nat rule",
- }
-}
-
diff --git a/recipes/firewall/templates/rule.erb b/recipes/firewall/templates/rule.erb
deleted file mode 100644
index c3ae3f8..0000000
--- a/recipes/firewall/templates/rule.erb
+++ /dev/null
@@ -1,70 +0,0 @@
-<% unless protocol.empty? -%>
--p <%= protocol + " " -%>
-<% end -%>
-<% for m in modules -%>
--m <%= m + " " -%>
-<% end -%>
-<% unless destination_range.empty? -%>
---dst-range <%= destination_range + " " -%>
-<% end -%>
-<% unless source_range.empty? -%>
---src-range <%= source_range + " " -%>
-<% end -%>
-<% unless out_interface.empty? -%>
---out-interface <%= out_interface + " " -%>
-<% end -%>
-<% unless in_interface.empty? -%>
---in-interface <%= in_interface + " " -%>
-<% end -%>
-<% unless source.empty? -%>
---source <%= source + " " -%>
-<% end -%>
-<% unless uid_owner.empty? -%>
---uid-owner <%= uid_owner + " " -%>
-<% end -%>
-<% unless state.empty? -%>
---state <%= state + " " -%>
-<% end -%>
-<% unless mode.empty? -%>
---mode <%= mode + " " -%>
-<% end -%>
-<% unless not_physdev_bridged.empty? -%>
-! --physdev-is-bridged
-<% end -%>
-<% unless every.empty? -%>
---every <%= every + " " -%>
-<% end -%>
-<% unless destination.empty? -%>
---destination <%= destination + " " -%>
-<% end -%>
-<% unless destination_port.empty? -%>
-<% if destination_port =~ /:|,/ -%>
--m multiport --destination-ports <%= destination_port + " " -%>
-<% else -%>
---destination-port <%= destination_port + " " -%>
-<% end -%>
-<% end -%>
-<% unless source_port.empty? -%>
-<% if source_port =~ /:|,/ -%>
--m multiport --source-ports <%= source_port + " " -%>
-<% else -%>
---source-port <%= source_port + " " -%>
-<% end -%>
-<% end -%>
-<% if operatingsystemrelease == '5' -%>
--m comment --comment "<%= comment -%>"<%= " " -%>
-<% end -%>
--j <%= action -%>
-<% unless to_ports.empty? -%>
- --to-ports <%= to_ports + " " -%>
-<% end -%>
-<% unless to_destination.empty? -%>
- --to-destination <%= to_destination + " " -%>
-<% end -%>
-<% unless log_prefix.empty? -%>
---log-prefix <%= log_prefix + " " -%>
-<% end -%>
-<% unless reject_with.empty? -%>
---reject-with <%= reject_with + " " -%>
-<% end -%>
-<%# keep at end %>
--
1.7.2.3
13 years, 1 month
[PATCH conductor] Image import - rake task fix
by Jan Provazník
From: Jan Provaznik <jprovazn(a)redhat.com>
This patch fixes bug in image import rake task - rake task used old provider
account username/password model.
---
src/app/models/image.rb | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/src/app/models/image.rb b/src/app/models/image.rb
index 504a189..923dd23 100644
--- a/src/app/models/image.rb
+++ b/src/app/models/image.rb
@@ -232,7 +232,8 @@ class Image < ActiveRecord::Base
raise "There is not provider with name '#{providername}'"
end
- account = ProviderAccount.new(:provider => provider, :username => username, :password => password)
+ account = ProviderAccount.new(:provider => provider)
+ account.credentials_hash = {:username => username, :password => password}
unless account.valid_credentials?
raise "Invalid credentials for provider '#{providername}'"
--
1.7.4
13 years, 1 month
[PATCH aeolus] Bug 719 / BZ 683986 stop multiple instances at once only stops one
by steve linabery
From: Steve Linabery <slinabery(a)gmail.com>
Added multi_stop method to instances_controller.rb, changed form to send correct params, edited routes.rb to match new path.
---
.../controllers/resources/instances_controller.rb | 55 ++++++++++++++------
src/app/views/resources/instances/_list.haml | 4 +-
src/config/routes.rb | 2 +-
src/features/instance.feature | 14 +++++
src/features/step_definitions/instance_steps.rb | 6 ++-
5 files changed, 61 insertions(+), 20 deletions(-)
diff --git a/src/app/controllers/resources/instances_controller.rb b/src/app/controllers/resources/instances_controller.rb
index f857aa7..7b26383 100644
--- a/src/app/controllers/resources/instances_controller.rb
+++ b/src/app/controllers/resources/instances_controller.rb
@@ -1,6 +1,6 @@
class Resources::InstancesController < ApplicationController
before_filter :require_user, :except => [:can_start, :can_create]
- before_filter :load_instance, :only => [:show, :remove_failed, :key, :stop]
+ before_filter :load_instance, :only => [:show, :key]
before_filter :set_view_vars, :only => [:show, :index]
def index
@@ -106,27 +106,50 @@ class Resources::InstancesController < ApplicationController
redirect_to resources_instance_path(@instance)
end
- def stop
- unless @instance.valid_action?('stop')
- raise ActionError.new("stop is an invalid action.")
- end
+ def multi_stop
+ notices = ""
+ errors = ""
+ Instance.find(params[:instance_selected]).each do |instance|
+ begin
+ require_privilege(Privilege::USE,instance)
+ unless instance.valid_action?('stop')
+ raise ActionError.new("stop is an invalid action.")
+ end
- # not sure if task is used as everything goes through condor
- #permissons check here
- @task = @instance.queue_action(@current_user, 'stop')
- unless @task
- raise ActionError.new("stop cannot be performed on this instance.")
+ # not sure if task is used as everything goes through condor
+ #permissons check here
+ @task = instance.queue_action(@current_user, 'stop')
+ unless @task
+ raise ActionError.new("stop cannot be performed on this instance.")
+ end
+ condormatic_instance_stop(@task)
+ notices << "#{instance.name}: stop action was successfully queued.<br/>"
+ rescue Exception => err
+ errors << "#{instance.name}: " + err + "<br/>"
+ end
end
- condormatic_instance_stop(@task)
- flash[:notice] = "#{(a)instance.name}: stop action was successfully queued."
+ flash[:notice] = notices unless notices == ""
+ flash[:error] = errors unless errors == ""
redirect_to resources_instances_path
end
+
def remove_failed
- raise ActionError.new("remove failed cannot be performed on this instance.") unless
- @instance.state == Instance::STATE_ERROR
- condormatic_instance_reset_error(@instance)
- flash[:notice] = "#{(a)instance.name}: remove failed action was successfully queued."
+ notices = ""
+ errors = ""
+ Instance.find(params[:instance_selected]).each do |instance|
+ begin
+ require_privilege(Privilege::USE,instance)
+ raise ActionError.new("remove failed cannot be performed on this instance.") unless
+ instance.state == Instance::STATE_ERROR
+ condormatic_instance_reset_error(instance)
+ notices << "#{instance.name}: remove failed action was successfully queued."
+ rescue Exception => err
+ errors << "#{instance.name}: " + err + "<br/>"
+ end
+ end
+ flash[:notice] = notices unless notices == ""
+ flash[:error] = errors unless errors == ""
redirect_to resources_instances_path
end
diff --git a/src/app/views/resources/instances/_list.haml b/src/app/views/resources/instances/_list.haml
index b62d9e7..157dc97 100644
--- a/src/app/views/resources/instances/_list.haml
+++ b/src/app/views/resources/instances/_list.haml
@@ -1,5 +1,5 @@
- form_tag do
- = restful_submit_tag 'Stop', 'stop', stop_resources_instances_path, 'GET'
+ = restful_submit_tag 'Stop', 'stop', multi_stop_resources_instances_path, 'GET'
= restful_submit_tag 'Create', 'new', select_template_resources_instances_path, 'GET'
= restful_submit_tag 'Remove failed', 'remove_failed', remove_failed_resources_instances_path, 'GET'
@@ -14,7 +14,7 @@
%tr
%td
- selected = params[:select] == 'all'
- %input{:checked => selected, :name => 'id', :type => 'checkbox', :value => inst.id, :id => "inst_ids_#{inst.id}" }
+ %input{:name => 'instance_selected[]', :type => 'checkbox', :value => inst.id, :id => "instance_checkbox_#{inst.id}", :checked => selected }
= link_to inst.name, resources_instance_path(inst)
%td= inst.state
%td= inst.template.name
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 313dd25..88e3f71 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -35,7 +35,7 @@ ActionController::Routing::Routes.draw do |map|
map.namespace 'resources' do |r|
r.resources :pools, :collection => { :multi_destroy => :delete }
r.resources :deployments
- r.resources :instances, :collection => {:start => :get, :stop => :get, :select_template => :get, :remove_failed => :get, :can_start => :get, :can_create => :get }, :member => {:key => :get}
+ r.resources :instances, :collection => {:start => :get, :multi_stop => :get, :select_template => :get, :remove_failed => :get, :can_start => :get, :can_create => :get }, :member => {:key => :get}
end
map.can_start_instance '/resources/instances/:instance_id/can_start/:provider_account_id', :controller => 'resources/instances', :action => 'can_start', :conditions => { :method => :get }
diff --git a/src/features/instance.feature b/src/features/instance.feature
index 19b80bd..3b4e000 100644
--- a/src/features/instance.feature
+++ b/src/features/instance.feature
@@ -77,6 +77,20 @@ Feature: Mange Instances
Then I should be on the instances page
And I should see "mock1: stop action was successfully queued"
+ Scenario: Stop multiple instances
+ Given there is a "mock1" running instance
+ And there is a "mock2" running instance
+ And there is a "mock3" stopped instance
+ And I am on the instances page
+ When I check "mock1" instance
+ And I check "mock2" instance
+ And I check "mock3" instance
+ And I press "Stop"
+ 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"
+ And I should see "mock3: stop is an invalid action"
+
@tag
Scenario: Search for instances
Given there are the following instances:
diff --git a/src/features/step_definitions/instance_steps.rb b/src/features/step_definitions/instance_steps.rb
index 66e1282..b7daa18 100644
--- a/src/features/step_definitions/instance_steps.rb
+++ b/src/features/step_definitions/instance_steps.rb
@@ -47,6 +47,10 @@ Given /^there is a "([^"]*)" running instance$/ do |name|
Factory :instance, :name => name, :state => Instance::STATE_RUNNING
end
+Given /^there is a "([^"]*)" stopped instance$/ do |name|
+ Factory :instance, :name => name, :state => Instance::STATE_STOPPED
+end
+
Given /^there is an uploaded image for a template$/ do
Factory :provider_image
end
@@ -66,7 +70,7 @@ end
When /^I check "([^"]*)" instance$/ do |name|
inst = Instance.find_by_name(name)
- check("inst_ids_#{inst.id}")
+ check("instance_checkbox_#{inst.id}")
end
Given /^there are the following instances:$/ do |table|
--
1.7.4
13 years, 1 month
Licensing for Aeolus components
by Justin Clift
Hi guys,
Looking at the licensing for the different parts of
Aeolus, we have a range of licenses:
Conductor: GPLv2
Configure: No license specified (?)
Image Factory: No license specified (?)
Image Warehouse: GPLv3+
Oz: LGPLv2.1
It would be beneficial to potential adopters/contributors
to simplify this, done to just one license if possible.
After some internal discussion here, the ASL 2.0 seems
to have a nice mix of simplicity and open source nature.
Would everyone be ok with us adjusting the (above)
Aeolus sub-projects to use that?
Regards and best wishes,
Justin Clift
13 years, 1 month
[PATCH] allow retrying of image build and upload.
by Scott Seago
Signed-off-by: Scott Seago <sseago(a)redhat.com>
---
.../controllers/image_factory/builds_controller.rb | 36 ++++++++++++++++++++
src/app/models/image.rb | 11 ++++++
src/app/models/provider_image.rb | 6 +++
src/app/views/image_factory/templates/_builds.haml | 12 +++++-
src/config/routes.rb | 2 +-
src/spec/controllers/builds_controller_spec.rb | 14 ++++++++
6 files changed, 78 insertions(+), 3 deletions(-)
create mode 100644 src/app/views/image_factory/builds/index.haml
diff --git a/src/app/controllers/image_factory/builds_controller.rb b/src/app/controllers/image_factory/builds_controller.rb
index b6efe81..a9901e5 100644
--- a/src/app/controllers/image_factory/builds_controller.rb
+++ b/src/app/controllers/image_factory/builds_controller.rb
@@ -1,6 +1,9 @@
class ImageFactory::BuildsController < ApplicationController
before_filter [:require_user], :except => [:update_status]
+ def index
+ end
+
def create
@tpl = Template.find(params[:template_id])
check_permission
@@ -43,6 +46,39 @@ class ImageFactory::BuildsController < ApplicationController
# FIXME: is @tpl defined here? do we need check_permission here?
end
+ def retry
+ @tpl = Template.find(params[:template_id])
+ check_permission
+ begin
+ if params[:image_id]
+ image = Image.find(params[:image_id])
+ if image
+ errors = {}
+ warnings = []
+ image.rebuild!
+ flash[:notice] = "Queued rebuild for image #{image.name}"
+ else
+ flash[:warning] = "could not find image #{image_id}"
+ end
+ elsif params[:provider_image_id]
+ provider_image = ProviderImage.find(params[:provider_image_id])
+ if provider_image
+ provider_image.retry_upload!
+ flash[:notice] = "Queued upload for provider image #{provider_image.name}"
+ else
+ flash[:warning] = "could not find provider image #{provider_image_id}"
+ end
+ else
+ flash[:warning] = 'You need to specify either a provider or a provider image'
+ end
+ rescue
+ flash[:warning] = $!.message
+ logger.error $!.message
+ logger.error $!.backtrace.join("\n ")
+ end
+ redirect_to image_factory_template_path(@tpl, :details_tab => 'builds')
+ end
+
def update_status
image = Image.find_by_uuid(params[:uuid])
image = ProviderImage.find_by_uuid(params[:uuid]) unless image
diff --git a/src/app/models/image.rb b/src/app/models/image.rb
index 5e7c994..504a189 100644
--- a/src/app/models/image.rb
+++ b/src/app/models/image.rb
@@ -84,6 +84,17 @@ class Image < ActiveRecord::Base
end
end
+ def rebuild!
+ # TODO: remove this check when we have UI for pushing images
+ if self.provider_type.providers.empty? or not self.provider_type.providers.detect {|p| !p.provider_accounts.empty?}
+ raise "Error: A valid provider and provider account are required to create and build templates"
+ end
+ self.status = STATE_QUEUED
+ self.save!
+ self.provider_images.each {|pimg| pimg.destroy}
+ Delayed::Job.enqueue(BuildJob.new(self.id))
+ end
+
def not_uploaded_providers
uploaded = self.provider_images
Provider.all(:conditions => {:provider_type_id => self.provider_type.id}).select do |p|
diff --git a/src/app/models/provider_image.rb b/src/app/models/provider_image.rb
index aee69a9..23e9d6a 100644
--- a/src/app/models/provider_image.rb
+++ b/src/app/models/provider_image.rb
@@ -37,6 +37,12 @@ class ProviderImage < ActiveRecord::Base
end
end
+ def retry_upload!
+ self.status = STATE_QUEUED
+ self.save!
+ Delayed::Job.enqueue(PushJob.new(self.id))
+ end
+
def warehouse_bucket
'provider_images'
end
diff --git a/src/app/views/image_factory/builds/index.haml b/src/app/views/image_factory/builds/index.haml
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/views/image_factory/templates/_builds.haml b/src/app/views/image_factory/templates/_builds.haml
index 65cbc5a..446ceb2 100644
--- a/src/app/views/image_factory/templates/_builds.haml
+++ b/src/app/views/image_factory/templates/_builds.haml
@@ -19,12 +19,20 @@ Builds for
- else
- @images.each do |img|
%li
- = "#{img.name}-#{img.template.architecture}: #{img.status}"
+ - form_tag(retry_image_factory_builds_path, { :method => :post }) do
+ = "#{img.name}-#{img.template.architecture}: #{img.status}"
+ = hidden_field_tag :template_id, @tpl.id
+ = hidden_field_tag :image_id, img.id
+ = submit_tag "Retry build", :name => "build"
- if img.status == Image::STATE_COMPLETED
%ul
- img.provider_images.each do |pimg|
%li
- = "#{pimg.provider.name}: #{pimg.status}"
+ - form_tag(retry_image_factory_builds_path, { :method => :post }) do
+ = "#{pimg.provider.name}: #{pimg.status}"
+ = hidden_field_tag :template_id, @tpl.id
+ = hidden_field_tag :provider_image_id, img.id
+ = submit_tag "Retry upload", :name => "build"
- unless @tpl.imported
- img.not_uploaded_providers.each do |provider|
%li
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 98bc4f8..a7b0044 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -47,7 +47,7 @@ ActionController::Routing::Routes.draw do |map|
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.connect "/builds/update_status.:format", :controller => :builds, :action => :update_status
- r.resources :builds, :collection => { :delete => :delete, :upload => :get }
+ r.resources :builds, :collection => { :delete => :delete, :upload => :get, :retry => :post }
end
map.namespace 'admin' do |r|
diff --git a/src/spec/controllers/builds_controller_spec.rb b/src/spec/controllers/builds_controller_spec.rb
index a3d7f4d..17fac9c 100644
--- a/src/spec/controllers/builds_controller_spec.rb
+++ b/src/spec/controllers/builds_controller_spec.rb
@@ -53,5 +53,19 @@ describe ImageFactory::BuildsController do
post :create, :template_id => @template.id, :target => ProviderType.find_by_codename("mock").id
end.should change(Image, :count).by(1)
end
+
+ it "retry build should update Image status" do
+ lambda do
+ post :create, :template_id => @template.id, :target => ProviderType.find_by_codename("mock").id
+ end.should change(Image, :count).by(1)
+ @template.images.size.should == 1
+ image = @template.images[0]
+ image.reload.status.should == "queued"
+ post :update_status, :uuid => image.uuid, :status => 'failed'
+ image.reload.status.should == "failed"
+ post :retry, :image_id => image.id, :template_id => @template.id
+ image.reload.status.should == "queued"
+
+ end
end
end
--
1.7.4
13 years, 1 month
Redmine #692
by Tomas Sedovic
This fixes the task #692.
Since this changed things in the factory and condor interfaces, please make
sure that you do a full end-end testing (building a new image, uploading it to
the cloud and starting an instance) when reviewing this.
13 years, 1 month
[PATCH] allow retrying of image build and upload.
by Scott Seago
Signed-off-by: Scott Seago <sseago(a)redhat.com>
---
.../controllers/image_factory/builds_controller.rb | 36 ++++++++++++++++++++
src/app/models/image.rb | 11 ++++++
src/app/models/provider_image.rb | 6 +++
src/app/views/image_factory/templates/_builds.haml | 12 +++++-
src/config/routes.rb | 2 +-
src/spec/controllers/builds_controller_spec.rb | 14 ++++++++
6 files changed, 78 insertions(+), 3 deletions(-)
create mode 100644 src/app/views/image_factory/builds/index.haml
diff --git a/src/app/controllers/image_factory/builds_controller.rb b/src/app/controllers/image_factory/builds_controller.rb
index b6efe81..a9901e5 100644
--- a/src/app/controllers/image_factory/builds_controller.rb
+++ b/src/app/controllers/image_factory/builds_controller.rb
@@ -1,6 +1,9 @@
class ImageFactory::BuildsController < ApplicationController
before_filter [:require_user], :except => [:update_status]
+ def index
+ end
+
def create
@tpl = Template.find(params[:template_id])
check_permission
@@ -43,6 +46,39 @@ class ImageFactory::BuildsController < ApplicationController
# FIXME: is @tpl defined here? do we need check_permission here?
end
+ def retry
+ @tpl = Template.find(params[:template_id])
+ check_permission
+ begin
+ if params[:image_id]
+ image = Image.find(params[:image_id])
+ if image
+ errors = {}
+ warnings = []
+ image.rebuild!
+ flash[:notice] = "Queued rebuild for image #{image.name}"
+ else
+ flash[:warning] = "could not find image #{image_id}"
+ end
+ elsif params[:provider_image_id]
+ provider_image = ProviderImage.find(params[:provider_image_id])
+ if provider_image
+ provider_image.retry_upload!
+ flash[:notice] = "Queued upload for provider image #{provider_image.name}"
+ else
+ flash[:warning] = "could not find provider image #{provider_image_id}"
+ end
+ else
+ flash[:warning] = 'You need to specify either a provider or a provider image'
+ end
+ rescue
+ flash[:warning] = $!.message
+ logger.error $!.message
+ logger.error $!.backtrace.join("\n ")
+ end
+ redirect_to image_factory_template_path(@tpl, :details_tab => 'builds')
+ end
+
def update_status
image = Image.find_by_uuid(params[:uuid])
image = ProviderImage.find_by_uuid(params[:uuid]) unless image
diff --git a/src/app/models/image.rb b/src/app/models/image.rb
index f15f2da..f0434b8 100644
--- a/src/app/models/image.rb
+++ b/src/app/models/image.rb
@@ -84,6 +84,17 @@ class Image < ActiveRecord::Base
end
end
+ def rebuild!
+ # TODO: remove this check when we have UI for pushing images
+ if self.provider_type.providers.empty? or not self.provider_type.providers.detect {|p| !p.provider_accounts.empty?}
+ raise "Error: A valid provider and provider account are required to create and build templates"
+ end
+ self.status = STATE_QUEUED
+ self.save!
+ self.provider_images.each {|pimg| pimg.destroy}
+ Delayed::Job.enqueue(BuildJob.new(self.id))
+ end
+
def not_uploaded_providers
uploaded = self.provider_images
Provider.all(:conditions => {:provider_type_id => self.provider_type.id}).select do |p|
diff --git a/src/app/models/provider_image.rb b/src/app/models/provider_image.rb
index aee69a9..9cc0e23 100644
--- a/src/app/models/provider_image.rb
+++ b/src/app/models/provider_image.rb
@@ -37,6 +37,12 @@ class ProviderImage < ActiveRecord::Base
end
end
+ def retry_upload!
+ self.status = STATE_QUEUED
+ self.save!
+ Delayed::Job.enqueue(BuildJob.new(self.id))
+ end
+
def warehouse_bucket
'provider_images'
end
diff --git a/src/app/views/image_factory/builds/index.haml b/src/app/views/image_factory/builds/index.haml
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/views/image_factory/templates/_builds.haml b/src/app/views/image_factory/templates/_builds.haml
index 65cbc5a..446ceb2 100644
--- a/src/app/views/image_factory/templates/_builds.haml
+++ b/src/app/views/image_factory/templates/_builds.haml
@@ -19,12 +19,20 @@ Builds for
- else
- @images.each do |img|
%li
- = "#{img.name}-#{img.template.architecture}: #{img.status}"
+ - form_tag(retry_image_factory_builds_path, { :method => :post }) do
+ = "#{img.name}-#{img.template.architecture}: #{img.status}"
+ = hidden_field_tag :template_id, @tpl.id
+ = hidden_field_tag :image_id, img.id
+ = submit_tag "Retry build", :name => "build"
- if img.status == Image::STATE_COMPLETED
%ul
- img.provider_images.each do |pimg|
%li
- = "#{pimg.provider.name}: #{pimg.status}"
+ - form_tag(retry_image_factory_builds_path, { :method => :post }) do
+ = "#{pimg.provider.name}: #{pimg.status}"
+ = hidden_field_tag :template_id, @tpl.id
+ = hidden_field_tag :provider_image_id, img.id
+ = submit_tag "Retry upload", :name => "build"
- unless @tpl.imported
- img.not_uploaded_providers.each do |provider|
%li
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 313dd25..54c8ee6 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -46,7 +46,7 @@ ActionController::Routing::Routes.draw do |map|
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.connect "/builds/update_status.:format", :controller => :builds, :action => :update_status
- r.resources :builds, :collection => { :delete => :delete, :upload => :get }
+ r.resources :builds, :collection => { :delete => :delete, :upload => :get, :retry => :post }
end
map.namespace 'admin' do |r|
diff --git a/src/spec/controllers/builds_controller_spec.rb b/src/spec/controllers/builds_controller_spec.rb
index a3d7f4d..17fac9c 100644
--- a/src/spec/controllers/builds_controller_spec.rb
+++ b/src/spec/controllers/builds_controller_spec.rb
@@ -53,5 +53,19 @@ describe ImageFactory::BuildsController do
post :create, :template_id => @template.id, :target => ProviderType.find_by_codename("mock").id
end.should change(Image, :count).by(1)
end
+
+ it "retry build should update Image status" do
+ lambda do
+ post :create, :template_id => @template.id, :target => ProviderType.find_by_codename("mock").id
+ end.should change(Image, :count).by(1)
+ @template.images.size.should == 1
+ image = @template.images[0]
+ image.reload.status.should == "queued"
+ post :update_status, :uuid => image.uuid, :status => 'failed'
+ image.reload.status.should == "failed"
+ post :retry, :image_id => image.id, :template_id => @template.id
+ image.reload.status.should == "queued"
+
+ end
end
end
--
1.7.4
13 years, 1 month
[PATCH conductor] v2 Bug 678390 - some failed provider acct field checks return blank page
by Richard Su
Removed a redundant test.
Check username and password are not blank before calling deltacloud validation.
---
src/app/models/provider_account.rb | 3 +++
src/spec/models/provider_account_spec.rb | 6 ++++++
2 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/src/app/models/provider_account.rb b/src/app/models/provider_account.rb
index 33c7d2e..9858219 100644
--- a/src/app/models/provider_account.rb
+++ b/src/app/models/provider_account.rb
@@ -163,6 +163,9 @@ class ProviderAccount < ActiveRecord::Base
end
def valid_credentials?
+ if credentials_hash['username'].blank? || credentials_hash['password'].blank?
+ return false
+ end
DeltaCloud::valid_credentials?(credentials_hash['username'].to_s, credentials_hash['password'].to_s, provider.url)
end
diff --git a/src/spec/models/provider_account_spec.rb b/src/spec/models/provider_account_spec.rb
index 6845ed2..df49708 100644
--- a/src/spec/models/provider_account_spec.rb
+++ b/src/spec/models/provider_account_spec.rb
@@ -23,6 +23,12 @@ describe ProviderAccount do
invalid_provider_account.credentials_hash = {'username' => "wrong_username", 'password' => "wrong_password"}
invalid_provider_account.should_not be_valid
+ ec2_provider = Factory :ec2_provider
+ invalid_ec2_provider_account = Factory.build(:ec2_provider_account, :provider => ec2_provider)
+ invalid_ec2_provider_account.credentials_hash = {'username' => "", 'password' => nil}
+ invalid_ec2_provider_account.valid_credentials?.should == false
+ invalid_ec2_provider_account.should_not be_valid
+
valid_provider_account = Factory.build(:mock_provider_account, :provider => mock_provider)
valid_provider_account.should be_valid
end
--
1.7.4
13 years, 1 month