vmpooler 0.18.0 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/vmpooler.rb +9 -13
- data/lib/vmpooler/api/dashboard.rb +18 -20
- data/lib/vmpooler/api/helpers.rb +11 -13
- data/lib/vmpooler/api/v1.rb +55 -52
- data/lib/vmpooler/metrics/dummy_statsd.rb +0 -3
- data/lib/vmpooler/metrics/graphite.rb +2 -0
- data/lib/vmpooler/metrics/promstats.rb +2 -0
- data/lib/vmpooler/metrics/statsd.rb +5 -3
- data/lib/vmpooler/pool_manager.rb +48 -55
- data/lib/vmpooler/providers/dummy.rb +20 -38
- data/lib/vmpooler/providers/vsphere.rb +18 -27
- data/lib/vmpooler/version.rb +1 -1
- metadata +40 -34
| @@ -1,6 +1,8 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            require 'vmpooler/providers/base'
         | 
| 4 | 
            +
            require 'bigdecimal'
         | 
| 5 | 
            +
            require 'bigdecimal/util'
         | 
| 4 6 |  | 
| 5 7 | 
             
            module Vmpooler
         | 
| 6 8 | 
             
              class PoolManager
         | 
| @@ -49,9 +51,7 @@ module Vmpooler | |
| 49 51 | 
             
                    end
         | 
| 50 52 |  | 
| 51 53 | 
             
                    def folder_configured?(folder_title, base_folder, configured_folders, whitelist)
         | 
| 52 | 
            -
                      if whitelist
         | 
| 53 | 
            -
                        return true if whitelist.include?(folder_title)
         | 
| 54 | 
            -
                      end
         | 
| 54 | 
            +
                      return true if whitelist&.include?(folder_title)
         | 
| 55 55 | 
             
                      return false unless configured_folders.keys.include?(folder_title)
         | 
| 56 56 | 
             
                      return false unless configured_folders[folder_title] == base_folder
         | 
| 57 57 |  | 
| @@ -68,7 +68,7 @@ module Vmpooler | |
| 68 68 | 
             
                        redis.hset("vmpooler__vm__#{vm_name}", 'destroy', Time.now)
         | 
| 69 69 |  | 
| 70 70 | 
             
                        # Auto-expire metadata key
         | 
| 71 | 
            -
                        redis.expire( | 
| 71 | 
            +
                        redis.expire("vmpooler__vm__#{vm_name}", (data_ttl * 60 * 60))
         | 
| 72 72 | 
             
                        redis.exec
         | 
| 73 73 | 
             
                      end
         | 
| 74 74 |  | 
| @@ -203,9 +203,7 @@ module Vmpooler | |
| 203 203 | 
             
                        return
         | 
| 204 204 | 
             
                      end
         | 
| 205 205 | 
             
                      wait_for_host_selection(dc, target, loop_delay, max_age) if target[dc].key?('checking')
         | 
| 206 | 
            -
                      if target[dc].key?('check_time_finished')
         | 
| 207 | 
            -
                        select_target_hosts(target, cluster, datacenter) if now - target[dc]['check_time_finished'] > max_age
         | 
| 208 | 
            -
                      end
         | 
| 206 | 
            +
                      select_target_hosts(target, cluster, datacenter) if target[dc].key?('check_time_finished') && now - target[dc]['check_time_finished'] > max_age
         | 
| 209 207 | 
             
                    end
         | 
| 210 208 |  | 
| 211 209 | 
             
                    def wait_for_host_selection(dc, target, maxloop = 0, loop_delay = 1, max_age = 60)
         | 
| @@ -418,15 +416,15 @@ module Vmpooler | |
| 418 416 | 
             
                      # Determine network device type
         | 
| 419 417 | 
             
                      # All possible device type options here: https://vdc-download.vmware.com/vmwb-repository/dcr-public/98d63b35-d822-47fe-a87a-ddefd469df06/2e3c7b58-f2bd-486e-8bb1-a75eb0640bee/doc/vim.vm.device.VirtualEthernetCard.html
         | 
| 420 418 | 
             
                      network_device =
         | 
| 421 | 
            -
                        if template_vm_network_device. | 
| 419 | 
            +
                        if template_vm_network_device.instance_of? RbVmomi::VIM::VirtualVmxnet2
         | 
| 422 420 | 
             
                          RbVmomi::VIM.VirtualVmxnet2
         | 
| 423 | 
            -
                        elsif template_vm_network_device. | 
| 421 | 
            +
                        elsif template_vm_network_device.instance_of? RbVmomi::VIM::VirtualVmxnet3
         | 
| 424 422 | 
             
                          RbVmomi::VIM.VirtualVmxnet3
         | 
| 425 | 
            -
                        elsif template_vm_network_device. | 
| 423 | 
            +
                        elsif template_vm_network_device.instance_of? RbVmomi::VIM::VirtualE1000
         | 
| 426 424 | 
             
                          RbVmomi::VIM.VirtualE1000
         | 
| 427 | 
            -
                        elsif template_vm_network_device. | 
| 425 | 
            +
                        elsif template_vm_network_device.instance_of? RbVmomi::VIM::VirtualE1000e
         | 
| 428 426 | 
             
                          RbVmomi::VIM.VirtualE1000e
         | 
| 429 | 
            -
                        elsif template_vm_network_device. | 
| 427 | 
            +
                        elsif template_vm_network_device.instance_of? RbVmomi::VIM::VirtualSriovEthernetCard
         | 
| 430 428 | 
             
                          RbVmomi::VIM.VirtualSriovEthernetCard
         | 
| 431 429 | 
             
                        else
         | 
| 432 430 | 
             
                          RbVmomi::VIM.VirtualPCNet32
         | 
| @@ -560,7 +558,7 @@ module Vmpooler | |
| 560 558 | 
             
                      boottime = vm_object.runtime.bootTime if vm_object.runtime&.bootTime
         | 
| 561 559 | 
             
                      powerstate = vm_object.runtime.powerState if vm_object.runtime&.powerState
         | 
| 562 560 |  | 
| 563 | 
            -
                       | 
| 561 | 
            +
                      {
         | 
| 564 562 | 
             
                        'name' => vm_object.name,
         | 
| 565 563 | 
             
                        'hostname' => hostname,
         | 
| 566 564 | 
             
                        'template' => pool_configuration['template'],
         | 
| @@ -568,8 +566,6 @@ module Vmpooler | |
| 568 566 | 
             
                        'boottime' => boottime,
         | 
| 569 567 | 
             
                        'powerstate' => powerstate
         | 
| 570 568 | 
             
                      }
         | 
| 571 | 
            -
             | 
| 572 | 
            -
                      hash
         | 
| 573 569 | 
             
                    end
         | 
| 574 570 |  | 
| 575 571 | 
             
                    # vSphere helper methods
         | 
| @@ -794,7 +790,7 @@ module Vmpooler | |
| 794 790 | 
             
                      }
         | 
| 795 791 |  | 
| 796 792 | 
             
                      folder_object = connection.searchIndex.FindByInventoryPath(propSpecs) # rubocop:disable Naming/VariableName
         | 
| 797 | 
            -
                      return nil unless folder_object. | 
| 793 | 
            +
                      return nil unless folder_object.instance_of? RbVmomi::VIM::Folder
         | 
| 798 794 |  | 
| 799 795 | 
             
                      folder_object
         | 
| 800 796 | 
             
                    end
         | 
| @@ -810,9 +806,7 @@ module Vmpooler | |
| 810 806 | 
             
                    #    the cpu or memory utilization is bigger than the limit param
         | 
| 811 807 | 
             
                    def get_host_utilization(host, model = nil, limit = 90)
         | 
| 812 808 | 
             
                      limit = @config[:config]['utilization_limit'] if @config[:config].key?('utilization_limit')
         | 
| 813 | 
            -
                      if model
         | 
| 814 | 
            -
                        return nil unless host_has_cpu_model?(host, model)
         | 
| 815 | 
            -
                      end
         | 
| 809 | 
            +
                      return nil if model && !host_has_cpu_model?(host, model)
         | 
| 816 810 | 
             
                      return nil if host.runtime.inMaintenanceMode
         | 
| 817 811 | 
             
                      return nil unless host.overallStatus == 'green'
         | 
| 818 812 | 
             
                      return nil unless host.configIssue.empty?
         | 
| @@ -821,9 +815,9 @@ module Vmpooler | |
| 821 815 | 
             
                      memory_utilization = memory_utilization_for host
         | 
| 822 816 |  | 
| 823 817 | 
             
                      return nil if cpu_utilization.nil?
         | 
| 824 | 
            -
                      return nil if cpu_utilization == 0.0
         | 
| 818 | 
            +
                      return nil if cpu_utilization.to_d == 0.0.to_d
         | 
| 825 819 | 
             
                      return nil if memory_utilization.nil?
         | 
| 826 | 
            -
                      return nil if memory_utilization == 0.0
         | 
| 820 | 
            +
                      return nil if memory_utilization.to_d == 0.0.to_d
         | 
| 827 821 |  | 
| 828 822 | 
             
                      return nil if cpu_utilization > limit
         | 
| 829 823 | 
             
                      return nil if memory_utilization > limit
         | 
| @@ -838,8 +832,7 @@ module Vmpooler | |
| 838 832 | 
             
                    def get_host_cpu_arch_version(host)
         | 
| 839 833 | 
             
                      cpu_model = host.hardware.cpuPkg[0].description
         | 
| 840 834 | 
             
                      cpu_model_parts = cpu_model.split
         | 
| 841 | 
            -
                       | 
| 842 | 
            -
                      arch_version
         | 
| 835 | 
            +
                      cpu_model_parts[4]
         | 
| 843 836 | 
             
                    end
         | 
| 844 837 |  | 
| 845 838 | 
             
                    def cpu_utilization_for(host)
         | 
| @@ -931,8 +924,7 @@ module Vmpooler | |
| 931 924 | 
             
                      target_hosts = get_cluster_host_utilization(cluster_object)
         | 
| 932 925 | 
             
                      raise("There is no host candidate in vcenter that meets all the required conditions, check that the cluster has available hosts in a 'green' status, not in maintenance mode and not overloaded CPU and memory'") if target_hosts.empty?
         | 
| 933 926 |  | 
| 934 | 
            -
                       | 
| 935 | 
            -
                      least_used_host
         | 
| 927 | 
            +
                      target_hosts.min[1]
         | 
| 936 928 | 
             
                    end
         | 
| 937 929 |  | 
| 938 930 | 
             
                    def find_cluster(cluster, connection, datacentername)
         | 
| @@ -979,11 +971,10 @@ module Vmpooler | |
| 979 971 | 
             
                    end
         | 
| 980 972 |  | 
| 981 973 | 
             
                    def build_propSpecs(datacenter, folder, vmname) # rubocop:disable Naming/MethodName
         | 
| 982 | 
            -
                       | 
| 974 | 
            +
                      {
         | 
| 983 975 | 
             
                        entity => self,
         | 
| 984 976 | 
             
                        :inventoryPath => "#{datacenter}/vm/#{folder}/#{vmname}"
         | 
| 985 977 | 
             
                      }
         | 
| 986 | 
            -
                      propSpecs # rubocop:disable Naming/VariableName
         | 
| 987 978 | 
             
                    end
         | 
| 988 979 |  | 
| 989 980 | 
             
                    def find_vm(pool_name, vmname, connection)
         | 
    
        data/lib/vmpooler/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: vmpooler
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.18. | 
| 4 | 
            +
              version: 0.18.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Puppet
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020-10 | 
| 11 | 
            +
            date: 2020-11-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: concurrent-ruby
         | 
| @@ -70,100 +70,100 @@ dependencies: | |
| 70 70 | 
             
              name: opentelemetry-api
         | 
| 71 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 72 | 
             
                requirements:
         | 
| 73 | 
            -
                - -  | 
| 73 | 
            +
                - - '='
         | 
| 74 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            -
                    version: 0. | 
| 75 | 
            +
                    version: 0.8.0
         | 
| 76 76 | 
             
              type: :runtime
         | 
| 77 77 | 
             
              prerelease: false
         | 
| 78 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 79 | 
             
                requirements:
         | 
| 80 | 
            -
                - -  | 
| 80 | 
            +
                - - '='
         | 
| 81 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            -
                    version: 0. | 
| 82 | 
            +
                    version: 0.8.0
         | 
| 83 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 84 | 
             
              name: opentelemetry-exporter-jaeger
         | 
| 85 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 86 | 
             
                requirements:
         | 
| 87 | 
            -
                - -  | 
| 87 | 
            +
                - - '='
         | 
| 88 88 | 
             
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            -
                    version: 0. | 
| 89 | 
            +
                    version: 0.8.0
         | 
| 90 90 | 
             
              type: :runtime
         | 
| 91 91 | 
             
              prerelease: false
         | 
| 92 92 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 93 | 
             
                requirements:
         | 
| 94 | 
            -
                - -  | 
| 94 | 
            +
                - - '='
         | 
| 95 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            -
                    version: 0. | 
| 96 | 
            +
                    version: 0.8.0
         | 
| 97 97 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 98 98 | 
             
              name: opentelemetry-instrumentation-concurrent_ruby
         | 
| 99 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 100 100 | 
             
                requirements:
         | 
| 101 | 
            -
                - -  | 
| 101 | 
            +
                - - '='
         | 
| 102 102 | 
             
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            -
                    version: 0. | 
| 103 | 
            +
                    version: 0.8.0
         | 
| 104 104 | 
             
              type: :runtime
         | 
| 105 105 | 
             
              prerelease: false
         | 
| 106 106 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 107 | 
             
                requirements:
         | 
| 108 | 
            -
                - -  | 
| 108 | 
            +
                - - '='
         | 
| 109 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            -
                    version: 0. | 
| 110 | 
            +
                    version: 0.8.0
         | 
| 111 111 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 112 112 | 
             
              name: opentelemetry-instrumentation-redis
         | 
| 113 113 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 114 | 
             
                requirements:
         | 
| 115 | 
            -
                - -  | 
| 115 | 
            +
                - - '='
         | 
| 116 116 | 
             
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            -
                    version: 0. | 
| 117 | 
            +
                    version: 0.8.0
         | 
| 118 118 | 
             
              type: :runtime
         | 
| 119 119 | 
             
              prerelease: false
         | 
| 120 120 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 121 | 
             
                requirements:
         | 
| 122 | 
            -
                - -  | 
| 122 | 
            +
                - - '='
         | 
| 123 123 | 
             
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            -
                    version: 0. | 
| 124 | 
            +
                    version: 0.8.0
         | 
| 125 125 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 126 126 | 
             
              name: opentelemetry-instrumentation-sinatra
         | 
| 127 127 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 128 128 | 
             
                requirements:
         | 
| 129 | 
            -
                - -  | 
| 129 | 
            +
                - - '='
         | 
| 130 130 | 
             
                  - !ruby/object:Gem::Version
         | 
| 131 | 
            -
                    version: 0. | 
| 131 | 
            +
                    version: 0.8.0
         | 
| 132 132 | 
             
              type: :runtime
         | 
| 133 133 | 
             
              prerelease: false
         | 
| 134 134 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 135 135 | 
             
                requirements:
         | 
| 136 | 
            -
                - -  | 
| 136 | 
            +
                - - '='
         | 
| 137 137 | 
             
                  - !ruby/object:Gem::Version
         | 
| 138 | 
            -
                    version: 0. | 
| 138 | 
            +
                    version: 0.8.0
         | 
| 139 139 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 140 140 | 
             
              name: opentelemetry-resource_detectors
         | 
| 141 141 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 142 142 | 
             
                requirements:
         | 
| 143 | 
            -
                - -  | 
| 143 | 
            +
                - - '='
         | 
| 144 144 | 
             
                  - !ruby/object:Gem::Version
         | 
| 145 | 
            -
                    version: 0. | 
| 145 | 
            +
                    version: 0.8.0
         | 
| 146 146 | 
             
              type: :runtime
         | 
| 147 147 | 
             
              prerelease: false
         | 
| 148 148 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 149 149 | 
             
                requirements:
         | 
| 150 | 
            -
                - -  | 
| 150 | 
            +
                - - '='
         | 
| 151 151 | 
             
                  - !ruby/object:Gem::Version
         | 
| 152 | 
            -
                    version: 0. | 
| 152 | 
            +
                    version: 0.8.0
         | 
| 153 153 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 154 154 | 
             
              name: opentelemetry-sdk
         | 
| 155 155 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 156 156 | 
             
                requirements:
         | 
| 157 | 
            -
                - -  | 
| 157 | 
            +
                - - '='
         | 
| 158 158 | 
             
                  - !ruby/object:Gem::Version
         | 
| 159 | 
            -
                    version: 0. | 
| 159 | 
            +
                    version: 0.8.0
         | 
| 160 160 | 
             
              type: :runtime
         | 
| 161 161 | 
             
              prerelease: false
         | 
| 162 162 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 163 163 | 
             
                requirements:
         | 
| 164 | 
            -
                - -  | 
| 164 | 
            +
                - - '='
         | 
| 165 165 | 
             
                  - !ruby/object:Gem::Version
         | 
| 166 | 
            -
                    version: 0. | 
| 166 | 
            +
                    version: 0.8.0
         | 
| 167 167 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 168 168 | 
             
              name: pickup
         | 
| 169 169 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -198,14 +198,20 @@ dependencies: | |
| 198 198 | 
             
                requirements:
         | 
| 199 199 | 
             
                - - "~>"
         | 
| 200 200 | 
             
                  - !ruby/object:Gem::Version
         | 
| 201 | 
            -
                    version: ' | 
| 201 | 
            +
                    version: '5.0'
         | 
| 202 | 
            +
                - - ">="
         | 
| 203 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 204 | 
            +
                    version: 5.0.4
         | 
| 202 205 | 
             
              type: :runtime
         | 
| 203 206 | 
             
              prerelease: false
         | 
| 204 207 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 205 208 | 
             
                requirements:
         | 
| 206 209 | 
             
                - - "~>"
         | 
| 207 210 | 
             
                  - !ruby/object:Gem::Version
         | 
| 208 | 
            -
                    version: ' | 
| 211 | 
            +
                    version: '5.0'
         | 
| 212 | 
            +
                - - ">="
         | 
| 213 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 214 | 
            +
                    version: 5.0.4
         | 
| 209 215 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 210 216 | 
             
              name: rack
         | 
| 211 217 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -384,14 +390,14 @@ dependencies: | |
| 384 390 | 
             
              name: rubocop
         | 
| 385 391 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 386 392 | 
             
                requirements:
         | 
| 387 | 
            -
                - - " | 
| 393 | 
            +
                - - "~>"
         | 
| 388 394 | 
             
                  - !ruby/object:Gem::Version
         | 
| 389 395 | 
             
                    version: '1.0'
         | 
| 390 396 | 
             
              type: :development
         | 
| 391 397 | 
             
              prerelease: false
         | 
| 392 398 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 393 399 | 
             
                requirements:
         | 
| 394 | 
            -
                - - " | 
| 400 | 
            +
                - - "~>"
         | 
| 395 401 | 
             
                  - !ruby/object:Gem::Version
         | 
| 396 402 | 
             
                    version: '1.0'
         | 
| 397 403 | 
             
            - !ruby/object:Gem::Dependency
         |