vmpooler-provider-gce 0.5.0 → 1.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a1cc4681f0151b64579a620b4ad41f6b2304e6e30ed49395bc690d66268face4
4
- data.tar.gz: aef7add3fbd7c9809dc525ca8f909779e4689cd9593eb7a19095b2fc06a8bbe7
3
+ metadata.gz: 27f860db3bb8d1ca4e7280abb91b4f9c22b91b035b24993711fc4e0358ae391b
4
+ data.tar.gz: 75cf0175b0122a255ff8026ab5a4d7b52a092b054bb9299a1f0d34313d7510ba
5
5
  SHA512:
6
- metadata.gz: a1161e83b4d4eef28b00c8da75d2420d1b4a4d88bb40df1fb29450096e5ba18a39baa1467b0519449f6d621fb62a147907f834ba8f15dacca2c3c58e694d7179
7
- data.tar.gz: c88b97da6dda16889cec9d012e867f8cb4b7b2fe8ddc0488d60effe57351d053faa0e68f23ab4fce226255ada921ec3a31c8df3861b93881a5724d82995fcdff
6
+ metadata.gz: 1ff5a190eb5ad2f24dfcf87264d8e254ccaf76f9433fad3ce83f996596a2f6707f3b786d73833d1d57f071827ad4519c54f53c9f58035f367e9afc255dfc33bc
7
+ data.tar.gz: a79d52db51975c9a24bdb8511394ffacf7609586a08a8c27e71190680a6fff9f6998092b5f4a34a91b34d1ee204f6cd1fd2dd181e0fb3eac0c4831ba18f01f46
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'googleauth'
4
- require 'google/apis/compute_v1'
5
- require 'vmpooler/cloud_dns'
6
3
  require 'bigdecimal'
7
4
  require 'bigdecimal/util'
5
+ require 'google/apis/compute_v1'
6
+ require 'googleauth'
7
+ require 'vmpooler/dns/base'
8
8
  require 'vmpooler/providers/base'
9
9
 
10
10
  module Vmpooler
@@ -82,12 +82,9 @@ module Vmpooler
82
82
  return provider_config['machine_type'] if provider_config['machine_type']
83
83
  end
84
84
 
85
- def domain
86
- provider_config['domain']
87
- end
88
-
89
- def dns_zone_resource_name
90
- provider_config['dns_zone_resource_name']
85
+ def domain(pool_name)
86
+ dns_plugin_name = pool_config(pool_name)['dns_plugin']
87
+ dns_config(dns_plugin_name)
91
88
  end
92
89
 
93
90
  # Base methods that are implemented:
@@ -191,7 +188,7 @@ module Vmpooler
191
188
  boot: true,
192
189
  initialize_params: init_params
193
190
  )
194
- append_domain = domain || global_config[:config]['domain']
191
+ append_domain = domain(pool_name)
195
192
  fqdn = "#{new_vmname}.#{append_domain}" if append_domain
196
193
 
197
194
  # Assume all pool config is valid i.e. not missing
@@ -208,9 +205,12 @@ module Vmpooler
208
205
  debug_logger('trigger insert_instance')
209
206
  result = connection.insert_instance(project, zone(pool_name), client)
210
207
  wait_for_operation(project, pool_name, result)
211
- created_instance = get_vm(pool_name, new_vmname)
212
- dns_setup(created_instance)
213
- created_instance
208
+ get_vm(pool_name, new_vmname)
209
+ end
210
+
211
+ def get_vm_ip_address(vm_name, pool_name)
212
+ vm_object = get_vm(pool_name, vm_name)
213
+ vm_object['ip']
214
214
  end
215
215
 
216
216
  # create_disk creates an additional disk for an existing VM. It will name the new
@@ -424,10 +424,8 @@ module Vmpooler
424
424
 
425
425
  unless deleted
426
426
  debug_logger("trigger delete_instance #{vm_name}")
427
- vm_hash = get_vm(pool_name, vm_name)
428
427
  result = connection.delete_instance(project, zone(pool_name), vm_name)
429
428
  wait_for_operation(project, pool_name, result, 10)
430
- dns_teardown(vm_hash)
431
429
  end
432
430
 
433
431
  # list and delete any leftover disk, for instance if they were detached from the instance
@@ -462,10 +460,12 @@ module Vmpooler
462
460
  true
463
461
  end
464
462
 
465
- def vm_ready?(_pool_name, vm_name)
463
+ def vm_ready?(pool_name, vm_name)
464
+ debug_logger('vm_ready?')
466
465
  begin
467
466
  # TODO: we could use a healthcheck resource attached to instance
468
- open_socket(vm_name, domain || global_config[:config]['domain'])
467
+ domain = domain(pool_name)
468
+ open_socket(vm_name, domain)
469
469
  rescue StandardError => _e
470
470
  return false
471
471
  end
@@ -497,9 +497,6 @@ module Vmpooler
497
497
 
498
498
  debug_logger("trigger async delete_instance #{vm.name}")
499
499
  result = connection.delete_instance(project, zone, vm.name)
500
- vm_pool = vm.labels&.key?('pool') ? vm.labels['pool'] : nil
501
- existing_vm = generate_vm_hash(vm, vm_pool)
502
- dns_teardown(existing_vm)
503
500
  result_list << result
504
501
  end
505
502
  # now check they are done
@@ -560,16 +557,6 @@ module Vmpooler
560
557
 
561
558
  # END BASE METHODS
562
559
 
563
- def dns_setup(created_instance)
564
- dns = Vmpooler::PoolManager::CloudDns.new(project, dns_zone_resource_name)
565
- dns.dns_create_or_replace(created_instance)
566
- end
567
-
568
- def dns_teardown(created_instance)
569
- dns = Vmpooler::PoolManager::CloudDns.new(project, dns_zone_resource_name)
570
- dns.dns_teardown(created_instance)
571
- end
572
-
573
560
  def should_be_ignored(item, allowlist)
574
561
  return false if allowlist.nil?
575
562
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module VmpoolerProviderGce
4
- VERSION = '0.5.0'
4
+ VERSION = '1.0.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmpooler-provider-gce
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-06 00:00:00.000000000 Z
11
+ date: 2023-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -49,35 +49,15 @@ dependencies:
49
49
  requirements:
50
50
  - - "~>"
51
51
  - !ruby/object:Gem::Version
52
- version: 0.35.1
53
- name: google-cloud-dns
54
- prerelease: false
55
- type: :runtime
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: 0.35.1
61
- - !ruby/object:Gem::Dependency
62
- requirement: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: 1.3.0
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '2.3'
52
+ version: '3.0'
70
53
  name: vmpooler
71
54
  prerelease: false
72
55
  type: :runtime
73
56
  version_requirements: !ruby/object:Gem::Requirement
74
57
  requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- version: 1.3.0
78
58
  - - "~>"
79
59
  - !ruby/object:Gem::Version
80
- version: '2.3'
60
+ version: '3.0'
81
61
  - !ruby/object:Gem::Dependency
82
62
  requirement: !ruby/object:Gem::Requirement
83
63
  requirements:
@@ -218,7 +198,6 @@ extensions: []
218
198
  extra_rdoc_files: []
219
199
  files:
220
200
  - lib/vmpooler-provider-gce/version.rb
221
- - lib/vmpooler/cloud_dns.rb
222
201
  - lib/vmpooler/providers/gce.rb
223
202
  homepage: https://github.com/puppetlabs/vmpooler-provider-gce
224
203
  licenses:
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'googleauth'
4
- require 'google/cloud/dns'
5
-
6
- module Vmpooler
7
- class PoolManager
8
- # This class interacts with GCP Cloud DNS to create or delete records.
9
- class CloudDns
10
- def initialize(project, dns_zone_resource_name)
11
- @dns = Google::Cloud::Dns.new(project_id: project)
12
- @dns_zone_resource_name = dns_zone_resource_name
13
- end
14
-
15
- def dns_create_or_replace(created_instance)
16
- dns_zone = @dns.zone(@dns_zone_resource_name) if @dns_zone_resource_name
17
- return unless dns_zone && created_instance && created_instance['name'] && created_instance['ip']
18
-
19
- retries = 0
20
- name = created_instance['name']
21
- begin
22
- change = dns_zone.add(name, 'A', 60, [created_instance['ip']])
23
- debug_logger("#{change.id} - #{change.started_at} - #{change.status} DNS address added") if change
24
- rescue Google::Cloud::AlreadyExistsError => _e
25
- # DNS setup is done only for new instances, so in the rare case where a DNS record already exists (it is stale) and we replace it.
26
- # the error is Google::Cloud::AlreadyExistsError: alreadyExists: The resource 'entity.change.additions[0]' named 'instance-8.test.vmpooler.net. (A)' already exists
27
- change = dns_zone.replace(name, 'A', 60, [created_instance['ip']])
28
- debug_logger("#{change.id} - #{change.started_at} - #{change.status} DNS address previously existed and was replaced") if change
29
- rescue Google::Cloud::FailedPreconditionError => e
30
- # this error was experienced intermittently, will retry to see if it can complete successfully
31
- # the error is Google::Cloud::FailedPreconditionError: conditionNotMet: Precondition not met for 'entity.change.deletions[0]'
32
- debug_logger("DNS create failed, retrying error: #{e}")
33
- sleep 5
34
- retry if (retries += 1) < 30
35
- end
36
- end
37
-
38
- def dns_teardown(created_instance)
39
- dns_zone = @dns.zone(@dns_zone_resource_name) if @dns_zone_resource_name
40
- return unless dns_zone && created_instance
41
-
42
- retries = 0
43
- name = created_instance['name']
44
- change = dns_zone.remove(name, 'A')
45
- debug_logger("#{change.id} - #{change.started_at} - #{change.status} DNS address removed") if change
46
- rescue Google::Cloud::FailedPreconditionError => e
47
- # this error was experienced intermittently, will retry to see if it can complete successfully
48
- # the error is Google::Cloud::FailedPreconditionError: conditionNotMet: Precondition not met for 'entity.change.deletions[1]'
49
- debug_logger("DNS teardown failed, retrying error: #{e}")
50
- sleep 5
51
- retry if (retries += 1) < 30
52
- end
53
-
54
- # used in local dev environment, set DEBUG_FLAG=true
55
- # this way the upstream vmpooler manager does not get polluted with logs
56
- def debug_logger(message, send_to_upstream: false)
57
- # the default logger is simple and does not enforce debug levels (the first argument)
58
- puts message if ENV['DEBUG_FLAG']
59
- logger.log('[g]', message) if send_to_upstream
60
- end
61
- end
62
- end
63
- end