vmpooler-provider-gce 0.5.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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