Return-Path: X-Original-To: apmail-deltacloud-dev-archive@www.apache.org Delivered-To: apmail-deltacloud-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 6686BF75F for ; Thu, 4 Apr 2013 13:31:27 +0000 (UTC) Received: (qmail 74196 invoked by uid 500); 4 Apr 2013 13:27:14 -0000 Delivered-To: apmail-deltacloud-dev-archive@deltacloud.apache.org Received: (qmail 57048 invoked by uid 500); 4 Apr 2013 13:26:08 -0000 Mailing-List: contact dev-help@deltacloud.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@deltacloud.apache.org Delivered-To: mailing list dev@deltacloud.apache.org Received: (qmail 52064 invoked by uid 99); 4 Apr 2013 13:24:08 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Apr 2013 13:24:08 +0000 X-ASF-Spam-Status: No, hits=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: local policy) Received: from [116.50.57.190] (HELO cluster-k.mailcontrol.com) (116.50.57.190) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Apr 2013 13:24:01 +0000 Received: from mail1.fujitsu.com.au (mail1.fujitsu.com.au [216.14.192.229]) by rly09k.srv.mailcontrol.com (MailControl) with ESMTP id r34DNWBl006147 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for ; Thu, 4 Apr 2013 14:23:34 +0100 Received: from localhost (localhost.localdomain [127.0.0.1]) by mail1.fujitsu.com.au (Postfix) with ESMTP id 2A12929D652 for ; Fri, 5 Apr 2013 00:23:32 +1100 (EST) X-Virus-Scanned: amavisd-new at mail1.fujitsu.com.au Received: from mail1.fujitsu.com.au ([127.0.0.1]) by localhost (mail1.fujitsu.com.au [127.0.0.1]) (amavisd-new, port 10024) with LMTP id FjjIrODlnU5M for ; Fri, 5 Apr 2013 00:23:32 +1100 (EST) Received: from SYD0633.au.fujitsu.com (unknown [137.172.78.131]) by mail1.fujitsu.com.au (Postfix) with ESMTP id ECFFB29D651 for ; Fri, 5 Apr 2013 00:23:31 +1100 (EST) Received: from mailfilter2.au.fjanz.com (137.172.19.76) by SYD0632.au.fujitsu.com (137.172.78.131) with Microsoft SMTP Server id 8.3.83.0; Fri, 5 Apr 2013 00:23:31 +1100 Received: from RadwareLoad Balancer (137.172.78.70) [137.172.78.70] by mailfilter2.au.fjanz.com - Websense Email Security (7.0.0); Fri, 05 Apr 2013 00:23:31 +1100 Received: from FALEX03.au.fjanz.com ([137.172.72.104]) by SYD0665.au.fjanz.com with Microsoft SMTPSVC(6.0.3790.4675); Fri, 5 Apr 2013 00:23:21 +1100 Received: from localhost ([10.44.213.227]) by FALEX03.au.fjanz.com with Microsoft SMTPSVC(6.0.3790.4675); Fri, 5 Apr 2013 00:23:21 +1100 From: To: Subject: [PATCH] FGCP: advertise and implement cimi system start and stop Date: Fri, 5 Apr 2013 00:23:21 +1100 Message-ID: <1365081801-3540-1-git-send-email-diesk@fast.au.fujitsu.com> X-Mailer: git-send-email 1.8.0.msysgit.0 X-OriginalArrivalTime: 04 Apr 2013 13:23:21.0868 (UTC) FILETIME=[94241CC0:01CE3137] X-SEF-Processed: 7_0_0_00239__2013_04_05_00_23_31 MIME-Version: 1.0 Content-Type: text/plain X-Scanned-By: MailControl 14771.152 (www.mailcontrol.com) on 10.75.0.119 X-Virus-Checked: Checked by ClamAV on apache.org From: Dies Koper --- .../drivers/fgcp/fgcp_driver_cimi_methods.rb | 48 +++++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb b/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb index e147960..fee12d7 100644 --- a/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb +++ b/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb @@ -43,11 +43,12 @@ module Deltacloud::Drivers::Fgcp :machines => { :href => context.system_url("#{vsys_id}/machines") }, :volumes => { :href => context.system_url("#{vsys_id}/volumes") }, :networks => { :href => context.system_url("#{vsys_id}/networks") }, - :addresses => { :href => context.system_url("#{vsys_id}/addresses") } + :addresses => { :href => context.system_url("#{vsys_id}/addresses") }, + :operations => [] ) end systems = systems.select { |s| opts[:id] == s[:id] } if opts[:id] - # now add system state + # now add system state and advertised operations systems.each do |system| vservers = client.list_vservers(system[:id])['vservers'][0]['vserver'] if vservers.nil? @@ -56,11 +57,18 @@ module Deltacloud::Drivers::Fgcp vservers.each do |vserver| state = @@MACHINE_STATE_MAP[client.get_vserver_status(vserver['vserverId'][0])['vserverStatus'][0]] system[:state] ||= state + system[:operations] << { :href => context.system_url("#{system[:id]}/start"), :rel => "http://schemas.dmtf.org/cimi/1/action/start" } if state == 'STOPPED' + system[:operations] << { :href => context.system_url("#{system[:id]}/stop"), :rel => "http://schemas.dmtf.org/cimi/1/action/stop" } if state == 'STARTED' if system[:state] != state system[:state] = 'MIXED' + # this case could have been caused by one machine in capturing state and one in e.g. creating, + # but just advertise both operations to cut it short + system[:operations] << { :href => context.system_url("#{system[:id]}/start"), :rel => "http://schemas.dmtf.org/cimi/1/action/start" } + system[:operations] << { :href => context.system_url("#{system[:id]}/stop"), :rel => "http://schemas.dmtf.org/cimi/1/action/stop" } break end end + system[:operations].uniq! end end systems @@ -83,6 +91,42 @@ module Deltacloud::Drivers::Fgcp delete_firewall(credentials, {:id=>"#{opts[:id]}-S-0001"}) end + def start_system(credentials, opts={}) + safely do + client = new_client(credentials) + context = opts[:env] + vsys_id = opts[:id] + xml = client.list_vservers(vsys_id)['vservers'] + return unless xml and xml[0]['vserver'] + + xml[0]['vserver'].each do |vserver| + begin + client.start_vserver(vserver['vserverId'][0]) + rescue Exception => ex + raise ex if not ex.message =~ /(ALREADY_STARTED|ILLEGAL_STATE).*/ + end + end + end + end + + def stop_system(credentials, opts={}) + safely do + client = new_client(credentials) + context = opts[:env] + vsys_id = opts[:id] + xml = client.list_vservers(vsys_id)['vservers'] + return unless xml and xml[0]['vserver'] + + xml[0]['vserver'].each do |vserver| + begin + client.stop_vserver(vserver['vserverId'][0]) + rescue Exception => ex + raise ex if not ex.message =~ /(ALREADY_STOPPED|ILLEGAL_STATE).*/ + end + end + end + end + def system_machines(credentials, opts={}) safely do client = new_client(credentials) -- 1.8.0.msysgit.0