components/ruby/puppet/files/solaris/lib/puppet/provider/evs_vport/solaris.rb
changeset 5438 c068f8c677e8
parent 5437 449f3459d285
child 5439 a006e5bb8577
--- a/components/ruby/puppet/files/solaris/lib/puppet/provider/evs_vport/solaris.rb	Wed Feb 10 16:31:24 2016 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,257 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
-#
-
-
-Puppet::Type.type(:evs_vport).provide(:evs_vport) do
-    desc "Provider for managing EVS VPort setup in the Solaris OS"
-    confine :operatingsystem => [:solaris]
-    defaultfor :osfamily => :solaris, :kernelrelease => ["5.11", "5.12"]
-    commands :evsadm => "/usr/sbin/evsadm"
-
-    mk_resource_methods
-
-    def initialize(value={})
-        super(value)
-        @property_flush = {}
-    end
-
-    def self.get_vport_list
-        begin
-            vport_list = evsadm("show-vport", "-c", "-o", 
-                "name,tenant,status").split("\n")
-        rescue Puppet::ExecutionFailure => e
-            raise Puppet::Error, "unable to populate VPort instances: \n" \
-                "#{e.inspect}"
-            return nil
-        end
-        vport_list
-    end
-   
-    def self.get_vport_properties(vport, tenant, status, ensure_val)
-        vport_props = {}
-        vport_fullname = tenant + "/" + vport
-        vport_props[:name] = vport_fullname
-        vport_props[:status] = status
-        vport_props[:ensure] = ensure_val
-        
-        evsadm("show-vportprop", "-f", "tenant=#{tenant}", "-c", "-o",
-            "property,value", vport).split("\n").collect do |each_prop|
-            property, value = each_prop.split(":", 2)
-            value = "" if value.nil?
-            case property
-            # read/write properties (always updatable)
-            when "cos"
-                vport_props[:cos] = value
-            when "maxbw"
-                vport_props[:maxbw] = value
-            when "priority"
-                vport_props[:priority] = value
-            when "protection"
-                vport_props[:protection] = value
-            # read-only properties (settable upon creation)
-            when "ipaddr"
-                vport_props[:ipaddr] = value
-            when "macaddr"
-                # macaddr ":" appears to be "\:". change it to ":"
-                vport_props[:macaddr] = value.gsub! "\\:", ":"
-            when "uuid"
-                vport_props[:uuid] = value
-            end
-        end
-
-        Puppet.debug "VPort properties: #{vport_props.inspect}"
-        vport_props
-    end
-
-    def self.instances
-        get_vport_list.collect do |each_vport|
-            vport, tenant, status = each_vport.strip.split(":")
-            vport_props = get_vport_properties(vport, tenant, status, :present)
-            new(vport_props) # Create a provider instance
-        end
-    end        
-        
-    def self.prefetch(resources)
-        instances.each do |inst|
-            if resource = resources[inst.name]
-                resource.provider = inst
-            end
-        end
-    end
-
-    def exists?
-        @property_hash[:ensure] == :present
-    end
-
-    def create
-        tenant, vport = get_tenant_and_vport_name
-        begin
-            create_vport(tenant, vport, add_properties(@resource))
-        rescue Puppet::ExecutionFailure => e
-            raise Puppet::Error, "Cannot add VPort: \n #{e.inspect}"
-        end
-    end
-
-    def destroy
-        tenant, vport = get_tenant_and_vport_name
-        begin
-            delete_vport(tenant, vport)
-        rescue Puppet::ExecutionFailure => e
-            raise Puppet::Error, "Cannot remove VPort: \n #{e.inspect}"
-        end
-    end
-
-    def reset
-        tenant, vport = get_tenant_and_vport_name
-        begin
-            evsadm("reset-vport", "-T", tenant, vport)
-        rescue Puppet::ExecutionFailure => e
-            raise Puppet::Error, "Cannot reset VPort: \n #{e.inspect}"
-        end
-
-        @resource[:ensure] = :present
-        Puppet::notice "The VPort has been successfully reset."
-    end
-    
-    ### Define Setters ###
-    ## read/write properties (always updatable) ##
-    def cos=(value)
-        @property_flush[:cos] = value
-    end
-
-    def maxbw=(value)
-        @property_flush[:maxbw] = value
-    end
-    
-    def priority=(value)
-        @property_flush[:priority] = value
-    end
-    
-    def protection=(value)
-        @property_flush[:protection] = value
-    end
-
-    ## read-only properties (settable upon creation) ##
-    def ipaddr=(value)
-        raise Puppet::Error, "ipaddr property is settable only upon creation"
-    end
-
-    def macaddr=(value)
-        raise Puppet::Error, "macaddr property is settable only upon creation"
-    end
-
-    def uuid=(value)
-        raise Puppet::Error, "uuid property is settable only upon creation"
-    end
-
-    # Add VPort Instance
-    def create_vport(tenant, vport, properties)
-        begin
-            evsadm("add-vport", "-T", tenant, properties, vport)
-        rescue Puppet::ExecutionFailure => e
-            # Pass up the exception to upper level
-            raise
-        end
-    end
-
-    # Remove Vport Instance
-    def delete_vport(tenant, vport)
-        begin
-            evsadm("remove-vport", "-T", tenant, vport)
-        rescue Puppet::ExecutionFailure => e
-            # Pass up the exception to upper level
-            raise
-        end
-    end
-    
-    # set read/write property 
-    def set_vportprop(tenant, vport, property)
-        begin
-            evsadm("set-vportprop", "-T", tenant, property, vport)
-        rescue Puppet::ExecutionFailure => e
-            # Pass up the exception to upper level
-            raise
-        end
-    end
-
-    # Parse the "name" value from user and yield tenant and vport name
-    def get_tenant_and_vport_name
-        fullname = @resource[:name]
-
-        return [] if fullname == nil
-        parsed_val = fullname.strip.split("/")
-        if (parsed_val.length != 3)
-            raise Puppet::Error, "Invalid VPort name #{@resource[:name]} \n" \
-                "Name convention must be <tenant>/<evs>/<vport>"
-        end
-        tenant, evs, vport = parsed_val
-        return tenant, evs + "/" + vport
-    end
-
-    # property setter for vport creation
-    def add_properties(source)
-        p = []
-        if source[:ipaddr] != nil
-            source[:ipaddr] = source[:ipaddr].split('/')[0]
-        end
-        prop_list = {
-            "cos" => source[:cos], 
-            "maxbw" => source[:maxbw], 
-            "priority" => source[:priority],
-            "protection" => source[:protection],
-            "ipaddr" => source[:ipaddr],
-            "macaddr" => source[:macaddr],
-            "uuid" => source[:uuid]
-        }
-        prop_list.each do |key, value|
-            next if (value == "") || (value == nil)
-            p << "#{key}=#{value}"
-        end
-        return [] if p.empty?
-        properties = Array["-p", p.join(",")]
-    end
-
-    # Update property change
-    def flush
-        tenant, vport = get_tenant_and_vport_name
-       
-        # Update property values when specified
-        unless @property_flush.empty?
-            # update multiple property values iteratively
-            @property_flush.each do |key, value|
-                prop = ["-p", "#{key}=#{value}"]
-                begin
-                    set_vportprop(tenant, vport, prop)
-                rescue Puppet::ExecutionFailure => e
-                    raise Puppet::Error, "Cannot update the property " \
-                        "#{key}=#{value}.\n#{e.inspect}"
-                end
-            end
-        end
-
-        # Synchronize all the SHOULD values to IS values
-        @property_hash = resource.to_hash
-    end
-end