foreman_azure_rm 2.2.2 → 2.2.6

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
- SHA1:
3
- metadata.gz: d9bd1762fee080c446b9a5b9f8563cc4c8c8ac02
4
- data.tar.gz: 1ae71a51e1f0515020aaa08d58e66e39ea4bfac3
2
+ SHA256:
3
+ metadata.gz: 4c5017c30e0067522ca79641d307a2aaef0073ee2c60eb2ec26bf7ca88c72047
4
+ data.tar.gz: e62b30ff6d8594136a724e0995ba7b5de4b14832cd015996d3186f0a1f4daaff
5
5
  SHA512:
6
- metadata.gz: 79d07e33953a24f2e865885302f66631d98fea51e7feb2579d663ed26427e3056030c02ef7fcdd247af868f40f152b8c473649f3e6b44eb0ef5f34cacdf38174
7
- data.tar.gz: 515fca26a081c6f2706962f3e80d1390ae97ce8e8733fb79934716e2922bd4e38022e11ce973d8d5f0b081f1a66970b46ae0306faf6de090aad367f1312f4e57
6
+ metadata.gz: 944bbf2ce53335d33f7ed2f97ac4658408546458103be05ce6cd94bb7cc8f273d49d233adf2cbd7a137154437c0188749123e8ec73eff4d446b59a4d7f068677
7
+ data.tar.gz: 676ed07015b420ace8897695ba252f387577ab4b2b55d1bff62b97381ff3b53aac6ac57af99104351ec068af01af44f90770a54100a7aef1de148be039538278
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Foreman AzureRm Plugin
2
2
 
3
3
  ## Description
4
- ```foreman_azure_rm``` adds [Microsoft Azure Resource Manager](http://azure.com/) as a compute resource for The Foreman
4
+ ```foreman_azure_rm``` adds [Microsoft Azure Resource Manager](http://azure.com/) as a Compute Resource for The Foreman
5
5
 
6
6
  * Website: [TheForeman.org](http://theforeman.org)
7
7
  * ForemanAzureRm: [Plugin manual](https://theforeman.org/plugins/foreman_azure)
@@ -11,7 +11,7 @@
11
11
 
12
12
  ### Bundle (Gem)
13
13
 
14
- Add the following to bundler.d/Gemfile.local.rb in your Foreman installation directory (/usr/share/foreman by default)
14
+ Add the following to `bundler.d/Gemfile.local.rb` in your Foreman installation directory `/usr/share/foreman`
15
15
 
16
16
  ```console
17
17
  $ gem 'foreman_azure_rm'
@@ -55,7 +55,6 @@ Then run `bundle install` from the same directory
55
55
  * VM creation
56
56
  * Provisions using Finish and User data templates from Foreman
57
57
  * Supports cloud-config provisioning
58
- * Currently supports only provisioning of Linux platforms
59
58
  * Provisioning using [Public Images](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/cli-ps-findimage)
60
59
  * Provision using custom images
61
60
  * Provision using shared image galleries
@@ -64,6 +63,7 @@ Then run `bundle install` from the same directory
64
63
  * Support to add multiple data disks/volumes (standard or premium)
65
64
  * VM Extension with Custom Script and File URIs support
66
65
  * Static or dynamic addresses on a per NIC basis
66
+ * Support for NVIDIA Drivers or CUDA on Linux and Windows
67
67
  * Limited extension support
68
68
  * Microsoft's custom script extension
69
69
  * Puppet Lab's Puppet agent extension for Windows
@@ -74,16 +74,16 @@ Go to **Infrastructure > Compute Resources** and click on "New Compute Resource"
74
74
 
75
75
  Choose the **Azure Resource Manager provider**, and fill in all the fields. You need a Subscription ID, Tenant ID, Client ID and a Client Secret which you can generate from your [Microsoft Azure subscription](https://docs.bmc.com/docs/cloudlifecyclemanagement/46/setting-up-a-tenant-id-client-id-and-client-secret-for-azure-resource-manager-provisioning-669202145.html#SettingupaTenantID,ClientID,andClientSecretforAzureResourceManagerprovisioning-SetupTenantIDPrereqPrerequisites)
76
76
 
77
- That's it. You're now ready to create and manage Azure resources in your new Azure Resource Manager compute resource. You should see something like this in the Compute Resource page:
77
+ That's it. You're now ready to create and manage Azure resources in your new Azure Resource Manager Compute Resource. You should see something like this in the Compute Resource page:
78
78
 
79
79
 
80
- ![](https://i.imgur.com/vsamP4G.png)
80
+ ![](https://i.imgur.com/yMGg3A6.png)
81
81
 
82
82
 
83
83
  ![](https://i.imgur.com/Ag9tH55.png)
84
84
 
85
85
 
86
- ![](https://i.imgur.com/fNjlFci.png)
86
+ ![](https://i.imgur.com/OKoGgUY.png)
87
87
 
88
88
 
89
89
  ## Planned Features
@@ -91,7 +91,6 @@ That's it. You're now ready to create and manage Azure resources in your new Azu
91
91
 
92
92
  ## Known Limitations
93
93
  * Please note that currently username is expected to be the same on both Virtual Machine tab for Host creation and during Image creation for Compute Resource. The password field for Image creation is optional.
94
- * Unable to provision using Windows Images
95
94
 
96
95
  ## Links
97
96
  * [Issue tracker](https://projects.theforeman.org/projects/azurerm)
@@ -123,7 +123,7 @@ module ForemanAzureRm
123
123
  def create_nics(region, args = {})
124
124
  nics = []
125
125
  args[:interfaces_attributes].each do |nic, attrs|
126
- private_ip = (attrs[:private_ip] == 'false') ? false : true
126
+ private_ip = Foreman::Cast.to_bool(attrs[:private_ip])
127
127
  priv_ip_alloc = if private_ip
128
128
  NetworkModels::IPAllocationMethod::Static
129
129
  else
@@ -176,6 +176,14 @@ module ForemanAzureRm
176
176
  logger.debug msg
177
177
  vm_create_params = ComputeModels::VirtualMachine.new.tap do |vm|
178
178
  vm.location = vm_hash[:location]
179
+ vm.tags = {}
180
+ unless vm_hash[:tags].nil?
181
+ arr = vm_hash[:tags].split(',')
182
+ arr.each do |item|
183
+ kv = item.split('=')
184
+ vm.tags[kv[0].strip] = kv[1].strip
185
+ end
186
+ end
179
187
  unless vm_hash[:availability_set_id].nil?
180
188
  sub_resource = MsRestAzure::SubResource.new
181
189
  sub_resource.id = vm_hash[:availability_set_id]
@@ -261,12 +269,43 @@ module ForemanAzureRm
261
269
  'commandToExecute' => args[:script_command],
262
270
  'fileUris' => args[:script_uris].split(',')
263
271
  }
272
+
273
+ extension_for_log = "#{extension.publisher}/#{extension.virtual_machine_extension_type}/#{extension.type_handler_version}"
274
+ Foreman::Logging.logger('app').info "Azure RM machine #{args[:name]}: creating #{extension_for_log} extension"
264
275
  sdk.create_or_update_vm_extensions(args[:resource_group],
265
276
  args[:vm_name],
266
277
  'ForemanCustomScript',
267
278
  extension)
268
279
  end
269
280
  end
281
+
282
+ def create_vm_nvidia_gpu_extension(region, args = {})
283
+ extension = ComputeModels::VirtualMachineExtension.new
284
+ extension.publisher = 'Microsoft.HpcCompute'
285
+ extension.type_handler_version = '1.3'
286
+ extension.auto_upgrade_minor_version = true
287
+ extension.location = region
288
+
289
+ case args[:platform]
290
+ # https://docs.microsoft.com/fr-fr/azure/virtual-machines/extensions/hpccompute-gpu-linux
291
+ when 'Linux'
292
+ extension_name = 'NvidiaGpuDriverLinux'
293
+ # https://docs.microsoft.com/fr-fr/azure/virtual-machines/extensions/hpccompute-gpu-windows
294
+ when 'Windows'
295
+ extension_name = 'NvidiaGpuDriverWindows'
296
+ else
297
+ raise RuntimeError, "Unsupported platform #{args[:platform]}"
298
+ end
299
+ extension.virtual_machine_extension_type = extension_name
300
+
301
+ extension_for_log = "#{extension.publisher}/#{extension.virtual_machine_extension_type}/#{extension.type_handler_version}"
302
+ Foreman::Logging.logger('app').info "Azure RM machine #{args[:name]}: creating #{extension_for_log} extension"
303
+ sdk.create_or_update_vm_extensions(args[:resource_group],
304
+ args[:vm_name],
305
+ extension_name,
306
+ extension)
307
+ end
308
+
270
309
  end
271
310
  end
272
311
  end
@@ -43,7 +43,7 @@ module ForemanAzureRm
43
43
  end
44
44
 
45
45
  def cloud
46
- attrs[:cloud]
46
+ attrs[:cloud] || 'azure'
47
47
  end
48
48
 
49
49
  def cloud=(name)
@@ -59,7 +59,7 @@ module ForemanAzureRm
59
59
  end
60
60
 
61
61
  def ensure_attributes_and_values
62
- validate_region
62
+ validate_region if validate_cloud?
63
63
  end
64
64
 
65
65
  def validate_region
@@ -67,6 +67,15 @@ module ForemanAzureRm
67
67
  errors.add(:region, "is not valid, must be lowercase eg. 'eastus'. No special characters allowed.") unless regions.collect(&:second).include?(region)
68
68
  end
69
69
 
70
+ def validate_cloud?
71
+ valid_clouds = ['azure', 'azureusgovernment', 'azurechina', 'azuregermancloud']
72
+ unless valid_clouds.include?(cloud)
73
+ errors.add(:cloud, "is not valid. Valid choices are #{valid_clouds.join(", ")}.")
74
+ return false
75
+ end
76
+ true
77
+ end
78
+
70
79
  def self.model_name
71
80
  ComputeResource.model_name
72
81
  end
@@ -116,7 +125,8 @@ module ForemanAzureRm
116
125
  ssh_key_data: opts[:ssh_key_data],
117
126
  os_disk_caching: opts[:os_disk_caching],
118
127
  premium_os_disk: opts[:premium_os_disk],
119
- os_disk_size_gb: opts[:os_disk_size_gb]
128
+ os_disk_size_gb: opts[:os_disk_size_gb],
129
+ nvidia_gpu_extension: opts[:nvidia_gpu_extension],
120
130
  )
121
131
  if opts[:interfaces].present?
122
132
  ifaces = []
@@ -127,7 +137,16 @@ module ForemanAzureRm
127
137
 
128
138
  vols = opts.fetch(:volumes, []).map { |vols_attrs| new_volume(vols_attrs) } if opts[:volumes].present?
129
139
 
130
- AzureRmCompute.new(azure_vm: raw_vm ,sdk: sdk, resource_group: opts[:resource_group], nics: ifaces, volumes: vols, script_command: opts[:script_command], script_uris: opts[:script_uris])
140
+ AzureRmCompute.new(
141
+ azure_vm: raw_vm,
142
+ sdk: sdk,
143
+ resource_group: opts[:resource_group],
144
+ nics: ifaces,
145
+ volumes: vols,
146
+ script_command: opts[:script_command],
147
+ script_uris: opts[:script_uris],
148
+ nvidia_gpu_extension: Foreman::Cast.to_bool(opts[:nvidia_gpu_extension]),
149
+ )
131
150
  end
132
151
 
133
152
  def provided_attributes
@@ -310,11 +329,28 @@ module ForemanAzureRm
310
329
  custom_data: args[:user_data],
311
330
  script_command: args[:script_command],
312
331
  script_uris: args[:script_uris],
332
+ nvidia_gpu_extension: args[:nvidia_gpu_extension],
333
+ tags: args[:tags],
313
334
  )
314
335
  logger.debug "Virtual Machine #{args[:vm_name]} Created Successfully."
336
+ # request NVIDIA GPU driver and CUDA stack
337
+ if Foreman::Cast.to_bool(args[:nvidia_gpu_extension])
338
+ create_vm_nvidia_gpu_extension(region, args)
339
+ end
340
+ # as this extension may contains postinstall script, call it after others
315
341
  create_vm_extension(region, args)
316
342
  # return the vm object using azure_vm
317
- AzureRmCompute.new(azure_vm: vm, sdk: sdk, resource_group: args[:resource_group], nics: vm_nics(vm), volumes: vm_disks(vm), script_command: user_command, script_uris: args[:script_uris])
343
+ AzureRmCompute.new(
344
+ azure_vm: vm,
345
+ sdk: sdk,
346
+ resource_group: args[:resource_group],
347
+ nics: vm_nics(vm),
348
+ volumes: vm_disks(vm),
349
+ script_command: user_command,
350
+ script_uris: args[:script_uris],
351
+ nvidia_gpu_extension: Foreman::Cast.to_bool(args[:nvidia_gpu_extension]),
352
+ tags: args[:tags],
353
+ )
318
354
  rescue RuntimeError => e
319
355
  Foreman::Logging.exception('Unhandled AzureRm error', e)
320
356
  destroy_vm vm.id if vm
@@ -5,7 +5,9 @@ module ForemanAzureRm
5
5
  attr_accessor :resource_group
6
6
  attr_accessor :nics
7
7
  attr_accessor :script_command, :script_uris
8
+ attr_accessor :nvidia_gpu_extension
8
9
  attr_accessor :volumes
10
+ attr_accessor :tags
9
11
 
10
12
  delegate :name, to: :azure_vm, allow_nil: true
11
13
 
@@ -15,7 +17,9 @@ module ForemanAzureRm
15
17
  nics: [],
16
18
  volumes: [],
17
19
  script_command: nil,
18
- script_uris: nil)
20
+ script_uris: nil,
21
+ nvidia_gpu_extension: false,
22
+ tags: [])
19
23
 
20
24
  @azure_vm = azure_vm
21
25
  @sdk = sdk
@@ -24,6 +28,8 @@ module ForemanAzureRm
24
28
  @volumes ||= volumes
25
29
  @script_command ||= script_command
26
30
  @script_uris ||= script_uris
31
+ @nvidia_gpu_extension ||= nvidia_gpu_extension
32
+ @tags ||= tags
27
33
  @azure_vm.hardware_profile ||= ComputeModels::HardwareProfile.new
28
34
  @azure_vm.os_profile ||= ComputeModels::OSProfile.new
29
35
  @azure_vm.os_profile.linux_configuration ||= ComputeModels::LinuxConfiguration.new
@@ -208,8 +214,24 @@ module ForemanAzureRm
208
214
  def vm_extension
209
215
  return nil unless @azure_vm.resources
210
216
  @vm_extension ||= begin
211
- ext_name = @azure_vm.resources.first.id.split('/')[-1]
212
- sdk.get_vm_extension(@azure_vm.resource_group, name, ext_name)
217
+ @azure_vm.resources.each do |ext|
218
+ ext_name = ext.id.split('/')[-1]
219
+ next unless ext_name == 'ForemanCustomScript'
220
+ return sdk.get_vm_extension(@azure_vm.resource_group, name, ext_name)
221
+ end
222
+ nil
223
+ end
224
+ end
225
+
226
+ def vm_nvidia_gpu_extension
227
+ return nil unless @azure_vm.resources
228
+ @vm_nvidia_gpu_extension ||= begin
229
+ @azure_vm.resources.each do |ext|
230
+ ext_name = ext.id.split('/')[-1]
231
+ next unless ['NvidiaGpuDriverLinux', 'NvidiaGpuDriverWindows'].include? ext_name
232
+ return sdk.get_vm_extension(@azure_vm.resource_group, name, ext_name)
233
+ end
234
+ nil
213
235
  end
214
236
  end
215
237
 
@@ -219,7 +241,7 @@ module ForemanAzureRm
219
241
  # Index is based on script_command that is being injected
220
242
  # from the code in #create_vm. It can be partly hard-coded
221
243
  # since the command shall no change frequently.
222
- if ssh_key_data.nil?
244
+ if ssh_key_data.nil? && platform == 'Linux'
223
245
  user_cmd_index = (vm_extension.settings["commandToExecute"].index("-c"))+ 4
224
246
  script_command = vm_extension.settings["commandToExecute"][user_cmd_index..-2]
225
247
  else
@@ -238,5 +260,14 @@ module ForemanAzureRm
238
260
  @script_uris
239
261
  end
240
262
  end
263
+
264
+ def nvidia_gpu_extension
265
+ if vm_nvidia_gpu_extension.present?
266
+ true
267
+ else
268
+ @nvidia_gpu_extension
269
+ end
270
+ end
271
+
241
272
  end
242
273
  end
@@ -1 +1 @@
1
- attributes :azure_environment, :tenant, :app_ident, :sub_id, :region
1
+ attributes :cloud, :tenant, :app_ident, :sub_id, :region
@@ -132,7 +132,6 @@
132
132
  <%= password_f f, :password,
133
133
  {
134
134
  :label => _('Password'),
135
- :required => true,
136
135
  :placeholder => "********",
137
136
  :value => f.object.password
138
137
 
@@ -186,6 +185,23 @@
186
185
  }
187
186
  %>
188
187
 
188
+ <%= text_f f, :tags,
189
+ {
190
+ :label => _('Azure Tags'),
191
+ :label_help => _('Comma seperated list of name=value pairs for tags on this VM in Azure')
192
+ }
193
+ %>
194
+
195
+ <%= checkbox_f f, :nvidia_gpu_extension,
196
+ {
197
+ :label => _('NVIDIA driver / CUDA'),
198
+ :label_size => "col-md-2",
199
+ :label_help => _("Deploy NVIDIA GPU driver and CUDA (Azure Extension Microsoft.HpcCompute/NvidiaGpuDriver{Linux,Windows}/1.3)"),
200
+ },
201
+ 'true',
202
+ 'false'
203
+ %>
204
+
189
205
  <div id="image_selection">
190
206
  <%= select_f f, :image_id, images, :uuid, :name,
191
207
  { :include_blank => (images.empty? or images.size == 1) ? false : _('Please select an image') },
@@ -1,3 +1,3 @@
1
1
  module ForemanAzureRm
2
- VERSION = '2.2.2'.freeze
2
+ VERSION = '2.2.6'.freeze
3
3
  end
@@ -22,6 +22,9 @@ msgstr ""
22
22
  msgid "%{vm_size} VM Size"
23
23
  msgstr ""
24
24
 
25
+ msgid "Abstract async task"
26
+ msgstr ""
27
+
25
28
  msgid "Action with sub plans"
26
29
  msgstr ""
27
30
 
@@ -31,6 +34,18 @@ msgstr "Accions"
31
34
  msgid "Additional number of disks can be added based on VM Size. For more details, please refer to Microsoft Azure's documentation"
32
35
  msgstr ""
33
36
 
37
+ msgid "Agent action"
38
+ msgstr ""
39
+
40
+ msgid "Attach subscriptions"
41
+ msgstr ""
42
+
43
+ msgid "Auto attach subscriptions"
44
+ msgstr ""
45
+
46
+ msgid "Azure Image Name"
47
+ msgstr ""
48
+
34
49
  msgid "Azure Region"
35
50
  msgstr ""
36
51
 
@@ -46,6 +61,9 @@ msgstr ""
46
61
  msgid "Azure's default"
47
62
  msgstr ""
48
63
 
64
+ msgid "Bulk generate applicability for hosts"
65
+ msgstr ""
66
+
49
67
  msgid "Client ID"
50
68
  msgstr ""
51
69
 
@@ -58,9 +76,30 @@ msgstr ""
58
76
  msgid "Client Secret for AzureRm"
59
77
  msgstr ""
60
78
 
79
+ msgid "Cloud"
80
+ msgstr ""
81
+
82
+ msgid "Combined Profile Update"
83
+ msgstr ""
84
+
61
85
  msgid "Comma seperated file URIs"
62
86
  msgstr ""
63
87
 
88
+ msgid "Copy version units to library"
89
+ msgstr ""
90
+
91
+ msgid "Create"
92
+ msgstr ""
93
+
94
+ msgid "Create Export History"
95
+ msgstr ""
96
+
97
+ msgid "Create Import History"
98
+ msgstr ""
99
+
100
+ msgid "Create Package Group"
101
+ msgstr ""
102
+
64
103
  msgid "Custom Script Command"
65
104
  msgstr ""
66
105
 
@@ -70,25 +109,121 @@ msgstr ""
70
109
  msgid "Default ReadWrite"
71
110
  msgstr ""
72
111
 
112
+ msgid "Delete"
113
+ msgstr ""
114
+
115
+ msgid "Delete Activation Key"
116
+ msgstr ""
117
+
118
+ msgid "Delete Lifecycle Environment"
119
+ msgstr ""
120
+
121
+ msgid "Delete Package Group"
122
+ msgstr ""
123
+
124
+ msgid "Delete Product"
125
+ msgstr ""
126
+
127
+ msgid "Deploy NVIDIA GPU driver and CUDA (Azure Extension Microsoft.HpcCompute/NvidiaGpuDriver{Linux,Windows}/1.3)"
128
+ msgstr ""
129
+
130
+ msgid "Destroy"
131
+ msgstr ""
132
+
133
+ msgid "Destroy Content Host"
134
+ msgstr ""
135
+
136
+ msgid "Disable"
137
+ msgstr ""
138
+
139
+ msgid "Discover"
140
+ msgstr ""
141
+
73
142
  msgid "Does this image support user data input?"
74
143
  msgstr "La imatge admet l'entrada de dades d'usuari?"
75
144
 
145
+ msgid "Enable"
146
+ msgstr ""
147
+
148
+ msgid "Errata mail"
149
+ msgstr ""
150
+
151
+ msgid "Export"
152
+ msgstr ""
153
+
154
+ msgid "Export Library"
155
+ msgstr ""
156
+
157
+ msgid "Fetch pxe files"
158
+ msgstr ""
159
+
160
+ msgid "Filtered index content"
161
+ msgstr ""
162
+
163
+ msgid "For custom or shared gallery image, use prefix 'custom://' or 'gallery://'. For public and RHEL-byos images, prefix the uuid with 'marketplace://'. (e.g. 'marketplace://OpenLogic:CentOS:7.5:latest' or 'custom://image-name')"
164
+ msgstr ""
165
+
166
+ msgid "Generate host applicability"
167
+ msgstr ""
168
+
169
+ msgid "Generate repository applicability"
170
+ msgstr ""
171
+
172
+ msgid "Hypervisors"
173
+ msgstr ""
174
+
175
+ msgid "Hypervisors update"
176
+ msgstr ""
177
+
76
178
  msgid "Image"
77
179
  msgstr "Imatge"
78
180
 
181
+ msgid "Import"
182
+ msgstr ""
183
+
184
+ msgid "Import Content View Version"
185
+ msgstr ""
186
+
187
+ msgid "Import Default Content View"
188
+ msgstr ""
189
+
79
190
  msgid "Import Puppet classes"
80
191
  msgstr ""
81
192
 
82
193
  msgid "Import facts"
83
194
  msgstr ""
84
195
 
85
- msgid "Load Regions"
196
+ msgid "Incremental Update"
197
+ msgstr ""
198
+
199
+ msgid "Incremental Update of Content View Version(s) "
86
200
  msgstr ""
87
201
 
88
- msgid "Marketplace Image URN"
202
+ msgid "Index content"
89
203
  msgstr ""
90
204
 
91
- msgid "Marketplace URN (e.g. OpenLogic:CentOS:7.5:latest)"
205
+ msgid "Index errata"
206
+ msgstr ""
207
+
208
+ msgid "Index module streams"
209
+ msgstr ""
210
+
211
+ msgid "Index package groups"
212
+ msgstr ""
213
+
214
+ msgid "Install Applicable Errata"
215
+ msgstr ""
216
+
217
+ msgid "Instance update"
218
+ msgstr ""
219
+
220
+ msgid "Leave empty to use default image size"
221
+ msgstr ""
222
+
223
+ msgid "Load Regions"
224
+ msgstr ""
225
+
226
+ msgid "NVIDIA driver / CUDA"
92
227
  msgstr ""
93
228
 
94
229
  msgid "Name"
@@ -97,6 +232,12 @@ msgstr "Nom"
97
232
  msgid "OS Disk Caching"
98
233
  msgstr ""
99
234
 
235
+ msgid "Override OS Disk Size (GB)"
236
+ msgstr ""
237
+
238
+ msgid "Package Profile Update"
239
+ msgstr ""
240
+
100
241
  msgid "Password"
101
242
  msgstr "Contrasenya"
102
243
 
@@ -118,24 +259,66 @@ msgstr "Si us plau, seleccioneu una imatge"
118
259
  msgid "Premium OS Disk"
119
260
  msgstr ""
120
261
 
262
+ msgid "Product Create"
263
+ msgstr ""
264
+
265
+ msgid "Promote"
266
+ msgstr ""
267
+
268
+ msgid "Promotion to Environment"
269
+ msgstr ""
270
+
121
271
  msgid "Properties"
122
272
  msgstr "Propietats"
123
273
 
124
274
  msgid "Public IP"
125
275
  msgstr ""
126
276
 
277
+ msgid "Publish"
278
+ msgstr ""
279
+
280
+ msgid "Publish Lifecycle Environment Repositories"
281
+ msgstr ""
282
+
127
283
  msgid "Region"
128
284
  msgstr "Regió"
129
285
 
286
+ msgid "Reindex subscriptions"
287
+ msgstr ""
288
+
130
289
  msgid "Reload Images, Sizes, vNets"
131
290
  msgstr ""
132
291
 
133
292
  msgid "Remote action:"
134
293
  msgstr ""
135
294
 
295
+ msgid "Remove Content"
296
+ msgstr ""
297
+
298
+ msgid "Remove Version"
299
+ msgstr ""
300
+
301
+ msgid "Remove Versions and Associations"
302
+ msgstr ""
303
+
304
+ msgid "Remove from Environment"
305
+ msgstr ""
306
+
307
+ msgid "Remove subscriptions"
308
+ msgstr ""
309
+
310
+ msgid "Report"
311
+ msgstr ""
312
+
313
+ msgid "Republish Version Repositories"
314
+ msgstr ""
315
+
136
316
  msgid "Resource Group"
137
317
  msgstr ""
138
318
 
319
+ msgid "Run Sync Plan:"
320
+ msgstr ""
321
+
139
322
  msgid "SSH Key"
140
323
  msgstr ""
141
324
 
@@ -160,6 +343,15 @@ msgstr "ID de subscripció"
160
343
  msgid "Subscription ID for AzureRm"
161
344
  msgstr ""
162
345
 
346
+ msgid "Sync capsule"
347
+ msgstr ""
348
+
349
+ msgid "Synchronize"
350
+ msgstr ""
351
+
352
+ msgid "Synchronize smart proxy"
353
+ msgstr ""
354
+
163
355
  msgid "Tenant ID"
164
356
  msgstr ""
165
357
 
@@ -178,8 +370,44 @@ msgstr ""
178
370
  msgid "To perform commands as root, prefix it with 'sudo'"
179
371
  msgstr ""
180
372
 
373
+ msgid "Update"
374
+ msgstr ""
375
+
376
+ msgid "Update Content Overrides"
377
+ msgstr ""
378
+
379
+ msgid "Update content urls"
380
+ msgstr ""
381
+
382
+ msgid "Update for host"
383
+ msgstr ""
384
+
385
+ msgid "Update http proxy"
386
+ msgstr ""
387
+
388
+ msgid "Update http proxy details"
389
+ msgstr ""
390
+
391
+ msgid "Update redhat repository"
392
+ msgstr ""
393
+
394
+ msgid "Update release version for host"
395
+ msgstr ""
396
+
397
+ msgid "Updating System Purpose for host"
398
+ msgstr ""
399
+
400
+ msgid "Upload errata into"
401
+ msgstr ""
402
+
403
+ msgid "Upload into"
404
+ msgstr ""
405
+
181
406
  msgid "Username"
182
407
  msgstr "Nom d'usuari"
183
408
 
184
409
  msgid "VM Size"
185
410
  msgstr ""
411
+
412
+ msgid "Verify checksum"
413
+ msgstr ""