You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by di...@fast.au.fujitsu.com on 2013/04/22 17:10:30 UTC

[PATCH] FGCP: changed ids of cimi system and templates to be uri's

From: Dies Koper <di...@fast.au.fujitsu.com>

---
 .../drivers/fgcp/fgcp_driver_cimi_methods.rb       | 32 ++++++++++++----------
 1 file changed, 18 insertions(+), 14 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 fe1f424..477e856 100644
--- a/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb
+++ b/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb
@@ -17,6 +17,8 @@
 #Definition of CIMI methods for the Fgcp driver - separation from deltacloud
 #API Fgcp driver methods
 
+require 'cgi'
+
 module Deltacloud::Drivers::Fgcp
 
   class FgcpDriver < Deltacloud::BaseDriver
@@ -37,7 +39,7 @@ module Deltacloud::Drivers::Fgcp
           vsys_id = vsys['vsysId'][0]
           vsys_description_el = vsys['description']
           CIMI::Model::System.new(
-            :id          => vsys_id,
+            :id          => context.system_url(vsys_id),
             :name        => vsys['vsysName'][0],
             :description => vsys_description_el ? vsys_description_el[0] : nil,
             :machines    => { :href => context.system_machines_url(vsys_id) },
@@ -47,25 +49,26 @@ module Deltacloud::Drivers::Fgcp
             :operations  => []
           )
         end
-        systems = systems.select { |s| opts[:id] == s[:id] } if opts[:id]
+        systems = systems.select { |s| context.system_url(opts[:id]) == s[:id] } if opts[:id]
 
         # now add system state and advertise operations
         systems.each do |system|
-          vservers = client.list_vservers(system[:id])['vservers'][0]['vserver']
+          vsys_id = system[:id].split('/').last
+          vservers = client.list_vservers(vsys_id)['vservers'][0]['vserver']
           if vservers.nil?
-            system[:state] = client.get_vsys_status(system[:id])['vsysStatus'][0] == 'DEPLOYING' ? 'CREATING' : 'MIXED'
+            system[:state] = client.get_vsys_status(vsys_id)['vsysStatus'][0] == 'DEPLOYING' ? 'CREATING' : 'MIXED'
           else
             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'
+              system[:operations] << { :href => context.system_url("#{vsys_id}/start"), :rel => "http://schemas.dmtf.org/cimi/1/action/start" } if state == 'STOPPED'
+              system[:operations] << { :href => context.system_url("#{vsys_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" }
+                system[:operations] << { :href => context.system_url("#{vsys_id}/start"), :rel => "http://schemas.dmtf.org/cimi/1/action/start" }
+                system[:operations] << { :href => context.system_url("#{vsys_id}/stop"), :rel => "http://schemas.dmtf.org/cimi/1/action/stop" }
                 break
               end
             end
@@ -73,8 +76,8 @@ module Deltacloud::Drivers::Fgcp
           end
           # check for special case: in destroy_system the FW is stopped before the system is deleted
           system[:state] = 'DELETING' if ((vservers.nil? and system[:state] != 'CREATING') or system[:state] == 'STOPPED') and
-                                         ['STOPPED', 'STOPPING'].include? client.get_efm_status("#{system[:id]}-S-0001")['efmStatus'][0]
-          system[:operations] << { :href => context.system_url(system[:id]), :rel => "delete" } if system[:state] == 'STOPPED'
+                                         ['STOPPED', 'STOPPING'].include? client.get_efm_status("#{vsys_id}-S-0001")['efmStatus'][0]
+          system[:operations] << { :href => context.system_url(vsys_id), :rel => "delete" } if system[:state] == 'STOPPED'
         end
         systems
       end
@@ -85,7 +88,7 @@ module Deltacloud::Drivers::Fgcp
         client = new_client(credentials)
         name = opts[:name] || "system_#{Time.now.to_s}"
         template = opts[:system_template]
-        template_id = template.id || template.href.to_s.gsub(/.*\/([^\/]+)$/, '\1')
+        template_id = CGI.unescape(template.id.split('/').last)
         vsys_id = client.create_vsys(template_id, name)['vsysId'][0]
         opts[:id] = vsys_id
         systems(credentials, opts).first
@@ -284,14 +287,15 @@ module Deltacloud::Drivers::Fgcp
               }
             end
           end
+          description = desc['description'][0].empty? ? "" : desc['description'][0]
           CIMI::Model::SystemTemplate.new(
-            :id                    => desc['vsysdescriptorId'][0],
+            :id                    => context.system_template_url(CGI.escape(desc['vsysdescriptorId'][0])),
             :name                  => desc['vsysdescriptorName'][0],
-            :description           => desc['description'][0],
+            :description           => description,
             :component_descriptors => components.compact
           )
         end
-        templates = templates.select { |t| opts[:id] == t[:id] } if opts[:id]
+        templates = templates.select { |t| context.system_template_url(CGI.escape(opts[:id])) == t[:id] } if opts[:id]
         templates
       end
     end
-- 
1.8.0.msysgit.0



Re: [PATCH] FGCP: changed ids of cimi system and templates to be uri's

Posted by "marios@redhat.com" <ma...@redhat.com>.
On 22/04/13 19:46, marios@redhat.com wrote:
> On 22/04/13 18:10, diesk@fast.au.fujitsu.com wrote:
>> From: Dies Koper <di...@fast.au.fujitsu.com>
>>
>> ---
>>  .../drivers/fgcp/fgcp_driver_cimi_methods.rb       | 32 ++++++++++++----------
>>  1 file changed, 18 insertions(+), 14 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 fe1f424..477e856 100644
>> --- a/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb
>> +++ b/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb
>> @@ -17,6 +17,8 @@
>>  #Definition of CIMI methods for the Fgcp driver - separation from deltacloud
>>  #API Fgcp driver methods
>>  
>> +require 'cgi'
>> +
> 
> ACK - btw where are you using 'cgi' (or is it for future use)?
> 

never mind - seen it now thanks :) (CGI.escape/unescape)

> 
> 
>>  module Deltacloud::Drivers::Fgcp
>>  
>>    class FgcpDriver < Deltacloud::BaseDriver
>> @@ -37,7 +39,7 @@ module Deltacloud::Drivers::Fgcp
>>            vsys_id = vsys['vsysId'][0]
>>            vsys_description_el = vsys['description']
>>            CIMI::Model::System.new(
>> -            :id          => vsys_id,
>> +            :id          => context.system_url(vsys_id),
>>              :name        => vsys['vsysName'][0],
>>              :description => vsys_description_el ? vsys_description_el[0] : nil,
>>              :machines    => { :href => context.system_machines_url(vsys_id) },
>> @@ -47,25 +49,26 @@ module Deltacloud::Drivers::Fgcp
>>              :operations  => []
>>            )
>>          end
>> -        systems = systems.select { |s| opts[:id] == s[:id] } if opts[:id]
>> +        systems = systems.select { |s| context.system_url(opts[:id]) == s[:id] } if opts[:id]
>>  
>>          # now add system state and advertise operations
>>          systems.each do |system|
>> -          vservers = client.list_vservers(system[:id])['vservers'][0]['vserver']
>> +          vsys_id = system[:id].split('/').last
>> +          vservers = client.list_vservers(vsys_id)['vservers'][0]['vserver']
>>            if vservers.nil?
>> -            system[:state] = client.get_vsys_status(system[:id])['vsysStatus'][0] == 'DEPLOYING' ? 'CREATING' : 'MIXED'
>> +            system[:state] = client.get_vsys_status(vsys_id)['vsysStatus'][0] == 'DEPLOYING' ? 'CREATING' : 'MIXED'
>>            else
>>              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'
>> +              system[:operations] << { :href => context.system_url("#{vsys_id}/start"), :rel => "http://schemas.dmtf.org/cimi/1/action/start" } if state == 'STOPPED'
>> +              system[:operations] << { :href => context.system_url("#{vsys_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" }
>> +                system[:operations] << { :href => context.system_url("#{vsys_id}/start"), :rel => "http://schemas.dmtf.org/cimi/1/action/start" }
>> +                system[:operations] << { :href => context.system_url("#{vsys_id}/stop"), :rel => "http://schemas.dmtf.org/cimi/1/action/stop" }
>>                  break
>>                end
>>              end
>> @@ -73,8 +76,8 @@ module Deltacloud::Drivers::Fgcp
>>            end
>>            # check for special case: in destroy_system the FW is stopped before the system is deleted
>>            system[:state] = 'DELETING' if ((vservers.nil? and system[:state] != 'CREATING') or system[:state] == 'STOPPED') and
>> -                                         ['STOPPED', 'STOPPING'].include? client.get_efm_status("#{system[:id]}-S-0001")['efmStatus'][0]
>> -          system[:operations] << { :href => context.system_url(system[:id]), :rel => "delete" } if system[:state] == 'STOPPED'
>> +                                         ['STOPPED', 'STOPPING'].include? client.get_efm_status("#{vsys_id}-S-0001")['efmStatus'][0]
>> +          system[:operations] << { :href => context.system_url(vsys_id), :rel => "delete" } if system[:state] == 'STOPPED'
>>          end
>>          systems
>>        end
>> @@ -85,7 +88,7 @@ module Deltacloud::Drivers::Fgcp
>>          client = new_client(credentials)
>>          name = opts[:name] || "system_#{Time.now.to_s}"
>>          template = opts[:system_template]
>> -        template_id = template.id || template.href.to_s.gsub(/.*\/([^\/]+)$/, '\1')
>> +        template_id = CGI.unescape(template.id.split('/').last)
>>          vsys_id = client.create_vsys(template_id, name)['vsysId'][0]
>>          opts[:id] = vsys_id
>>          systems(credentials, opts).first
>> @@ -284,14 +287,15 @@ module Deltacloud::Drivers::Fgcp
>>                }
>>              end
>>            end
>> +          description = desc['description'][0].empty? ? "" : desc['description'][0]
>>            CIMI::Model::SystemTemplate.new(
>> -            :id                    => desc['vsysdescriptorId'][0],
>> +            :id                    => context.system_template_url(CGI.escape(desc['vsysdescriptorId'][0])),
>>              :name                  => desc['vsysdescriptorName'][0],
>> -            :description           => desc['description'][0],
>> +            :description           => description,
>>              :component_descriptors => components.compact
>>            )
>>          end
>> -        templates = templates.select { |t| opts[:id] == t[:id] } if opts[:id]
>> +        templates = templates.select { |t| context.system_template_url(CGI.escape(opts[:id])) == t[:id] } if opts[:id]
>>          templates
>>        end
>>      end
>>
> 


Re: [PATCH] FGCP: changed ids of cimi system and templates to be uri's

Posted by "marios@redhat.com" <ma...@redhat.com>.
On 22/04/13 18:10, diesk@fast.au.fujitsu.com wrote:
> From: Dies Koper <di...@fast.au.fujitsu.com>
> 
> ---
>  .../drivers/fgcp/fgcp_driver_cimi_methods.rb       | 32 ++++++++++++----------
>  1 file changed, 18 insertions(+), 14 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 fe1f424..477e856 100644
> --- a/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb
> +++ b/server/lib/deltacloud/drivers/fgcp/fgcp_driver_cimi_methods.rb
> @@ -17,6 +17,8 @@
>  #Definition of CIMI methods for the Fgcp driver - separation from deltacloud
>  #API Fgcp driver methods
>  
> +require 'cgi'
> +

ACK - btw where are you using 'cgi' (or is it for future use)?



>  module Deltacloud::Drivers::Fgcp
>  
>    class FgcpDriver < Deltacloud::BaseDriver
> @@ -37,7 +39,7 @@ module Deltacloud::Drivers::Fgcp
>            vsys_id = vsys['vsysId'][0]
>            vsys_description_el = vsys['description']
>            CIMI::Model::System.new(
> -            :id          => vsys_id,
> +            :id          => context.system_url(vsys_id),
>              :name        => vsys['vsysName'][0],
>              :description => vsys_description_el ? vsys_description_el[0] : nil,
>              :machines    => { :href => context.system_machines_url(vsys_id) },
> @@ -47,25 +49,26 @@ module Deltacloud::Drivers::Fgcp
>              :operations  => []
>            )
>          end
> -        systems = systems.select { |s| opts[:id] == s[:id] } if opts[:id]
> +        systems = systems.select { |s| context.system_url(opts[:id]) == s[:id] } if opts[:id]
>  
>          # now add system state and advertise operations
>          systems.each do |system|
> -          vservers = client.list_vservers(system[:id])['vservers'][0]['vserver']
> +          vsys_id = system[:id].split('/').last
> +          vservers = client.list_vservers(vsys_id)['vservers'][0]['vserver']
>            if vservers.nil?
> -            system[:state] = client.get_vsys_status(system[:id])['vsysStatus'][0] == 'DEPLOYING' ? 'CREATING' : 'MIXED'
> +            system[:state] = client.get_vsys_status(vsys_id)['vsysStatus'][0] == 'DEPLOYING' ? 'CREATING' : 'MIXED'
>            else
>              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'
> +              system[:operations] << { :href => context.system_url("#{vsys_id}/start"), :rel => "http://schemas.dmtf.org/cimi/1/action/start" } if state == 'STOPPED'
> +              system[:operations] << { :href => context.system_url("#{vsys_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" }
> +                system[:operations] << { :href => context.system_url("#{vsys_id}/start"), :rel => "http://schemas.dmtf.org/cimi/1/action/start" }
> +                system[:operations] << { :href => context.system_url("#{vsys_id}/stop"), :rel => "http://schemas.dmtf.org/cimi/1/action/stop" }
>                  break
>                end
>              end
> @@ -73,8 +76,8 @@ module Deltacloud::Drivers::Fgcp
>            end
>            # check for special case: in destroy_system the FW is stopped before the system is deleted
>            system[:state] = 'DELETING' if ((vservers.nil? and system[:state] != 'CREATING') or system[:state] == 'STOPPED') and
> -                                         ['STOPPED', 'STOPPING'].include? client.get_efm_status("#{system[:id]}-S-0001")['efmStatus'][0]
> -          system[:operations] << { :href => context.system_url(system[:id]), :rel => "delete" } if system[:state] == 'STOPPED'
> +                                         ['STOPPED', 'STOPPING'].include? client.get_efm_status("#{vsys_id}-S-0001")['efmStatus'][0]
> +          system[:operations] << { :href => context.system_url(vsys_id), :rel => "delete" } if system[:state] == 'STOPPED'
>          end
>          systems
>        end
> @@ -85,7 +88,7 @@ module Deltacloud::Drivers::Fgcp
>          client = new_client(credentials)
>          name = opts[:name] || "system_#{Time.now.to_s}"
>          template = opts[:system_template]
> -        template_id = template.id || template.href.to_s.gsub(/.*\/([^\/]+)$/, '\1')
> +        template_id = CGI.unescape(template.id.split('/').last)
>          vsys_id = client.create_vsys(template_id, name)['vsysId'][0]
>          opts[:id] = vsys_id
>          systems(credentials, opts).first
> @@ -284,14 +287,15 @@ module Deltacloud::Drivers::Fgcp
>                }
>              end
>            end
> +          description = desc['description'][0].empty? ? "" : desc['description'][0]
>            CIMI::Model::SystemTemplate.new(
> -            :id                    => desc['vsysdescriptorId'][0],
> +            :id                    => context.system_template_url(CGI.escape(desc['vsysdescriptorId'][0])),
>              :name                  => desc['vsysdescriptorName'][0],
> -            :description           => desc['description'][0],
> +            :description           => description,
>              :component_descriptors => components.compact
>            )
>          end
> -        templates = templates.select { |t| opts[:id] == t[:id] } if opts[:id]
> +        templates = templates.select { |t| context.system_template_url(CGI.escape(opts[:id])) == t[:id] } if opts[:id]
>          templates
>        end
>      end
>