HEX
Server: Apache
System: Linux vpshost0650.publiccloud.com.br 4.4.79-grsec-1.lc.x86_64 #1 SMP Wed Aug 2 14:18:21 -03 2017 x86_64
User: bandeirantesbomb3 (10068)
PHP: 8.0.7
Disabled: apache_child_terminate,dl,escapeshellarg,escapeshellcmd,exec,link,mail,openlog,passthru,pcntl_alarm,pcntl_exec,pcntl_fork,pcntl_get_last_error,pcntl_getpriority,pcntl_setpriority,pcntl_signal,pcntl_signal_dispatch,pcntl_sigprocmask,pcntl_sigtimedwait,pcntl_sigwaitinfo,pcntl_strerror,pcntl_wait,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,php_check_syntax,php_strip_whitespace,popen,proc_close,proc_open,shell_exec,symlink,system
Upload Files
File: //proc/self/root/proc/self/root/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/type/zpool.rb
module Puppet
  class Property

    class VDev < Property

      def flatten_and_sort(array)
        array = [array] unless array.is_a? Array
        array.collect { |a| a.split(' ') }.flatten.sort
      end

      def insync?(is)
        return @should == [:absent] if is == :absent

        flatten_and_sort(is) == flatten_and_sort(@should)
      end
    end

    class MultiVDev < VDev
      def insync?(is)
        return @should == [:absent] if is == :absent

        return false unless is.length == @should.length

        is.each_with_index { |list, i| return false unless flatten_and_sort(list) == flatten_and_sort(@should[i]) }

        #if we made it this far we are in sync
        true
      end
    end
  end

  Type.newtype(:zpool) do
    @doc = "Manage zpools. Create and delete zpools. The provider WILL NOT SYNC, only report differences.

      Supports vdevs with mirrors, raidz, logs and spares."

    ensurable

    newproperty(:disk, :array_matching => :all, :parent => Puppet::Property::VDev) do
      desc "The disk(s) for this pool. Can be an array or a space separated string."
    end

    newproperty(:mirror, :array_matching => :all, :parent => Puppet::Property::MultiVDev) do
      desc "List of all the devices to mirror for this pool. Each mirror should be a
      space separated string:

          mirror => [\"disk1 disk2\", \"disk3 disk4\"],

      "

      validate do |value|
        raise ArgumentError, _("mirror names must be provided as string separated, not a comma-separated list") if value.include?(",")
      end
    end

    newproperty(:raidz, :array_matching => :all, :parent => Puppet::Property::MultiVDev) do
      desc "List of all the devices to raid for this pool. Should be an array of
      space separated strings:

          raidz => [\"disk1 disk2\", \"disk3 disk4\"],

      "

      validate do |value|
        raise ArgumentError, _("raid names must be provided as string separated, not a comma-separated list") if value.include?(",")
      end
    end

    newproperty(:spare, :array_matching => :all, :parent => Puppet::Property::VDev) do
      desc "Spare disk(s) for this pool."
    end

    newproperty(:log, :array_matching => :all, :parent => Puppet::Property::VDev) do
      desc "Log disks for this pool. This type does not currently support mirroring of log disks."
    end

    newparam(:pool) do
      desc "The name for this pool."
      isnamevar
    end

    newparam(:raid_parity) do
      desc "Determines parity when using the `raidz` parameter."
    end

    validate do
      has_should = [:disk, :mirror, :raidz].select { |prop| self.should(prop) }
      self.fail _("You cannot specify %{multiple_props} on this type (only one)") % { multiple_props: has_should.join(" and ") } if has_should.length > 1
    end
  end
end