kitchen-oci 1.21.0 → 1.22.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: a54d769982d5c8431894d27ffa4dd0070a0289a910c88d326701fe85e747ea12
4
- data.tar.gz: 28522b8b6deabd27202497ba57ddfe5a46d68074e45a7c9058628e92ed11914a
3
+ metadata.gz: f91045fdb0ff064f83385b240480320087e7b37d65998bfac58992f029979626
4
+ data.tar.gz: 05c3559342b40ddb201123ef8be3769b12adac2dbbcce79c957f0caa187a5d22
5
5
  SHA512:
6
- metadata.gz: f69b0b7f0f45e20cc16d875d5039e740d1fbca1b83f27d4187f9b4891249dd02d0dac294e5a3c4aa0ae71deebfc3fc49d5a5fc3bb40e38eee4e03e81813fdb13
7
- data.tar.gz: 9389db39bfefbce0600de3740c4ec77f95b4a22f6ad7a1faf472dfe8ca26976d0a50b9d74a3c3496c9c84d966e4d4f224798d1bf41b23e1473ef246772d8c9a6
6
+ metadata.gz: 344ddb1169b34e6e40dad70d5d60fa5d848af6d20d7cf2175f011a97f2248b9e530664a09103b16bcc4249088fb8464fd4e280e4f1368f91de15aeb66a4e8ae1
7
+ data.tar.gz: 63d6b2ec541e4253e8ac5b46b293196e3ef981898147129b5f8439e4449046af947861e2d4526f6b796a50c4b10a6398658c8babbe1db95b03d9169ed43dc7c4
@@ -20,7 +20,7 @@ module Kitchen
20
20
  module Driver
21
21
  class Oci
22
22
  # generic class for blockstorage
23
- class Blockstorage < Oci
23
+ class Blockstorage < Oci # rubocop:disable Metrics/ClassLength
24
24
  require_relative "api"
25
25
  require_relative "config"
26
26
  require_relative "models/iscsi"
@@ -85,9 +85,18 @@ module Kitchen
85
85
  [response, final_state(response)]
86
86
  end
87
87
 
88
- def attach_volume(volume_details, server_id)
88
+ def create_clone_volume(volume)
89
+ clone_volume_name = clone_volume_display_name(volume[:volume_id])
90
+ info("Creating <#{clone_volume_name}>...")
91
+ result = api.blockstorage.create_volume(volume_clone_details(volume, clone_volume_name))
92
+ response = volume_response(result.data.id)
93
+ info("Finished creating <#{clone_volume_name}>.")
94
+ [response, final_state(response)]
95
+ end
96
+
97
+ def attach_volume(volume_details, server_id, volume_config)
89
98
  info("Attaching <#{volume_details.display_name}>...")
90
- attach_volume = api.compute.attach_volume(attachment_details(volume_details, server_id))
99
+ attach_volume = api.compute.attach_volume(attachment_details(volume_details, server_id, volume_config))
91
100
  response = attachment_response(attach_volume.data.id)
92
101
  info("Finished attaching <#{volume_details.display_name}>.")
93
102
  final_state(response)
@@ -141,15 +150,36 @@ module Kitchen
141
150
  )
142
151
  end
143
152
 
153
+ def volume_clone_details(volume, clone_volume_name)
154
+ OCI::Core::Models::CreateVolumeDetails.new(
155
+ compartment_id: oci.compartment,
156
+ availability_domain: config[:availability_domain],
157
+ display_name: clone_volume_name,
158
+ defined_tags: config[:defined_tags],
159
+ size_in_gbs: volume[:size_in_gbs],
160
+ vpus_per_gb: volume[:vpus_per_gb],
161
+ source_details: OCI::Core::Models::VolumeSourceFromVolumeDetails.new(id: volume[:volume_id])
162
+ )
163
+ end
164
+
144
165
  def attachment_name(attachment)
145
166
  attachment[:display_name].gsub(/(?:paravirtual|iscsi)-/, "")
146
167
  end
147
168
 
169
+ def server_os(server_id)
170
+ image_id = api.compute.get_instance(server_id).data.image_id
171
+ api.compute.get_image(image_id).data.operating_system
172
+ end
173
+
148
174
  def final_volume_state(response)
149
175
  volume_state.store(:id, response.id)
150
176
  volume_state.store(:display_name, response.display_name)
151
177
  volume_state
152
178
  end
179
+
180
+ def clone_volume_display_name(volume_id)
181
+ "#{api.blockstorage.get_volume(volume_id).data.to_hash[:displayName]} (Clone)"
182
+ end
153
183
  end
154
184
  end
155
185
  end
@@ -35,11 +35,13 @@ module Kitchen
35
35
  #
36
36
  attr_reader :attachment_type
37
37
 
38
- def attachment_details(volume_details, server_id)
38
+ def attachment_details(volume_details, server_id, volume_config)
39
+ device = volume_config[:device] unless server_os(server_id).downcase =~ /windows/
39
40
  OCI::Core::Models::AttachIScsiVolumeDetails.new(
40
41
  display_name: "#{attachment_type}-#{volume_details.display_name}",
41
42
  volume_id: volume_details.id,
42
- instance_id: server_id
43
+ instance_id: server_id,
44
+ device: device
43
45
  )
44
46
  end
45
47
 
@@ -35,11 +35,13 @@ module Kitchen
35
35
  #
36
36
  attr_reader :attachment_type
37
37
 
38
- def attachment_details(volume_details, server_id)
38
+ def attachment_details(volume_details, server_id, volume_config)
39
+ device = volume_config[:device] unless server_os(server_id).downcase =~ /windows/
39
40
  OCI::Core::Models::AttachParavirtualizedVolumeDetails.new(
40
41
  display_name: "#{attachment_type}-#{volume_details.display_name}",
41
42
  volume_id: volume_details.id,
42
- instance_id: server_id
43
+ instance_id: server_id,
44
+ device: device
43
45
  )
44
46
  end
45
47
 
@@ -153,15 +153,28 @@ module Kitchen
153
153
  def create_and_attach_volumes(config, state, oci, api)
154
154
  return if config[:volumes].empty?
155
155
 
156
+ volume_state = process_volumes(config, state, oci, api)
157
+ state.merge!(volume_state)
158
+ end
159
+
160
+ def process_volumes(config, state, oci, api)
156
161
  volume_state = { volumes: [], volume_attachments: [] }
157
162
  config[:volumes].each do |volume|
158
163
  vol = volume_class(volume[:type], config, state, oci, api)
159
- volume_details, vol_state = vol.create_volume(volume)
160
- attach_state = vol.attach_volume(volume_details, state[:server_id])
164
+ volume_details, vol_state = create_volume(vol, volume)
165
+ attach_state = vol.attach_volume(volume_details, state[:server_id], volume)
161
166
  volume_state[:volumes] << vol_state
162
167
  volume_state[:volume_attachments] << attach_state
163
168
  end
164
- state.merge!(volume_state)
169
+ volume_state
170
+ end
171
+
172
+ def create_volume(vol, volume)
173
+ if volume.key?(:volume_id)
174
+ vol.create_clone_volume(volume)
175
+ else
176
+ vol.create_volume(volume)
177
+ end
165
178
  end
166
179
 
167
180
  def process_post_script(state)
@@ -20,6 +20,6 @@
20
20
  module Kitchen
21
21
  module Driver
22
22
  # Version string for Oracle OCI Kitchen driver
23
- OCI_VERSION = "1.21.0"
23
+ OCI_VERSION = "1.22.0"
24
24
  end
25
25
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-oci
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.21.0
4
+ version: 1.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Pearson
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-08-02 00:00:00.000000000 Z
12
+ date: 2024-08-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: oci
@@ -135,7 +135,7 @@ files:
135
135
  - lib/kitchen/driver/oci/models/paravirtual.rb
136
136
  - lib/kitchen/driver/oci_version.rb
137
137
  - tpl/setup_winrm.ps1.erb
138
- homepage: ''
138
+ homepage: https://github.com/stephenpearson/kitchen-oci
139
139
  licenses:
140
140
  - Apache-2.0
141
141
  metadata: {}