components/ruby/puppet/files/solaris/lib/puppet/provider/evs_ipnet/solaris.rb
author Sungmin Lee <sungmin.lee@oracle.com>
Tue, 18 Aug 2015 15:07:30 -0700
changeset 4794 be62c55aa235
permissions -rw-r--r--
PSARC/2015/218 Add EVS support to Puppet 18043918 Add EVS support to Puppet
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4794
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     1
#
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     2
# CDDL HEADER START
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     3
#
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     4
# The contents of this file are subject to the terms of the
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     5
# Common Development and Distribution License (the "License").
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     6
# You may not use this file except in compliance with the License.
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     7
#
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     8
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     9
# or http://www.opensolaris.org/os/licensing.
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    10
# See the License for the specific language governing permissions
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    11
# and limitations under the License.
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    12
#
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    13
# When distributing Covered Code, include this CDDL HEADER in each
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    14
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    15
# If applicable, add the following below this CDDL HEADER, with the
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    16
# fields enclosed by brackets "[]" replaced with your own identifying
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    17
# information: Portions Copyright [yyyy] [name of copyright owner]
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    18
#
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    19
# CDDL HEADER END
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    20
#
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    21
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    22
#
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    23
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    24
#
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    25
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    26
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    27
Puppet::Type.type(:evs_ipnet).provide(:evs_ipnet) do
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    28
    desc "Provider for managing EVS IPnet setup in the Solaris OS"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    29
    confine :operatingsystem => [:solaris]
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    30
    defaultfor :osfamily => :solaris, :kernelrelease => ["5.11", "5.12"]
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    31
    commands :evsadm => "/usr/sbin/evsadm"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    32
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    33
    mk_resource_methods
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    34
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    35
    def initialize(value={})
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    36
        super(value)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    37
        @property_flush = {}
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    38
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    39
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    40
    def self.get_ipnet_prop_list
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    41
        begin
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    42
            ipnet_list = evsadm("show-ipnet", "-c", "-o", 
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    43
                "name,tenant").split("\n")
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    44
        rescue Puppet::ExecutionFailure => e
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    45
            raise Puppet::Error,  "Unable to populate IPnet: \n"\
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    46
                "#{e.inspect}"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    47
        end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    48
        ipnet_list
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    49
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    50
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    51
    def self.get_ipnet_properties(ipnet_name, tenant,  ensure_val)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    52
        ipnet_properties = {}
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    53
        ipnet_fullname = tenant + "/" + ipnet_name
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    54
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    55
        ipnet_properties[:name] = ipnet_fullname
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    56
        ipnet_properties[:ensure] = ensure_val
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    57
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    58
        evsadm("show-ipnetprop", "-f", "tenant=#{tenant}", "-c", "-o",
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    59
            "property,value", ipnet_name).split("\n").collect do |each_ipnet|
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    60
            property, value = each_ipnet.split(":")
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    61
            value = "" if value.nil?
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    62
            case property
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    63
            # read-only properties (settable upon creation)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    64
            when "subnet"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    65
                ipnet_properties[:subnet] = value
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    66
            when "defrouter"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    67
                ipnet_properties[:defrouter] = value
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    68
            when "uuid"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    69
                ipnet_properties[:uuid] = value
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    70
            # read/write property (always updatable)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    71
            when "pool"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    72
                ipnet_properties[:pool] = value
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    73
            end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    74
        end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    75
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    76
        Puppet.debug "IPnet Properties: #{ipnet_properties.inspect}"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    77
        ipnet_properties
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    78
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    79
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    80
    def self.instances
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    81
        get_ipnet_prop_list.collect do |each_ipnet|
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    82
            ipnet, tenant, subnet = each_ipnet.strip.split(":")
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    83
            ipnet_properties = get_ipnet_properties(
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    84
                ipnet, tenant, :present)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    85
            new(ipnet_properties) # Create a provider instance
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    86
        end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    87
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    88
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    89
    def self.prefetch(resources)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    90
        instances.each do |inst|
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    91
            if resource = resources[inst.name]
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    92
                resource.provider = inst
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    93
            end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    94
        end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    95
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    96
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    97
    def exists?
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    98
        @property_hash[:ensure] == :present
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    99
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   100
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   101
    def create
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   102
        # Subnet value is required to create an IPnet instance
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   103
        if @resource[:subnet].nil?
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   104
            raise Puppet::Error, "Subnet value is missing"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   105
        end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   106
        
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   107
        tenant, ipnet_name = get_tenant_and_ipnet_name
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   108
        begin 
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   109
            create_ipnet(tenant, ipnet_name, add_properties(@resource))
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   110
        rescue Puppet::ExecutionFailure => e
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   111
            raise Puppet::Error, "Cannot add the IPnet: \n #{e.inspect}"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   112
        end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   113
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   114
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   115
    def destroy
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   116
        tenant, ipnet_name = get_tenant_and_ipnet_name
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   117
        begin
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   118
            delete_ipnet(tenant, ipnet_name)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   119
        rescue Puppet::ExecutionFailure => e
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   120
            raise Puppet::Error, "Cannot remove the IPnet: \n #{e.inspect}"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   121
        end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   122
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   123
   
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   124
    ## read-only properties (settable upon creation) ##
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   125
    def defrouter=(value)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   126
        raise Puppet::Error, "defrouter property is settable only upon creation"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   127
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   128
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   129
    def subnet=(value)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   130
        raise Puppet::Error, "subnet property is settable only upon creation"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   131
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   132
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   133
    def uuid=(value)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   134
        raise Puppet::Error, "uuid property is settable only upon creation"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   135
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   136
    
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   137
    ## read/write property (always updatable) ##
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   138
    def pool=(value)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   139
        @property_flush[:pool] = value
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   140
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   141
   
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   142
    ## Create IPnet instance ##
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   143
    def create_ipnet(tenant, ipnet_name, properties)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   144
        begin
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   145
            evsadm("add-ipnet", "-T", tenant, properties, ipnet_name)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   146
        rescue Puppet::ExecutionFailure => e
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   147
            # Pass up the exception to upper level
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   148
            raise
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   149
        end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   150
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   151
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   152
    ## Remove IPnet instance ##
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   153
    def delete_ipnet(tenant, ipnet_name)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   154
        begin
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   155
            evsadm("remove-ipnet", "-T", tenant, ipnet_name)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   156
        rescue Puppet::ExecutionFailure => e
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   157
            # Pass up the exception to upper level
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   158
            raise
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   159
        end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   160
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   161
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   162
    ## Set IPnet prop (pool property only) ##
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   163
    def set_ipnet(tenant, ipnet_name, property)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   164
        begin
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   165
            evsadm("set-ipnetprop", "-T", tenant, property, ipnet_name)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   166
        rescue Puppet::ExecutionFailure => e
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   167
            # Pass up the exception to upper level
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   168
            raise
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   169
        end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   170
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   171
    
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   172
    ## Parse the "name" value from user and yield tenant and IPnet name ##
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   173
    def get_tenant_and_ipnet_name
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   174
        fullname = @resource[:name]
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   175
        
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   176
        parsed_val = fullname.strip.split("/")
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   177
        if (parsed_val.length != 3)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   178
            raise Puppet::Error, "Invalid IPnet name"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   179
        end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   180
        tenant, evs, ipnet = parsed_val
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   181
        return tenant, evs + "/" + ipnet
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   182
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   183
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   184
    ## property setter for IPnet creation ##
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   185
    def add_properties(source)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   186
        p = []
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   187
        prop_list = {
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   188
            "defrouter" => source[:defrouter],
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   189
            "pool" => source[:pool],
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   190
            "subnet" => source[:subnet],
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   191
            "uuid" => source[:uuid]
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   192
            }
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   193
        prop_list.each do |key, value|
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   194
            next if (value == nil) || (value == "")
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   195
            p << "#{key}=#{value}"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   196
        end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   197
        return [] if p.empty?
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   198
        properties = Array["-p", p.join(",")]
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   199
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   200
    
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   201
    ## Flush when existing property value is updatable ##
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   202
    def flush
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   203
        tenant, ipnet_name = get_tenant_and_ipnet_name
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   204
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   205
        unless @property_flush.empty?
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   206
        # Update read/write property (pool)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   207
            pool_prop = ["-p", "pool=#{@property_flush[:pool]}"]
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   208
            begin
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   209
                set_ipnet(tenant, ipnet_name, pool_prop)
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   210
            rescue Puppet::ExecutionFailure => e
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   211
                raise Puppet::Error, "Cannot update the pool property. \n" \
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   212
                    "#{e.inspect}"
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   213
            end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   214
        end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   215
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   216
        # Synchronize all the SHOULD values to IS values
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   217
        @property_hash = resource.to_hash
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   218
    end
be62c55aa235 PSARC/2015/218 Add EVS support to Puppet
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   219
end