Module: CemAcpt::Platform::Mixin::Gcp

Defined in:
lib/cem_acpt/platform/gcp.rb

Instance Method Summary collapse

Instance Method Details

#gcp_credentials_fileObject



52
53
54
# File 'lib/cem_acpt/platform/gcp.rb', line 52

def gcp_credentials_file
  @gcp_credentials_file ||= (@config.get('platform.credentials_file') || File.join(Dir.home, '.config', 'gcloud', 'application_default_credentials.json'))
end

#gcp_disk_sizeObject



108
109
110
# File 'lib/cem_acpt/platform/gcp.rb', line 108

def gcp_disk_size
  @gcp_disk_size ||= (@config.get('node_data.disk_size') || 40)
end

#gcp_machine_typeObject



104
105
106
# File 'lib/cem_acpt/platform/gcp.rb', line 104

def gcp_machine_type
  @gcp_machine_type ||= (@config.get('node_data.machine_type') || 'e2-medium')
end

#gcp_max_run_durationObject



112
113
114
# File 'lib/cem_acpt/platform/gcp.rb', line 112

def gcp_max_run_duration
  @gcp_max_run_duration ||= (@config.get('node_data.max_run_duration') || 3600)
end

#gcp_private_keyObject



96
97
98
# File 'lib/cem_acpt/platform/gcp.rb', line 96

def gcp_private_key
  @gcp_private_key ||= (@run_data[:private_key] || File.join(Dir.home, '.ssh', 'google_compute_engine'))
end

#gcp_projectObject



56
57
58
59
60
61
62
63
64
65
66
# File 'lib/cem_acpt/platform/gcp.rb', line 56

def gcp_project
  return @gcp_project if @gcp_project

  configured = @config.get('platform.project')
  return @gcp_project = configured if configured

  stdout, stderr, status = Open3.capture3('gcloud config get-value project')
  raise "gcloud config get-value project failed (exit #{status.exitstatus}): #{stderr.chomp}" unless status.success?

  @gcp_project = stdout.chomp
end

#gcp_public_keyObject



100
101
102
# File 'lib/cem_acpt/platform/gcp.rb', line 100

def gcp_public_key
  @gcp_public_key ||= (@run_data[:public_key] || File.join(Dir.home, '.ssh', 'google_compute_engine.pub'))
end

#gcp_regionObject



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/cem_acpt/platform/gcp.rb', line 68

def gcp_region
  return @gcp_region if @gcp_region

  configured = @config.get('platform.region')
  return @gcp_region = configured if configured

  stdout, stderr, status = Open3.capture3('gcloud config get-value compute/region')
  raise "gcloud config get-value compute/region failed (exit #{status.exitstatus}): #{stderr.chomp}" unless status.success?

  @gcp_region = stdout.chomp
end

#gcp_subnetworkObject



92
93
94
# File 'lib/cem_acpt/platform/gcp.rb', line 92

def gcp_subnetwork
  @gcp_subnetwork ||= (@config.get('platform.subnetwork') || 'default')
end

#gcp_usernameObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/cem_acpt/platform/gcp.rb', line 34

def gcp_username
  return @gcp_username if @gcp_username

  @gcp_username = @config.get('platform.username')
  return @gcp_username if @gcp_username

  stdout, stderr, status = Open3.capture3('gcloud auth list --format json')
  raise "gcloud auth list failed (exit #{status.exitstatus}): #{stderr.chomp}" unless status.success?

  parsed = JSON.parse(stdout)
   = parsed.find { || ['status'] == 'ACTIVE' }
  raise 'No active account found in gcloud auth list output' unless 

  @gcp_username = ['account'].split('@').first
rescue JSON::ParserError => e
  raise "Failed to parse gcloud auth output: #{e.message}. stdout: #{stdout.chomp}"
end

#gcp_zoneObject



80
81
82
83
84
85
86
87
88
89
90
# File 'lib/cem_acpt/platform/gcp.rb', line 80

def gcp_zone
  return @gcp_zone if @gcp_zone

  configured = @config.get('platform.zone')
  return @gcp_zone = configured if configured

  stdout, stderr, status = Open3.capture3('gcloud config get-value compute/zone')
  raise "gcloud config get-value compute/zone failed (exit #{status.exitstatus}): #{stderr.chomp}" unless status.success?

  @gcp_zone = stdout.chomp
end

#node_dataObject



24
25
26
27
28
29
30
31
32
# File 'lib/cem_acpt/platform/gcp.rb', line 24

def node_data
  nd = {}
  nd[:machine_type] = gcp_machine_type
  nd[:disk_size] = gcp_disk_size
  nd[:max_run_duration] = gcp_max_run_duration
  nd[:image] = image_name if image_name
  nd[:test_name] = @test_data[:test_name] if @test_data&.key?(:test_name)
  nd
end

#platform_dataObject



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/cem_acpt/platform/gcp.rb', line 11

def platform_data
  {
    username: gcp_username,
    credentials_file: gcp_credentials_file,
    project: gcp_project,
    region: gcp_region,
    zone: gcp_zone,
    subnetwork: gcp_subnetwork,
    private_key: gcp_private_key,
    public_key: gcp_public_key,
  }
end