--- a/components/ruby/puppet/files/solaris/lib/puppet/provider/evs_ipnet/solaris.rb Wed Feb 10 16:31:24 2016 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,219 +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_ipnet).provide(:evs_ipnet) do
- desc "Provider for managing EVS IPnet 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_ipnet_prop_list
- begin
- ipnet_list = evsadm("show-ipnet", "-c", "-o",
- "name,tenant").split("\n")
- rescue Puppet::ExecutionFailure => e
- raise Puppet::Error, "Unable to populate IPnet: \n"\
- "#{e.inspect}"
- end
- ipnet_list
- end
-
- def self.get_ipnet_properties(ipnet_name, tenant, ensure_val)
- ipnet_properties = {}
- ipnet_fullname = tenant + "/" + ipnet_name
-
- ipnet_properties[:name] = ipnet_fullname
- ipnet_properties[:ensure] = ensure_val
-
- evsadm("show-ipnetprop", "-f", "tenant=#{tenant}", "-c", "-o",
- "property,value", ipnet_name).split("\n").collect do |each_ipnet|
- property, value = each_ipnet.split(":")
- value = "" if value.nil?
- case property
- # read-only properties (settable upon creation)
- when "subnet"
- ipnet_properties[:subnet] = value
- when "defrouter"
- ipnet_properties[:defrouter] = value
- when "uuid"
- ipnet_properties[:uuid] = value
- # read/write property (always updatable)
- when "pool"
- ipnet_properties[:pool] = value
- end
- end
-
- Puppet.debug "IPnet Properties: #{ipnet_properties.inspect}"
- ipnet_properties
- end
-
- def self.instances
- get_ipnet_prop_list.collect do |each_ipnet|
- ipnet, tenant, subnet = each_ipnet.strip.split(":")
- ipnet_properties = get_ipnet_properties(
- ipnet, tenant, :present)
- new(ipnet_properties) # 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
- # Subnet value is required to create an IPnet instance
- if @resource[:subnet].nil?
- raise Puppet::Error, "Subnet value is missing"
- end
-
- tenant, ipnet_name = get_tenant_and_ipnet_name
- begin
- create_ipnet(tenant, ipnet_name, add_properties(@resource))
- rescue Puppet::ExecutionFailure => e
- raise Puppet::Error, "Cannot add the IPnet: \n #{e.inspect}"
- end
- end
-
- def destroy
- tenant, ipnet_name = get_tenant_and_ipnet_name
- begin
- delete_ipnet(tenant, ipnet_name)
- rescue Puppet::ExecutionFailure => e
- raise Puppet::Error, "Cannot remove the IPnet: \n #{e.inspect}"
- end
- end
-
- ## read-only properties (settable upon creation) ##
- def defrouter=(value)
- raise Puppet::Error, "defrouter property is settable only upon creation"
- end
-
- def subnet=(value)
- raise Puppet::Error, "subnet property is settable only upon creation"
- end
-
- def uuid=(value)
- raise Puppet::Error, "uuid property is settable only upon creation"
- end
-
- ## read/write property (always updatable) ##
- def pool=(value)
- @property_flush[:pool] = value
- end
-
- ## Create IPnet instance ##
- def create_ipnet(tenant, ipnet_name, properties)
- begin
- evsadm("add-ipnet", "-T", tenant, properties, ipnet_name)
- rescue Puppet::ExecutionFailure => e
- # Pass up the exception to upper level
- raise
- end
- end
-
- ## Remove IPnet instance ##
- def delete_ipnet(tenant, ipnet_name)
- begin
- evsadm("remove-ipnet", "-T", tenant, ipnet_name)
- rescue Puppet::ExecutionFailure => e
- # Pass up the exception to upper level
- raise
- end
- end
-
- ## Set IPnet prop (pool property only) ##
- def set_ipnet(tenant, ipnet_name, property)
- begin
- evsadm("set-ipnetprop", "-T", tenant, property, ipnet_name)
- rescue Puppet::ExecutionFailure => e
- # Pass up the exception to upper level
- raise
- end
- end
-
- ## Parse the "name" value from user and yield tenant and IPnet name ##
- def get_tenant_and_ipnet_name
- fullname = @resource[:name]
-
- parsed_val = fullname.strip.split("/")
- if (parsed_val.length != 3)
- raise Puppet::Error, "Invalid IPnet name"
- end
- tenant, evs, ipnet = parsed_val
- return tenant, evs + "/" + ipnet
- end
-
- ## property setter for IPnet creation ##
- def add_properties(source)
- p = []
- prop_list = {
- "defrouter" => source[:defrouter],
- "pool" => source[:pool],
- "subnet" => source[:subnet],
- "uuid" => source[:uuid]
- }
- prop_list.each do |key, value|
- next if (value == nil) || (value == "")
- p << "#{key}=#{value}"
- end
- return [] if p.empty?
- properties = Array["-p", p.join(",")]
- end
-
- ## Flush when existing property value is updatable ##
- def flush
- tenant, ipnet_name = get_tenant_and_ipnet_name
-
- unless @property_flush.empty?
- # Update read/write property (pool)
- pool_prop = ["-p", "pool=#{@property_flush[:pool]}"]
- begin
- set_ipnet(tenant, ipnet_name, pool_prop)
- rescue Puppet::ExecutionFailure => e
- raise Puppet::Error, "Cannot update the pool property. \n" \
- "#{e.inspect}"
- end
- end
-
- # Synchronize all the SHOULD values to IS values
- @property_hash = resource.to_hash
- end
-end