teuthology 1.1.0__py3-none-any.whl → 1.2.0__py3-none-any.whl

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.
Files changed (168) hide show
  1. scripts/describe.py +1 -0
  2. scripts/dispatcher.py +55 -26
  3. scripts/exporter.py +18 -0
  4. scripts/lock.py +1 -1
  5. scripts/node_cleanup.py +58 -0
  6. scripts/openstack.py +9 -9
  7. scripts/results.py +12 -11
  8. scripts/schedule.py +4 -0
  9. scripts/suite.py +57 -16
  10. scripts/supervisor.py +44 -0
  11. scripts/update_inventory.py +10 -4
  12. teuthology/__init__.py +24 -26
  13. teuthology/beanstalk.py +4 -3
  14. teuthology/config.py +16 -6
  15. teuthology/contextutil.py +18 -14
  16. teuthology/describe_tests.py +25 -18
  17. teuthology/dispatcher/__init__.py +210 -35
  18. teuthology/dispatcher/supervisor.py +140 -58
  19. teuthology/exceptions.py +43 -0
  20. teuthology/exporter.py +347 -0
  21. teuthology/kill.py +76 -81
  22. teuthology/lock/cli.py +3 -3
  23. teuthology/lock/ops.py +135 -61
  24. teuthology/lock/query.py +61 -44
  25. teuthology/ls.py +1 -1
  26. teuthology/misc.py +61 -75
  27. teuthology/nuke/__init__.py +12 -353
  28. teuthology/openstack/__init__.py +4 -3
  29. teuthology/openstack/openstack-centos-7.0-user-data.txt +1 -1
  30. teuthology/openstack/openstack-centos-7.1-user-data.txt +1 -1
  31. teuthology/openstack/openstack-centos-7.2-user-data.txt +1 -1
  32. teuthology/openstack/openstack-debian-8.0-user-data.txt +1 -1
  33. teuthology/openstack/openstack-opensuse-42.1-user-data.txt +1 -1
  34. teuthology/openstack/openstack-teuthology.cron +0 -1
  35. teuthology/orchestra/cluster.py +49 -7
  36. teuthology/orchestra/connection.py +16 -5
  37. teuthology/orchestra/console.py +111 -50
  38. teuthology/orchestra/daemon/cephadmunit.py +17 -4
  39. teuthology/orchestra/daemon/state.py +8 -1
  40. teuthology/orchestra/daemon/systemd.py +4 -4
  41. teuthology/orchestra/opsys.py +30 -11
  42. teuthology/orchestra/remote.py +405 -338
  43. teuthology/orchestra/run.py +3 -3
  44. teuthology/packaging.py +19 -16
  45. teuthology/provision/__init__.py +30 -10
  46. teuthology/provision/cloud/openstack.py +12 -6
  47. teuthology/provision/cloud/util.py +1 -2
  48. teuthology/provision/downburst.py +4 -3
  49. teuthology/provision/fog.py +68 -20
  50. teuthology/provision/openstack.py +5 -4
  51. teuthology/provision/pelagos.py +1 -1
  52. teuthology/repo_utils.py +43 -13
  53. teuthology/report.py +57 -35
  54. teuthology/results.py +5 -3
  55. teuthology/run.py +13 -14
  56. teuthology/run_tasks.py +27 -43
  57. teuthology/schedule.py +4 -3
  58. teuthology/scrape.py +28 -22
  59. teuthology/suite/__init__.py +74 -45
  60. teuthology/suite/build_matrix.py +34 -24
  61. teuthology/suite/fragment-merge.lua +105 -0
  62. teuthology/suite/matrix.py +31 -2
  63. teuthology/suite/merge.py +175 -0
  64. teuthology/suite/placeholder.py +6 -9
  65. teuthology/suite/run.py +175 -100
  66. teuthology/suite/util.py +64 -218
  67. teuthology/task/__init__.py +1 -1
  68. teuthology/task/ansible.py +101 -32
  69. teuthology/task/buildpackages.py +2 -2
  70. teuthology/task/ceph_ansible.py +13 -6
  71. teuthology/task/cephmetrics.py +2 -1
  72. teuthology/task/clock.py +33 -14
  73. teuthology/task/exec.py +18 -0
  74. teuthology/task/hadoop.py +2 -2
  75. teuthology/task/install/__init__.py +29 -7
  76. teuthology/task/install/bin/adjust-ulimits +16 -0
  77. teuthology/task/install/bin/daemon-helper +114 -0
  78. teuthology/task/install/bin/stdin-killer +263 -0
  79. teuthology/task/install/deb.py +1 -1
  80. teuthology/task/install/rpm.py +17 -5
  81. teuthology/task/install/util.py +3 -3
  82. teuthology/task/internal/__init__.py +41 -10
  83. teuthology/task/internal/edit_sudoers.sh +10 -0
  84. teuthology/task/internal/lock_machines.py +2 -9
  85. teuthology/task/internal/redhat.py +31 -1
  86. teuthology/task/internal/syslog.py +31 -8
  87. teuthology/task/kernel.py +152 -145
  88. teuthology/task/lockfile.py +1 -1
  89. teuthology/task/mpi.py +10 -10
  90. teuthology/task/pcp.py +1 -1
  91. teuthology/task/selinux.py +16 -8
  92. teuthology/task/ssh_keys.py +4 -4
  93. teuthology/task/tests/__init__.py +137 -77
  94. teuthology/task/tests/test_fetch_coredumps.py +116 -0
  95. teuthology/task/tests/test_run.py +4 -4
  96. teuthology/timer.py +3 -3
  97. teuthology/util/loggerfile.py +19 -0
  98. teuthology/util/scanner.py +159 -0
  99. teuthology/util/sentry.py +52 -0
  100. teuthology/util/time.py +52 -0
  101. teuthology-1.2.0.data/scripts/adjust-ulimits +16 -0
  102. teuthology-1.2.0.data/scripts/daemon-helper +114 -0
  103. teuthology-1.2.0.data/scripts/stdin-killer +263 -0
  104. teuthology-1.2.0.dist-info/METADATA +89 -0
  105. teuthology-1.2.0.dist-info/RECORD +174 -0
  106. {teuthology-1.1.0.dist-info → teuthology-1.2.0.dist-info}/WHEEL +1 -1
  107. {teuthology-1.1.0.dist-info → teuthology-1.2.0.dist-info}/entry_points.txt +3 -2
  108. scripts/nuke.py +0 -47
  109. scripts/worker.py +0 -37
  110. teuthology/nuke/actions.py +0 -456
  111. teuthology/openstack/test/__init__.py +0 -0
  112. teuthology/openstack/test/openstack-integration.py +0 -286
  113. teuthology/openstack/test/test_config.py +0 -35
  114. teuthology/openstack/test/test_openstack.py +0 -1695
  115. teuthology/orchestra/test/__init__.py +0 -0
  116. teuthology/orchestra/test/integration/__init__.py +0 -0
  117. teuthology/orchestra/test/integration/test_integration.py +0 -94
  118. teuthology/orchestra/test/test_cluster.py +0 -240
  119. teuthology/orchestra/test/test_connection.py +0 -106
  120. teuthology/orchestra/test/test_console.py +0 -217
  121. teuthology/orchestra/test/test_opsys.py +0 -404
  122. teuthology/orchestra/test/test_remote.py +0 -185
  123. teuthology/orchestra/test/test_run.py +0 -286
  124. teuthology/orchestra/test/test_systemd.py +0 -54
  125. teuthology/orchestra/test/util.py +0 -12
  126. teuthology/test/__init__.py +0 -0
  127. teuthology/test/fake_archive.py +0 -107
  128. teuthology/test/fake_fs.py +0 -92
  129. teuthology/test/integration/__init__.py +0 -0
  130. teuthology/test/integration/test_suite.py +0 -86
  131. teuthology/test/task/__init__.py +0 -205
  132. teuthology/test/task/test_ansible.py +0 -624
  133. teuthology/test/task/test_ceph_ansible.py +0 -176
  134. teuthology/test/task/test_console_log.py +0 -88
  135. teuthology/test/task/test_install.py +0 -337
  136. teuthology/test/task/test_internal.py +0 -57
  137. teuthology/test/task/test_kernel.py +0 -243
  138. teuthology/test/task/test_pcp.py +0 -379
  139. teuthology/test/task/test_selinux.py +0 -35
  140. teuthology/test/test_config.py +0 -189
  141. teuthology/test/test_contextutil.py +0 -68
  142. teuthology/test/test_describe_tests.py +0 -316
  143. teuthology/test/test_email_sleep_before_teardown.py +0 -81
  144. teuthology/test/test_exit.py +0 -97
  145. teuthology/test/test_get_distro.py +0 -47
  146. teuthology/test/test_get_distro_version.py +0 -47
  147. teuthology/test/test_get_multi_machine_types.py +0 -27
  148. teuthology/test/test_job_status.py +0 -60
  149. teuthology/test/test_ls.py +0 -48
  150. teuthology/test/test_misc.py +0 -391
  151. teuthology/test/test_nuke.py +0 -290
  152. teuthology/test/test_packaging.py +0 -763
  153. teuthology/test/test_parallel.py +0 -28
  154. teuthology/test/test_repo_utils.py +0 -225
  155. teuthology/test/test_report.py +0 -77
  156. teuthology/test/test_results.py +0 -155
  157. teuthology/test/test_run.py +0 -239
  158. teuthology/test/test_safepath.py +0 -55
  159. teuthology/test/test_schedule.py +0 -45
  160. teuthology/test/test_scrape.py +0 -167
  161. teuthology/test/test_timer.py +0 -80
  162. teuthology/test/test_vps_os_vers_parameter_checking.py +0 -84
  163. teuthology/test/test_worker.py +0 -303
  164. teuthology/worker.py +0 -354
  165. teuthology-1.1.0.dist-info/METADATA +0 -76
  166. teuthology-1.1.0.dist-info/RECORD +0 -213
  167. {teuthology-1.1.0.dist-info → teuthology-1.2.0.dist-info}/LICENSE +0 -0
  168. {teuthology-1.1.0.dist-info → teuthology-1.2.0.dist-info}/top_level.txt +0 -0
@@ -1,1695 +0,0 @@
1
- #
2
- # Copyright (c) 2015,2016 Red Hat, Inc.
3
- #
4
- # Author: Loic Dachary <loic@dachary.org>
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
23
- #
24
- import argparse
25
- import logging
26
- import os
27
- import pytest
28
- import subprocess
29
- import tempfile
30
- import time
31
- from mock import patch
32
-
33
- import teuthology
34
- from teuthology import misc
35
- from teuthology.config import set_config_attr
36
- from teuthology.openstack import TeuthologyOpenStack, OpenStack, OpenStackInstance
37
- from teuthology.openstack import NoFlavorException
38
- import scripts.openstack
39
-
40
-
41
- class TestOpenStackBase(object):
42
-
43
- def setup(self):
44
- OpenStack.token = None
45
- OpenStack.token_expires = None
46
- self.environ = {}
47
- for k in os.environ.keys():
48
- if k.startswith('OS_'):
49
- self.environ[k] = os.environ[k]
50
-
51
- def teardown(self):
52
- OpenStack.token = None
53
- OpenStack.token_expires = None
54
- for k in os.environ.keys():
55
- if k.startswith('OS_'):
56
- if k in self.environ:
57
- os.environ[k] = self.environ[k]
58
- else:
59
- del os.environ[k]
60
-
61
- class TestOpenStackInstance(TestOpenStackBase):
62
-
63
- teuthology_instance = """
64
- {
65
- "OS-EXT-STS:task_state": null,
66
- "addresses": "Ext-Net=167.114.233.32",
67
- "image": "Ubuntu 14.04 (0d315a8d-75e3-418a-80e4-48e62d599627)",
68
- "OS-EXT-STS:vm_state": "active",
69
- "OS-SRV-USG:launched_at": "2015-08-17T12:22:13.000000",
70
- "flavor": "vps-ssd-1 (164fcc7e-7771-414f-a607-b388cb7b7aa0)",
71
- "id": "f3ca32d7-212b-458b-a0d4-57d1085af953",
72
- "security_groups": [
73
- {
74
- "name": "default"
75
- }
76
- ],
77
- "user_id": "3a075820e5d24fda96cd340b87fd94e9",
78
- "OS-DCF:diskConfig": "AUTO",
79
- "accessIPv4": "",
80
- "accessIPv6": "",
81
- "progress": 0,
82
- "OS-EXT-STS:power_state": 1,
83
- "project_id": "62cf1be03cec403c8ed8e64df55732ea",
84
- "config_drive": "",
85
- "status": "ACTIVE",
86
- "updated": "2015-11-03T13:48:53Z",
87
- "hostId": "bcdf964b6f724e573c07156ff85b4db1707f6f0969f571cf33e0468d",
88
- "OS-SRV-USG:terminated_at": null,
89
- "key_name": "loic",
90
- "properties": "",
91
- "OS-EXT-AZ:availability_zone": "nova",
92
- "name": "mrdarkdragon",
93
- "created": "2015-08-17T12:21:31Z",
94
- "os-extended-volumes:volumes_attached": [{"id": "627e2631-fbb3-48cd-b801-d29cd2a76f74"}, {"id": "09837649-0881-4ee2-a560-adabefc28764"}, {"id": "44e5175b-6044-40be-885a-c9ddfb6f75bb"}]
95
- }
96
- """
97
-
98
- teuthology_instance_no_addresses = """
99
- {
100
- "OS-EXT-STS:task_state": null,
101
- "addresses": "",
102
- "image": "Ubuntu 14.04 (0d315a8d-75e3-418a-80e4-48e62d599627)",
103
- "OS-EXT-STS:vm_state": "active",
104
- "OS-SRV-USG:launched_at": "2015-08-17T12:22:13.000000",
105
- "flavor": "vps-ssd-1 (164fcc7e-7771-414f-a607-b388cb7b7aa0)",
106
- "id": "f3ca32d7-212b-458b-a0d4-57d1085af953",
107
- "security_groups": [
108
- {
109
- "name": "default"
110
- }
111
- ],
112
- "user_id": "3a075820e5d24fda96cd340b87fd94e9",
113
- "OS-DCF:diskConfig": "AUTO",
114
- "accessIPv4": "",
115
- "accessIPv6": "",
116
- "progress": 0,
117
- "OS-EXT-STS:power_state": 1,
118
- "project_id": "62cf1be03cec403c8ed8e64df55732ea",
119
- "config_drive": "",
120
- "status": "ACTIVE",
121
- "updated": "2015-11-03T13:48:53Z",
122
- "hostId": "bcdf964b6f724e573c07156ff85b4db1707f6f0969f571cf33e0468d",
123
- "OS-SRV-USG:terminated_at": null,
124
- "key_name": "loic",
125
- "properties": "",
126
- "OS-EXT-AZ:availability_zone": "nova",
127
- "name": "mrdarkdragon",
128
- "created": "2015-08-17T12:21:31Z",
129
- "os-extended-volumes:volumes_attached": []
130
- }
131
- """
132
-
133
- @classmethod
134
- def setup_class(self):
135
- if 'OS_AUTH_URL' not in os.environ:
136
- pytest.skip('no OS_AUTH_URL environment variable')
137
-
138
- def test_init(self):
139
- with patch.multiple(
140
- misc,
141
- sh=lambda cmd: self.teuthology_instance,
142
- ):
143
- o = OpenStackInstance('NAME')
144
- assert o['id'] == 'f3ca32d7-212b-458b-a0d4-57d1085af953'
145
- o = OpenStackInstance('NAME', {"id": "OTHER"})
146
- assert o['id'] == "OTHER"
147
-
148
- def test_get_created(self):
149
- with patch.multiple(
150
- misc,
151
- sh=lambda cmd: self.teuthology_instance,
152
- ):
153
- o = OpenStackInstance('NAME')
154
- assert o.get_created() > 0
155
-
156
- def test_exists(self):
157
- with patch.multiple(
158
- misc,
159
- sh=lambda cmd: self.teuthology_instance,
160
- ):
161
- o = OpenStackInstance('NAME')
162
- assert o.exists()
163
- def sh_raises(cmd):
164
- raise subprocess.CalledProcessError('FAIL', 'BAD')
165
- with patch.multiple(
166
- misc,
167
- sh=sh_raises,
168
- ):
169
- o = OpenStackInstance('NAME')
170
- assert not o.exists()
171
-
172
- def test_volumes(self):
173
- with patch.multiple(
174
- misc,
175
- sh=lambda cmd: self.teuthology_instance,
176
- ):
177
- o = OpenStackInstance('NAME')
178
- assert len(o.get_volumes()) == 3
179
-
180
- def test_get_addresses(self):
181
- answers = [
182
- self.teuthology_instance_no_addresses,
183
- self.teuthology_instance,
184
- ]
185
- def sh(self):
186
- return answers.pop(0)
187
- with patch.multiple(
188
- misc,
189
- sh=sh,
190
- ):
191
- o = OpenStackInstance('NAME')
192
- assert o.get_addresses() == 'Ext-Net=167.114.233.32'
193
-
194
- def test_get_ip_neutron(self):
195
- instance_id = '8e1fd70a-3065-46f8-9c30-84dc028c1834'
196
- ip = '10.10.10.4'
197
- def sh(cmd):
198
- if 'neutron subnet-list' in cmd:
199
- return """
200
- [
201
- {
202
- "ip_version": 6,
203
- "id": "c45b9661-b2ba-4817-9e3a-f8f63bf32989"
204
- },
205
- {
206
- "ip_version": 4,
207
- "id": "e03a3dbc-afc8-4b52-952e-7bf755397b50"
208
- }
209
- ]
210
- """
211
- elif 'neutron port-list' in cmd:
212
- return ("""
213
- [
214
- {
215
- "device_id": "915504ad-368b-4cce-be7c-4f8a83902e28",
216
- "fixed_ips": "{\\"subnet_id\\": \\"e03a3dbc-afc8-4b52-952e-7bf755397b50\\", \\"ip_address\\": \\"10.10.10.1\\"}\\n{\\"subnet_id\\": \\"c45b9661-b2ba-4817-9e3a-f8f63bf32989\\", \\"ip_address\\": \\"2607:f298:6050:9afc::1\\"}"
217
- },
218
- {
219
- "device_id": "{instance_id}",
220
- "fixed_ips": "{\\"subnet_id\\": \\"e03a3dbc-afc8-4b52-952e-7bf755397b50\\", \\"ip_address\\": \\"{ip}\\"}\\n{\\"subnet_id\\": \\"c45b9661-b2ba-4817-9e3a-f8f63bf32989\\", \\"ip_address\\": \\"2607:f298:6050:9afc:f816:3eff:fe07:76c1\\"}"
221
- },
222
- {
223
- "device_id": "17e4a968-4caa-4cee-8e4b-f950683a02bd",
224
- "fixed_ips": "{\\"subnet_id\\": \\"e03a3dbc-afc8-4b52-952e-7bf755397b50\\", \\"ip_address\\": \\"10.10.10.5\\"}\\n{\\"subnet_id\\": \\"c45b9661-b2ba-4817-9e3a-f8f63bf32989\\", \\"ip_address\\": \\"2607:f298:6050:9afc:f816:3eff:fe9c:37f0\\"}"
225
- }
226
- ]
227
- """.replace('{instance_id}', instance_id).
228
- replace('{ip}', ip))
229
- else:
230
- raise Exception("unexpected " + cmd)
231
- with patch.multiple(
232
- misc,
233
- sh=sh,
234
- ):
235
- assert ip == OpenStackInstance(
236
- instance_id,
237
- { 'id': instance_id },
238
- ).get_ip_neutron()
239
-
240
- class TestOpenStack(TestOpenStackBase):
241
-
242
- flavors = """[
243
- {
244
- "Name": "eg-120-ssd",
245
- "RAM": 120000,
246
- "Ephemeral": 0,
247
- "VCPUs": 32,
248
- "Is Public": true,
249
- "Disk": 800,
250
- "ID": "008f75de-c467-4d15-8f70-79c8fbe19538"
251
- },
252
- {
253
- "Name": "hg-60",
254
- "RAM": 60000,
255
- "Ephemeral": 0,
256
- "VCPUs": 16,
257
- "Is Public": true,
258
- "Disk": 1600,
259
- "ID": "0297d7ac-fe6f-4ff1-b6e7-0b8b0908c94f"
260
- },
261
- {
262
- "Name": "win-sp-120-ssd-flex",
263
- "RAM": 120000,
264
- "Ephemeral": 0,
265
- "VCPUs": 8,
266
- "Is Public": true,
267
- "Disk": 50,
268
- "ID": "039e31f2-6541-46c8-85cf-7f47fab7ad78"
269
- },
270
- {
271
- "Name": "win-sp-60",
272
- "RAM": 60000,
273
- "Ephemeral": 0,
274
- "VCPUs": 4,
275
- "Is Public": true,
276
- "Disk": 400,
277
- "ID": "0417a0e6-f68a-4b8b-a642-ca5ecb9652f7"
278
- },
279
- {
280
- "Name": "hg-120-ssd",
281
- "RAM": 120000,
282
- "Ephemeral": 0,
283
- "VCPUs": 32,
284
- "Is Public": true,
285
- "Disk": 800,
286
- "ID": "042aefc6-b713-4a7e-ada5-3ff81daa1960"
287
- },
288
- {
289
- "Name": "win-sp-60-flex",
290
- "RAM": 60000,
291
- "Ephemeral": 0,
292
- "VCPUs": 4,
293
- "Is Public": true,
294
- "Disk": 50,
295
- "ID": "0609290c-ad2a-40f0-8c66-c755dd38fe3f"
296
- },
297
- {
298
- "Name": "win-eg-120",
299
- "RAM": 120000,
300
- "Ephemeral": 0,
301
- "VCPUs": 32,
302
- "Is Public": true,
303
- "Disk": 800,
304
- "ID": "0651080f-5d07-44b1-a759-7ea4594b669e"
305
- },
306
- {
307
- "Name": "win-sp-240",
308
- "RAM": 240000,
309
- "Ephemeral": 0,
310
- "VCPUs": 16,
311
- "Is Public": true,
312
- "Disk": 1600,
313
- "ID": "07885848-8831-486d-8525-91484c09cc7e"
314
- },
315
- {
316
- "Name": "win-hg-60-ssd",
317
- "RAM": 60000,
318
- "Ephemeral": 0,
319
- "VCPUs": 16,
320
- "Is Public": true,
321
- "Disk": 800,
322
- "ID": "079aa0a2-5e48-4e58-8205-719bc962736e"
323
- },
324
- {
325
- "Name": "eg-120",
326
- "RAM": 120000,
327
- "Ephemeral": 0,
328
- "VCPUs": 32,
329
- "Is Public": true,
330
- "Disk": 1600,
331
- "ID": "090f8b8c-673c-4ab8-9a07-6e54a8776e7b"
332
- },
333
- {
334
- "Name": "win-hg-15-ssd-flex",
335
- "RAM": 15000,
336
- "Ephemeral": 0,
337
- "VCPUs": 4,
338
- "Is Public": true,
339
- "Disk": 50,
340
- "ID": "10e10c58-d29f-4ff6-a1fd-085c35a3bd9b"
341
- },
342
- {
343
- "Name": "eg-15-ssd",
344
- "RAM": 15000,
345
- "Ephemeral": 0,
346
- "VCPUs": 4,
347
- "Is Public": true,
348
- "Disk": 200,
349
- "ID": "1340a920-0f2f-4c1b-8d74-e2502258da73"
350
- },
351
- {
352
- "Name": "win-eg-30-ssd-flex",
353
- "RAM": 30000,
354
- "Ephemeral": 0,
355
- "VCPUs": 8,
356
- "Is Public": true,
357
- "Disk": 50,
358
- "ID": "13e54752-fbd0-47a6-aa93-e5a67dfbc743"
359
- },
360
- {
361
- "Name": "eg-120-ssd-flex",
362
- "RAM": 120000,
363
- "Ephemeral": 0,
364
- "VCPUs": 32,
365
- "Is Public": true,
366
- "Disk": 50,
367
- "ID": "15c07a54-2dfb-41d9-aa73-6989fd8cafc2"
368
- },
369
- {
370
- "Name": "win-eg-120-ssd-flex",
371
- "RAM": 120000,
372
- "Ephemeral": 0,
373
- "VCPUs": 32,
374
- "Is Public": true,
375
- "Disk": 50,
376
- "ID": "15e0dfcc-10f4-4e70-8ac1-30bc323273e2"
377
- },
378
- {
379
- "Name": "vps-ssd-1",
380
- "RAM": 2000,
381
- "Ephemeral": 0,
382
- "VCPUs": 1,
383
- "Is Public": true,
384
- "Disk": 10,
385
- "ID": "164fcc7e-7771-414f-a607-b388cb7b7aa0"
386
- },
387
- {
388
- "Name": "win-sp-120-flex",
389
- "RAM": 120000,
390
- "Ephemeral": 0,
391
- "VCPUs": 8,
392
- "Is Public": true,
393
- "Disk": 50,
394
- "ID": "169415e1-0979-4527-94fb-638c885bbd8c"
395
- },
396
- {
397
- "Name": "win-hg-60-flex",
398
- "RAM": 60000,
399
- "Ephemeral": 0,
400
- "VCPUs": 16,
401
- "Is Public": true,
402
- "Disk": 50,
403
- "ID": "16f13d5b-be27-4b8b-88da-959d3904d3ba"
404
- },
405
- {
406
- "Name": "win-sp-30-ssd",
407
- "RAM": 30000,
408
- "Ephemeral": 0,
409
- "VCPUs": 2,
410
- "Is Public": true,
411
- "Disk": 100,
412
- "ID": "1788102b-ab80-4a0c-b819-541deaca7515"
413
- },
414
- {
415
- "Name": "win-sp-240-flex",
416
- "RAM": 240000,
417
- "Ephemeral": 0,
418
- "VCPUs": 16,
419
- "Is Public": true,
420
- "Disk": 50,
421
- "ID": "17bcfa14-135f-442f-9397-a4dc25265560"
422
- },
423
- {
424
- "Name": "win-eg-60-ssd-flex",
425
- "RAM": 60000,
426
- "Ephemeral": 0,
427
- "VCPUs": 16,
428
- "Is Public": true,
429
- "Disk": 50,
430
- "ID": "194ca9ba-04af-4d86-ba37-d7da883a7eab"
431
- },
432
- {
433
- "Name": "win-eg-60-flex",
434
- "RAM": 60000,
435
- "Ephemeral": 0,
436
- "VCPUs": 16,
437
- "Is Public": true,
438
- "Disk": 50,
439
- "ID": "19ff8837-4751-4f6c-a82b-290bc53c83c1"
440
- },
441
- {
442
- "Name": "win-eg-30-flex",
443
- "RAM": 30000,
444
- "Ephemeral": 0,
445
- "VCPUs": 8,
446
- "Is Public": true,
447
- "Disk": 50,
448
- "ID": "1aaef5e5-4df9-4462-80d3-701683ab9ff0"
449
- },
450
- {
451
- "Name": "eg-15",
452
- "RAM": 15000,
453
- "Ephemeral": 0,
454
- "VCPUs": 4,
455
- "Is Public": true,
456
- "Disk": 400,
457
- "ID": "1cd85b81-5e4d-477a-a127-eb496b1d75de"
458
- },
459
- {
460
- "Name": "hg-120",
461
- "RAM": 120000,
462
- "Ephemeral": 0,
463
- "VCPUs": 32,
464
- "Is Public": true,
465
- "Disk": 1600,
466
- "ID": "1f1efedf-ec91-4a42-acd7-f5cf64b02d3c"
467
- },
468
- {
469
- "Name": "hg-15-ssd-flex",
470
- "RAM": 15000,
471
- "Ephemeral": 0,
472
- "VCPUs": 4,
473
- "Is Public": true,
474
- "Disk": 50,
475
- "ID": "20347a07-a289-4c07-a645-93cb5e8e2d30"
476
- },
477
- {
478
- "Name": "win-eg-7-ssd",
479
- "RAM": 7000,
480
- "Ephemeral": 0,
481
- "VCPUs": 2,
482
- "Is Public": true,
483
- "Disk": 100,
484
- "ID": "20689394-bd77-4f4d-900e-52cc8a86aeb4"
485
- },
486
- {
487
- "Name": "win-sp-60-ssd-flex",
488
- "RAM": 60000,
489
- "Ephemeral": 0,
490
- "VCPUs": 4,
491
- "Is Public": true,
492
- "Disk": 50,
493
- "ID": "21104d99-ba7b-47a0-9133-7e884710089b"
494
- },
495
- {
496
- "Name": "win-sp-120-ssd",
497
- "RAM": 120000,
498
- "Ephemeral": 0,
499
- "VCPUs": 8,
500
- "Is Public": true,
501
- "Disk": 400,
502
- "ID": "23c21ecc-9ee8-4ad3-bd9f-aa17a3faf84e"
503
- },
504
- {
505
- "Name": "win-hg-15-ssd",
506
- "RAM": 15000,
507
- "Ephemeral": 0,
508
- "VCPUs": 4,
509
- "Is Public": true,
510
- "Disk": 200,
511
- "ID": "24e293ed-bc54-4f26-8fb7-7b9457d08e66"
512
- },
513
- {
514
- "Name": "eg-15-ssd-flex",
515
- "RAM": 15000,
516
- "Ephemeral": 0,
517
- "VCPUs": 4,
518
- "Is Public": true,
519
- "Disk": 50,
520
- "ID": "25f3534a-89e5-489d-aa8b-63f62e76875b"
521
- },
522
- {
523
- "Name": "win-eg-60",
524
- "RAM": 60000,
525
- "Ephemeral": 0,
526
- "VCPUs": 16,
527
- "Is Public": true,
528
- "Disk": 800,
529
- "ID": "291173f1-ea1d-410b-8045-667361a4addb"
530
- },
531
- {
532
- "Name": "sp-30-ssd-flex",
533
- "RAM": 30000,
534
- "Ephemeral": 0,
535
- "VCPUs": 2,
536
- "Is Public": true,
537
- "Disk": 50,
538
- "ID": "2b646463-2efa-428b-94ed-4059923c3636"
539
- },
540
- {
541
- "Name": "win-eg-120-flex",
542
- "RAM": 120000,
543
- "Ephemeral": 0,
544
- "VCPUs": 32,
545
- "Is Public": true,
546
- "Disk": 50,
547
- "ID": "2c74df82-29d2-4b1a-a32c-d5633e7359b4"
548
- },
549
- {
550
- "Name": "win-eg-15-ssd",
551
- "RAM": 15000,
552
- "Ephemeral": 0,
553
- "VCPUs": 4,
554
- "Is Public": true,
555
- "Disk": 200,
556
- "ID": "2fe4344f-d701-4bc4-8dcd-6d0b5d83fa13"
557
- },
558
- {
559
- "Name": "sp-30-flex",
560
- "RAM": 30000,
561
- "Ephemeral": 0,
562
- "VCPUs": 2,
563
- "Is Public": true,
564
- "Disk": 50,
565
- "ID": "31487b30-eeb6-472f-a9b6-38ace6587ebc"
566
- },
567
- {
568
- "Name": "win-sp-240-ssd",
569
- "RAM": 240000,
570
- "Ephemeral": 0,
571
- "VCPUs": 16,
572
- "Is Public": true,
573
- "Disk": 800,
574
- "ID": "325b602f-ecc4-4444-90bd-5a2cf4e0da53"
575
- },
576
- {
577
- "Name": "win-hg-7",
578
- "RAM": 7000,
579
- "Ephemeral": 0,
580
- "VCPUs": 2,
581
- "Is Public": true,
582
- "Disk": 200,
583
- "ID": "377ded36-491f-4ad7-9eb4-876798b2aea9"
584
- },
585
- {
586
- "Name": "sp-30-ssd",
587
- "RAM": 30000,
588
- "Ephemeral": 0,
589
- "VCPUs": 2,
590
- "Is Public": true,
591
- "Disk": 100,
592
- "ID": "382f2831-4dba-40c4-bb7a-6fadff71c4db"
593
- },
594
- {
595
- "Name": "hg-30",
596
- "RAM": 30000,
597
- "Ephemeral": 0,
598
- "VCPUs": 8,
599
- "Is Public": true,
600
- "Disk": 800,
601
- "ID": "3c1d6170-0097-4b5c-a3b3-adff1b7a86e0"
602
- },
603
- {
604
- "Name": "hg-60-flex",
605
- "RAM": 60000,
606
- "Ephemeral": 0,
607
- "VCPUs": 16,
608
- "Is Public": true,
609
- "Disk": 50,
610
- "ID": "3c669730-b5cd-4e44-8bd2-bc8d9f984ab2"
611
- },
612
- {
613
- "Name": "sp-240-ssd-flex",
614
- "RAM": 240000,
615
- "Ephemeral": 0,
616
- "VCPUs": 16,
617
- "Is Public": true,
618
- "Disk": 50,
619
- "ID": "3d66fea3-26f2-4195-97ab-fdea3b836099"
620
- },
621
- {
622
- "Name": "sp-240-flex",
623
- "RAM": 240000,
624
- "Ephemeral": 0,
625
- "VCPUs": 16,
626
- "Is Public": true,
627
- "Disk": 50,
628
- "ID": "40c781f7-d7a7-4b0d-bcca-5304aeabbcd9"
629
- },
630
- {
631
- "Name": "hg-7-flex",
632
- "RAM": 7000,
633
- "Ephemeral": 0,
634
- "VCPUs": 2,
635
- "Is Public": true,
636
- "Disk": 50,
637
- "ID": "42730e52-147d-46b8-9546-18e31e5ac8a9"
638
- },
639
- {
640
- "Name": "eg-30-ssd",
641
- "RAM": 30000,
642
- "Ephemeral": 0,
643
- "VCPUs": 8,
644
- "Is Public": true,
645
- "Disk": 400,
646
- "ID": "463f30e9-7d7a-4693-944f-142067cf553b"
647
- },
648
- {
649
- "Name": "hg-15-flex",
650
- "RAM": 15000,
651
- "Ephemeral": 0,
652
- "VCPUs": 4,
653
- "Is Public": true,
654
- "Disk": 50,
655
- "ID": "534f07c6-91af-44c8-9e62-156360fe8359"
656
- },
657
- {
658
- "Name": "win-sp-30-flex",
659
- "RAM": 30000,
660
- "Ephemeral": 0,
661
- "VCPUs": 2,
662
- "Is Public": true,
663
- "Disk": 50,
664
- "ID": "55533fdf-ad57-4aa7-a2c6-ee31bb94e77b"
665
- },
666
- {
667
- "Name": "win-hg-60-ssd-flex",
668
- "RAM": 60000,
669
- "Ephemeral": 0,
670
- "VCPUs": 16,
671
- "Is Public": true,
672
- "Disk": 50,
673
- "ID": "58b24234-3804-4c4f-9eb6-5406a3a13758"
674
- },
675
- {
676
- "Name": "hg-7-ssd-flex",
677
- "RAM": 7000,
678
- "Ephemeral": 0,
679
- "VCPUs": 2,
680
- "Is Public": true,
681
- "Disk": 50,
682
- "ID": "596c1276-8e53-40a0-b183-cdd9e9b1907d"
683
- },
684
- {
685
- "Name": "win-hg-30-ssd",
686
- "RAM": 30000,
687
- "Ephemeral": 0,
688
- "VCPUs": 8,
689
- "Is Public": true,
690
- "Disk": 400,
691
- "ID": "5c54dc08-28b9-4860-9f24-a2451b2a28ec"
692
- },
693
- {
694
- "Name": "eg-7",
695
- "RAM": 7000,
696
- "Ephemeral": 0,
697
- "VCPUs": 2,
698
- "Is Public": true,
699
- "Disk": 200,
700
- "ID": "5e409dbc-3f4b-46e8-a629-a418c8497922"
701
- },
702
- {
703
- "Name": "hg-30-flex",
704
- "RAM": 30000,
705
- "Ephemeral": 0,
706
- "VCPUs": 8,
707
- "Is Public": true,
708
- "Disk": 50,
709
- "ID": "656423ea-0551-48c6-9e0f-ec6e15952029"
710
- },
711
- {
712
- "Name": "hg-15",
713
- "RAM": 15000,
714
- "Ephemeral": 0,
715
- "VCPUs": 4,
716
- "Is Public": true,
717
- "Disk": 400,
718
- "ID": "675558ea-04fe-47a2-83de-40be9b2eacd4"
719
- },
720
- {
721
- "Name": "eg-60-flex",
722
- "RAM": 60000,
723
- "Ephemeral": 0,
724
- "VCPUs": 16,
725
- "Is Public": true,
726
- "Disk": 50,
727
- "ID": "68a8e4e1-d291-46e8-a724-fbb1c4b9b051"
728
- },
729
- {
730
- "Name": "hg-30-ssd",
731
- "RAM": 30000,
732
- "Ephemeral": 0,
733
- "VCPUs": 8,
734
- "Is Public": true,
735
- "Disk": 400,
736
- "ID": "6ab72807-e0a5-4e9f-bbb9-7cbbf0038b26"
737
- },
738
- {
739
- "Name": "win-hg-30",
740
- "RAM": 30000,
741
- "Ephemeral": 0,
742
- "VCPUs": 8,
743
- "Is Public": true,
744
- "Disk": 800,
745
- "ID": "6e12cae3-0492-483c-aa39-54a0dcaf86dd"
746
- },
747
- {
748
- "Name": "win-hg-7-ssd",
749
- "RAM": 7000,
750
- "Ephemeral": 0,
751
- "VCPUs": 2,
752
- "Is Public": true,
753
- "Disk": 100,
754
- "ID": "6ead771c-e8b9-424c-afa0-671280416422"
755
- },
756
- {
757
- "Name": "win-hg-30-flex",
758
- "RAM": 30000,
759
- "Ephemeral": 0,
760
- "VCPUs": 8,
761
- "Is Public": true,
762
- "Disk": 50,
763
- "ID": "70ded741-8f58-4bb9-8cfd-5e838b66b5f3"
764
- },
765
- {
766
- "Name": "win-sp-30-ssd-flex",
767
- "RAM": 30000,
768
- "Ephemeral": 0,
769
- "VCPUs": 2,
770
- "Is Public": true,
771
- "Disk": 50,
772
- "ID": "7284d104-a260-421d-8cee-6dc905107b25"
773
- },
774
- {
775
- "Name": "win-eg-120-ssd",
776
- "RAM": 120000,
777
- "Ephemeral": 0,
778
- "VCPUs": 32,
779
- "Is Public": true,
780
- "Disk": 800,
781
- "ID": "72c0b262-855d-40bb-a3e9-fd989a1bc466"
782
- },
783
- {
784
- "Name": "win-hg-7-flex",
785
- "RAM": 7000,
786
- "Ephemeral": 0,
787
- "VCPUs": 2,
788
- "Is Public": true,
789
- "Disk": 50,
790
- "ID": "73961591-c5f1-436f-b641-1a506eddaef4"
791
- },
792
- {
793
- "Name": "sp-240-ssd",
794
- "RAM": 240000,
795
- "Ephemeral": 0,
796
- "VCPUs": 16,
797
- "Is Public": true,
798
- "Disk": 800,
799
- "ID": "7568d834-3b16-42ce-a2c1-0654e0781160"
800
- },
801
- {
802
- "Name": "win-eg-60-ssd",
803
- "RAM": 60000,
804
- "Ephemeral": 0,
805
- "VCPUs": 16,
806
- "Is Public": true,
807
- "Disk": 800,
808
- "ID": "75f7fe5c-f87a-41d8-a961-a0169d02c268"
809
- },
810
- {
811
- "Name": "eg-7-ssd-flex",
812
- "RAM": 7000,
813
- "Ephemeral": 0,
814
- "VCPUs": 2,
815
- "Is Public": true,
816
- "Disk": 50,
817
- "ID": "77e1db73-0b36-4e37-8e47-32c2d2437ca9"
818
- },
819
- {
820
- "Name": "eg-60-ssd-flex",
821
- "RAM": 60000,
822
- "Ephemeral": 0,
823
- "VCPUs": 16,
824
- "Is Public": true,
825
- "Disk": 50,
826
- "ID": "78df4e30-98ca-4362-af68-037d958edaf0"
827
- },
828
- {
829
- "Name": "vps-ssd-2",
830
- "RAM": 4000,
831
- "Ephemeral": 0,
832
- "VCPUs": 1,
833
- "Is Public": true,
834
- "Disk": 20,
835
- "ID": "7939cc5c-79b1-45c0-be2d-aa935d92faa1"
836
- },
837
- {
838
- "Name": "sp-60",
839
- "RAM": 60000,
840
- "Ephemeral": 0,
841
- "VCPUs": 4,
842
- "Is Public": true,
843
- "Disk": 400,
844
- "ID": "80d8510a-79cc-4307-8db7-d1965c9e8ddb"
845
- },
846
- {
847
- "Name": "win-hg-120-ssd-flex",
848
- "RAM": 120000,
849
- "Ephemeral": 0,
850
- "VCPUs": 32,
851
- "Is Public": true,
852
- "Disk": 50,
853
- "ID": "835e734a-46b6-4cb2-be68-e8678fd71059"
854
- },
855
- {
856
- "Name": "win-eg-7",
857
- "RAM": 7000,
858
- "Ephemeral": 0,
859
- "VCPUs": 2,
860
- "Is Public": true,
861
- "Disk": 200,
862
- "ID": "84869b00-b43a-4523-babd-d47d206694e9"
863
- },
864
- {
865
- "Name": "win-eg-7-ssd-flex",
866
- "RAM": 7000,
867
- "Ephemeral": 0,
868
- "VCPUs": 2,
869
- "Is Public": true,
870
- "Disk": 50,
871
- "ID": "852308f8-b8bf-44a4-af41-cbc27437b275"
872
- },
873
- {
874
- "Name": "win-sp-30",
875
- "RAM": 30000,
876
- "Ephemeral": 0,
877
- "VCPUs": 2,
878
- "Is Public": true,
879
- "Disk": 200,
880
- "ID": "8be9dc29-3eca-499b-ae2d-e3c99699131a"
881
- },
882
- {
883
- "Name": "win-hg-7-ssd-flex",
884
- "RAM": 7000,
885
- "Ephemeral": 0,
886
- "VCPUs": 2,
887
- "Is Public": true,
888
- "Disk": 50,
889
- "ID": "8d704cfd-05b2-4d4a-add2-e2868bcc081f"
890
- },
891
- {
892
- "Name": "eg-30",
893
- "RAM": 30000,
894
- "Ephemeral": 0,
895
- "VCPUs": 8,
896
- "Is Public": true,
897
- "Disk": 800,
898
- "ID": "901f77c2-73f6-4fae-b28a-18b829b55a17"
899
- },
900
- {
901
- "Name": "sp-60-ssd-flex",
902
- "RAM": 60000,
903
- "Ephemeral": 0,
904
- "VCPUs": 4,
905
- "Is Public": true,
906
- "Disk": 50,
907
- "ID": "944b92fb-9a0c-406d-bb9f-a1d93cda9f01"
908
- },
909
- {
910
- "Name": "eg-30-flex",
911
- "RAM": 30000,
912
- "Ephemeral": 0,
913
- "VCPUs": 8,
914
- "Is Public": true,
915
- "Disk": 50,
916
- "ID": "965472c7-eb54-4d4d-bd6e-01ebb694a631"
917
- },
918
- {
919
- "Name": "sp-120-ssd",
920
- "RAM": 120000,
921
- "Ephemeral": 0,
922
- "VCPUs": 8,
923
- "Is Public": true,
924
- "Disk": 400,
925
- "ID": "97824a8c-e683-49a8-a70a-ead64240395c"
926
- },
927
- {
928
- "Name": "hg-60-ssd",
929
- "RAM": 60000,
930
- "Ephemeral": 0,
931
- "VCPUs": 16,
932
- "Is Public": true,
933
- "Disk": 800,
934
- "ID": "9831d7f1-3e79-483d-8958-88e3952c7ea2"
935
- },
936
- {
937
- "Name": "eg-60",
938
- "RAM": 60000,
939
- "Ephemeral": 0,
940
- "VCPUs": 16,
941
- "Is Public": true,
942
- "Disk": 1600,
943
- "ID": "9e1f13d0-4fcc-4abc-a9e6-9c76d662c92d"
944
- },
945
- {
946
- "Name": "win-eg-30-ssd",
947
- "RAM": 30000,
948
- "Ephemeral": 0,
949
- "VCPUs": 8,
950
- "Is Public": true,
951
- "Disk": 400,
952
- "ID": "9e6b85fa-6f37-45ce-a3d6-11ab40a28fad"
953
- },
954
- {
955
- "Name": "hg-120-flex",
956
- "RAM": 120000,
957
- "Ephemeral": 0,
958
- "VCPUs": 32,
959
- "Is Public": true,
960
- "Disk": 50,
961
- "ID": "9ed787cc-a0db-400b-8cc1-49b6384a1000"
962
- },
963
- {
964
- "Name": "sp-120-flex",
965
- "RAM": 120000,
966
- "Ephemeral": 0,
967
- "VCPUs": 8,
968
- "Is Public": true,
969
- "Disk": 50,
970
- "ID": "9f3cfdf7-b850-47cc-92be-33aefbfd2b05"
971
- },
972
- {
973
- "Name": "hg-60-ssd-flex",
974
- "RAM": 60000,
975
- "Ephemeral": 0,
976
- "VCPUs": 16,
977
- "Is Public": true,
978
- "Disk": 50,
979
- "ID": "a37bdf17-e1b1-41cc-a67f-ed665a120446"
980
- },
981
- {
982
- "Name": "win-hg-120-ssd",
983
- "RAM": 120000,
984
- "Ephemeral": 0,
985
- "VCPUs": 32,
986
- "Is Public": true,
987
- "Disk": 800,
988
- "ID": "aa753e73-dadb-4528-9c4a-24e36fc41bf4"
989
- },
990
- {
991
- "Name": "win-sp-240-ssd-flex",
992
- "RAM": 240000,
993
- "Ephemeral": 0,
994
- "VCPUs": 16,
995
- "Is Public": true,
996
- "Disk": 50,
997
- "ID": "abc007b8-cc44-4b6b-9606-fd647b03e101"
998
- },
999
- {
1000
- "Name": "sp-120",
1001
- "RAM": 120000,
1002
- "Ephemeral": 0,
1003
- "VCPUs": 8,
1004
- "Is Public": true,
1005
- "Disk": 800,
1006
- "ID": "ac74cb45-d895-47dd-b9cf-c17778033d83"
1007
- },
1008
- {
1009
- "Name": "win-hg-15",
1010
- "RAM": 15000,
1011
- "Ephemeral": 0,
1012
- "VCPUs": 4,
1013
- "Is Public": true,
1014
- "Disk": 400,
1015
- "ID": "ae900175-72bd-4fbc-8ab2-4673b468aa5b"
1016
- },
1017
- {
1018
- "Name": "win-eg-15-ssd-flex",
1019
- "RAM": 15000,
1020
- "Ephemeral": 0,
1021
- "VCPUs": 4,
1022
- "Is Public": true,
1023
- "Disk": 50,
1024
- "ID": "aeb37dbf-d7c9-4fd7-93f1-f3818e488ede"
1025
- },
1026
- {
1027
- "Name": "hg-7-ssd",
1028
- "RAM": 7000,
1029
- "Ephemeral": 0,
1030
- "VCPUs": 2,
1031
- "Is Public": true,
1032
- "Disk": 100,
1033
- "ID": "b1dc776c-b6e3-4a96-b230-850f570db3d5"
1034
- },
1035
- {
1036
- "Name": "sp-60-ssd",
1037
- "RAM": 60000,
1038
- "Ephemeral": 0,
1039
- "VCPUs": 4,
1040
- "Is Public": true,
1041
- "Disk": 200,
1042
- "ID": "b24df495-10f3-466e-95ab-26f0f6839a2f"
1043
- },
1044
- {
1045
- "Name": "win-hg-120",
1046
- "RAM": 120000,
1047
- "Ephemeral": 0,
1048
- "VCPUs": 32,
1049
- "Is Public": true,
1050
- "Disk": 1600,
1051
- "ID": "b798e44e-bf71-488c-9335-f20bf5976547"
1052
- },
1053
- {
1054
- "Name": "eg-7-ssd",
1055
- "RAM": 7000,
1056
- "Ephemeral": 0,
1057
- "VCPUs": 2,
1058
- "Is Public": true,
1059
- "Disk": 100,
1060
- "ID": "b94e6623-913d-4147-b2a3-34ccf6fe7a5e"
1061
- },
1062
- {
1063
- "Name": "eg-15-flex",
1064
- "RAM": 15000,
1065
- "Ephemeral": 0,
1066
- "VCPUs": 4,
1067
- "Is Public": true,
1068
- "Disk": 50,
1069
- "ID": "bb5fdda8-34ec-40c8-a4e3-308b9e2c9ee2"
1070
- },
1071
- {
1072
- "Name": "win-eg-7-flex",
1073
- "RAM": 7000,
1074
- "Ephemeral": 0,
1075
- "VCPUs": 2,
1076
- "Is Public": true,
1077
- "Disk": 50,
1078
- "ID": "c65384f6-4665-461a-a292-2f3f5a016244"
1079
- },
1080
- {
1081
- "Name": "eg-60-ssd",
1082
- "RAM": 60000,
1083
- "Ephemeral": 0,
1084
- "VCPUs": 16,
1085
- "Is Public": true,
1086
- "Disk": 800,
1087
- "ID": "c678f1a8-6542-4f9d-89af-ffc98715d674"
1088
- },
1089
- {
1090
- "Name": "hg-30-ssd-flex",
1091
- "RAM": 30000,
1092
- "Ephemeral": 0,
1093
- "VCPUs": 8,
1094
- "Is Public": true,
1095
- "Disk": 50,
1096
- "ID": "d147a094-b653-41e7-9250-8d4da3044334"
1097
- },
1098
- {
1099
- "Name": "sp-30",
1100
- "RAM": 30000,
1101
- "Ephemeral": 0,
1102
- "VCPUs": 2,
1103
- "Is Public": true,
1104
- "Disk": 200,
1105
- "ID": "d1acf88d-6f55-4c5c-a914-4ecbdbd50d6b"
1106
- },
1107
- {
1108
- "Name": "sp-120-ssd-flex",
1109
- "RAM": 120000,
1110
- "Ephemeral": 0,
1111
- "VCPUs": 8,
1112
- "Is Public": true,
1113
- "Disk": 50,
1114
- "ID": "d2d33e8e-58b1-4661-8141-826c47f82166"
1115
- },
1116
- {
1117
- "Name": "hg-120-ssd-flex",
1118
- "RAM": 120000,
1119
- "Ephemeral": 0,
1120
- "VCPUs": 32,
1121
- "Is Public": true,
1122
- "Disk": 50,
1123
- "ID": "d7322c37-9881-4a57-9b40-2499fe2e8f42"
1124
- },
1125
- {
1126
- "Name": "win-hg-15-flex",
1127
- "RAM": 15000,
1128
- "Ephemeral": 0,
1129
- "VCPUs": 4,
1130
- "Is Public": true,
1131
- "Disk": 50,
1132
- "ID": "daf597ea-fbbc-4c71-a35e-5b41d33ccc6c"
1133
- },
1134
- {
1135
- "Name": "win-hg-30-ssd-flex",
1136
- "RAM": 30000,
1137
- "Ephemeral": 0,
1138
- "VCPUs": 8,
1139
- "Is Public": true,
1140
- "Disk": 50,
1141
- "ID": "dcfd834c-3932-47a3-8b4b-cdfeecdfde2c"
1142
- },
1143
- {
1144
- "Name": "win-hg-60",
1145
- "RAM": 60000,
1146
- "Ephemeral": 0,
1147
- "VCPUs": 16,
1148
- "Is Public": true,
1149
- "Disk": 1600,
1150
- "ID": "def75cbd-a4b1-4f82-9152-90c65df9587b"
1151
- },
1152
- {
1153
- "Name": "eg-30-ssd-flex",
1154
- "RAM": 30000,
1155
- "Ephemeral": 0,
1156
- "VCPUs": 8,
1157
- "Is Public": true,
1158
- "Disk": 50,
1159
- "ID": "e04c7ad6-a5de-45f5-93c9-f3343bdfe8d1"
1160
- },
1161
- {
1162
- "Name": "vps-ssd-3",
1163
- "RAM": 8000,
1164
- "Ephemeral": 0,
1165
- "VCPUs": 2,
1166
- "Is Public": true,
1167
- "Disk": 40,
1168
- "ID": "e43d7458-6b82-4a78-a712-3a4dc6748cf4"
1169
- },
1170
- {
1171
- "Name": "win-eg-15-flex",
1172
- "RAM": 15000,
1173
- "Ephemeral": 0,
1174
- "VCPUs": 4,
1175
- "Is Public": true,
1176
- "Disk": 50,
1177
- "ID": "e8bd3402-7310-4a0f-8b99-d9212359c957"
1178
- },
1179
- {
1180
- "Name": "win-eg-30",
1181
- "RAM": 30000,
1182
- "Ephemeral": 0,
1183
- "VCPUs": 8,
1184
- "Is Public": true,
1185
- "Disk": 800,
1186
- "ID": "ebf7a997-e2f8-42f4-84f7-33a3d53d1af9"
1187
- },
1188
- {
1189
- "Name": "eg-120-flex",
1190
- "RAM": 120000,
1191
- "Ephemeral": 0,
1192
- "VCPUs": 32,
1193
- "Is Public": true,
1194
- "Disk": 50,
1195
- "ID": "ec852ed3-1e42-4c59-abc3-12bcd26abec8"
1196
- },
1197
- {
1198
- "Name": "sp-240",
1199
- "RAM": 240000,
1200
- "Ephemeral": 0,
1201
- "VCPUs": 16,
1202
- "Is Public": true,
1203
- "Disk": 1600,
1204
- "ID": "ed286e2c-769f-4c47-ac52-b8de7a4891f6"
1205
- },
1206
- {
1207
- "Name": "win-sp-60-ssd",
1208
- "RAM": 60000,
1209
- "Ephemeral": 0,
1210
- "VCPUs": 4,
1211
- "Is Public": true,
1212
- "Disk": 200,
1213
- "ID": "ed835a73-d9a0-43ee-bd89-999c51d8426d"
1214
- },
1215
- {
1216
- "Name": "win-eg-15",
1217
- "RAM": 15000,
1218
- "Ephemeral": 0,
1219
- "VCPUs": 4,
1220
- "Is Public": true,
1221
- "Disk": 400,
1222
- "ID": "f06056c1-a2d4-40e7-a7d8-e5bfabada72e"
1223
- },
1224
- {
1225
- "Name": "win-sp-120",
1226
- "RAM": 120000,
1227
- "Ephemeral": 0,
1228
- "VCPUs": 8,
1229
- "Is Public": true,
1230
- "Disk": 800,
1231
- "ID": "f247dc56-395b-49de-9a62-93ccc4fff4ed"
1232
- },
1233
- {
1234
- "Name": "eg-7-flex",
1235
- "RAM": 7000,
1236
- "Ephemeral": 0,
1237
- "VCPUs": 2,
1238
- "Is Public": true,
1239
- "Disk": 50,
1240
- "ID": "f476f959-ffa6-46f2-94d8-72293570604d"
1241
- },
1242
- {
1243
- "Name": "sp-60-flex",
1244
- "RAM": 60000,
1245
- "Ephemeral": 0,
1246
- "VCPUs": 4,
1247
- "Is Public": true,
1248
- "Disk": 50,
1249
- "ID": "f52db47a-315f-49d4-bc5c-67dd118e7ac0"
1250
- },
1251
- {
1252
- "Name": "win-hg-120-flex",
1253
- "RAM": 120000,
1254
- "Ephemeral": 0,
1255
- "VCPUs": 32,
1256
- "Is Public": true,
1257
- "Disk": 50,
1258
- "ID": "f6cb8144-5d98-4057-b44f-46da342fb571"
1259
- },
1260
- {
1261
- "Name": "hg-7",
1262
- "RAM": 7000,
1263
- "Ephemeral": 0,
1264
- "VCPUs": 2,
1265
- "Is Public": true,
1266
- "Disk": 200,
1267
- "ID": "fa3cc551-0358-4170-be64-56ea432b064c"
1268
- },
1269
- {
1270
- "Name": "hg-15-ssd",
1271
- "RAM": 15000,
1272
- "Ephemeral": 0,
1273
- "VCPUs": 4,
1274
- "Is Public": true,
1275
- "Disk": 200,
1276
- "ID": "ff48c2cf-c17f-4682-aaf6-31d66786f808"
1277
- }
1278
- ]"""
1279
-
1280
- @classmethod
1281
- def setup_class(self):
1282
- if 'OS_AUTH_URL' not in os.environ:
1283
- pytest.skip('no OS_AUTH_URL environment variable')
1284
-
1285
- @patch('teuthology.misc.sh')
1286
- def test_sorted_flavors(self, m_sh):
1287
- o = OpenStack()
1288
- select = '^(vps|hg)-.*ssd'
1289
- m_sh.return_value = TestOpenStack.flavors
1290
- flavors = o.get_sorted_flavors('arch', select)
1291
- assert [u'vps-ssd-1',
1292
- u'vps-ssd-2',
1293
- u'hg-7-ssd-flex',
1294
- u'hg-7-ssd',
1295
- u'vps-ssd-3',
1296
- u'hg-15-ssd-flex',
1297
- u'hg-15-ssd',
1298
- u'hg-30-ssd-flex',
1299
- u'hg-30-ssd',
1300
- u'hg-60-ssd-flex',
1301
- u'hg-60-ssd',
1302
- u'hg-120-ssd-flex',
1303
- u'hg-120-ssd',
1304
- ] == [ f['Name'] for f in flavors ]
1305
- m_sh.assert_called_with("openstack --quiet flavor list -f json")
1306
-
1307
- def test_flavor(self):
1308
- def get_sorted_flavors(self, arch, select):
1309
- return [
1310
- {
1311
- 'Name': 'too_small',
1312
- 'RAM': 2048,
1313
- 'Disk': 50,
1314
- 'VCPUs': 1,
1315
- },
1316
- ]
1317
- with patch.multiple(
1318
- OpenStack,
1319
- get_sorted_flavors=get_sorted_flavors,
1320
- ):
1321
- with pytest.raises(NoFlavorException):
1322
- hint = { 'ram': 1000, 'disk': 40, 'cpus': 2 }
1323
- OpenStack().flavor(hint, 'arch')
1324
-
1325
- flavor = 'good-flavor'
1326
- def get_sorted_flavors(self, arch, select):
1327
- return [
1328
- {
1329
- 'Name': flavor,
1330
- 'RAM': 2048,
1331
- 'Disk': 50,
1332
- 'VCPUs': 2,
1333
- },
1334
- ]
1335
- with patch.multiple(
1336
- OpenStack,
1337
- get_sorted_flavors=get_sorted_flavors,
1338
- ):
1339
- hint = { 'ram': 1000, 'disk': 40, 'cpus': 2 }
1340
- assert flavor == OpenStack().flavor(hint, 'arch')
1341
-
1342
- def test_flavor_range(self):
1343
- flavors = [
1344
- {
1345
- 'Name': 'too_small',
1346
- 'RAM': 2048,
1347
- 'Disk': 50,
1348
- 'VCPUs': 1,
1349
- },
1350
- ]
1351
- def get_sorted_flavors(self, arch, select):
1352
- return flavors
1353
-
1354
- min = { 'ram': 1000, 'disk': 40, 'cpus': 2 }
1355
- good = { 'ram': 4000, 'disk': 40, 'cpus': 2 }
1356
-
1357
- #
1358
- # there are no flavors in the required range
1359
- #
1360
- with patch.multiple(
1361
- OpenStack,
1362
- get_sorted_flavors=get_sorted_flavors,
1363
- ):
1364
- with pytest.raises(NoFlavorException):
1365
- OpenStack().flavor_range(min, good, 'arch')
1366
-
1367
- #
1368
- # there is one flavor in the required range
1369
- #
1370
- flavors.append({
1371
- 'Name': 'min',
1372
- 'RAM': 2048,
1373
- 'Disk': 40,
1374
- 'VCPUs': 2,
1375
- })
1376
-
1377
- with patch.multiple(
1378
- OpenStack,
1379
- get_sorted_flavors=get_sorted_flavors,
1380
- ):
1381
-
1382
- assert 'min' == OpenStack().flavor_range(min, good, 'arch')
1383
-
1384
- #
1385
- # out of the two flavors in the required range, get the bigger one
1386
- #
1387
- flavors.append({
1388
- 'Name': 'good',
1389
- 'RAM': 3000,
1390
- 'Disk': 40,
1391
- 'VCPUs': 2,
1392
- })
1393
-
1394
- with patch.multiple(
1395
- OpenStack,
1396
- get_sorted_flavors=get_sorted_flavors,
1397
- ):
1398
-
1399
- assert 'good' == OpenStack().flavor_range(min, good, 'arch')
1400
-
1401
- #
1402
- # there is one flavor bigger or equal to good, get this one
1403
- #
1404
- flavors.append({
1405
- 'Name': 'best',
1406
- 'RAM': 4000,
1407
- 'Disk': 40,
1408
- 'VCPUs': 2,
1409
- })
1410
-
1411
- with patch.multiple(
1412
- OpenStack,
1413
- get_sorted_flavors=get_sorted_flavors,
1414
- ):
1415
-
1416
- assert 'best' == OpenStack().flavor_range(min, good, 'arch')
1417
-
1418
- #
1419
- # there are two flavors bigger or equal to good, get the smallest one
1420
- #
1421
- flavors.append({
1422
- 'Name': 'too_big',
1423
- 'RAM': 30000,
1424
- 'Disk': 400,
1425
- 'VCPUs': 20,
1426
- })
1427
-
1428
- with patch.multiple(
1429
- OpenStack,
1430
- get_sorted_flavors=get_sorted_flavors,
1431
- ):
1432
-
1433
- assert 'best' == OpenStack().flavor_range(min, good, 'arch')
1434
-
1435
-
1436
- def test_interpret_hints(self):
1437
- defaults = {
1438
- 'machine': {
1439
- 'ram': 0,
1440
- 'disk': 0,
1441
- 'cpus': 0,
1442
- },
1443
- 'volumes': {
1444
- 'count': 0,
1445
- 'size': 0,
1446
- },
1447
- }
1448
- expected_disk = 10 # first hint larger than the second
1449
- expected_ram = 20 # second hint larger than the first
1450
- expected_cpus = 0 # not set, hence zero by default
1451
- expected_count = 30 # second hint larger than the first
1452
- expected_size = 40 # does not exist in the first hint
1453
- hints = [
1454
- {
1455
- 'machine': {
1456
- 'ram': 2,
1457
- 'disk': expected_disk,
1458
- },
1459
- 'volumes': {
1460
- 'count': 9,
1461
- 'size': expected_size,
1462
- },
1463
- },
1464
- {
1465
- 'machine': {
1466
- 'ram': expected_ram,
1467
- 'disk': 3,
1468
- },
1469
- 'volumes': {
1470
- 'count': expected_count,
1471
- },
1472
- },
1473
- ]
1474
- hint = OpenStack().interpret_hints(defaults, hints)
1475
- assert hint == {
1476
- 'machine': {
1477
- 'ram': expected_ram,
1478
- 'disk': expected_disk,
1479
- 'cpus': expected_cpus,
1480
- },
1481
- 'volumes': {
1482
- 'count': expected_count,
1483
- 'size': expected_size,
1484
- }
1485
- }
1486
- assert defaults == OpenStack().interpret_hints(defaults, None)
1487
-
1488
- def test_get_provider(self):
1489
- auth = os.environ.get('OS_AUTH_URL', None)
1490
- os.environ['OS_AUTH_URL'] = 'cloud.ovh.net'
1491
- assert OpenStack().get_provider() == 'ovh'
1492
- if auth != None:
1493
- os.environ['OS_AUTH_URL'] = auth
1494
- else:
1495
- del os.environ['OS_AUTH_URL']
1496
-
1497
- def test_get_os_url(self):
1498
- o = OpenStack()
1499
- #
1500
- # Only for OVH
1501
- #
1502
- o.provider = 'something'
1503
- assert "" == o.get_os_url("server ")
1504
- o.provider = 'ovh'
1505
- assert "" == o.get_os_url("unknown ")
1506
- type2cmd = {
1507
- 'compute': ('server', 'flavor'),
1508
- 'network': ('ip', 'security', 'network'),
1509
- 'image': ('image',),
1510
- 'volume': ('volume',),
1511
- }
1512
- os.environ['OS_REGION_NAME'] = 'REGION'
1513
- os.environ['OS_TENANT_ID'] = 'TENANT'
1514
- for (type, cmds) in type2cmd.items():
1515
- for cmd in cmds:
1516
- assert ("//" + type) in o.get_os_url(cmd + " ")
1517
- for type in type2cmd.keys():
1518
- assert ("//" + type) in o.get_os_url("whatever ", type=type)
1519
-
1520
- @patch('teuthology.misc.sh')
1521
- def test_cache_token(self, m_sh):
1522
- token = 'TOKEN VALUE'
1523
- m_sh.return_value = token
1524
- OpenStack.token = None
1525
- o = OpenStack()
1526
- #
1527
- # Only for OVH
1528
- #
1529
- o.provider = 'something'
1530
- assert False == o.cache_token()
1531
- o.provider = 'ovh'
1532
- #
1533
- # Set the environment with the token
1534
- #
1535
- assert 'OS_TOKEN_VALUE' not in os.environ
1536
- assert 'OS_TOKEN_EXPIRES' not in os.environ
1537
- assert True == o.cache_token()
1538
- m_sh.assert_called_with('openstack -q token issue -c id -f value')
1539
- assert token == os.environ['OS_TOKEN_VALUE']
1540
- assert token == OpenStack.token
1541
- assert time.time() < int(os.environ['OS_TOKEN_EXPIRES'])
1542
- assert time.time() < OpenStack.token_expires
1543
- #
1544
- # Reset after it expires
1545
- #
1546
- token_expires = int(time.time()) - 2000
1547
- OpenStack.token_expires = token_expires
1548
- assert True == o.cache_token()
1549
- assert time.time() < int(os.environ['OS_TOKEN_EXPIRES'])
1550
- assert time.time() < OpenStack.token_expires
1551
-
1552
- @patch('teuthology.misc.sh')
1553
- def test_cache_token_from_environment(self, m_sh):
1554
- OpenStack.token = None
1555
- o = OpenStack()
1556
- o.provider = 'ovh'
1557
- token = 'TOKEN VALUE'
1558
- os.environ['OS_TOKEN_VALUE'] = token
1559
- token_expires = int(time.time()) + OpenStack.token_cache_duration
1560
- os.environ['OS_TOKEN_EXPIRES'] = str(token_expires)
1561
- assert True == o.cache_token()
1562
- assert token == OpenStack.token
1563
- assert token_expires == OpenStack.token_expires
1564
- m_sh.assert_not_called()
1565
-
1566
- @patch('teuthology.misc.sh')
1567
- def test_cache_token_expired_environment(self, m_sh):
1568
- token = 'TOKEN VALUE'
1569
- m_sh.return_value = token
1570
- OpenStack.token = None
1571
- o = OpenStack()
1572
- o.provider = 'ovh'
1573
- os.environ['OS_TOKEN_VALUE'] = token
1574
- token_expires = int(time.time()) - 2000
1575
- os.environ['OS_TOKEN_EXPIRES'] = str(token_expires)
1576
- assert True == o.cache_token()
1577
- m_sh.assert_called_with('openstack -q token issue -c id -f value')
1578
- assert token == os.environ['OS_TOKEN_VALUE']
1579
- assert token == OpenStack.token
1580
- assert time.time() < int(os.environ['OS_TOKEN_EXPIRES'])
1581
- assert time.time() < OpenStack.token_expires
1582
-
1583
- class TestTeuthologyOpenStack(TestOpenStackBase):
1584
-
1585
- @classmethod
1586
- def setup_class(self):
1587
- if 'OS_AUTH_URL' not in os.environ:
1588
- pytest.skip('no OS_AUTH_URL environment variable')
1589
-
1590
- teuthology.log.setLevel(logging.DEBUG)
1591
- set_config_attr(argparse.Namespace())
1592
-
1593
- ip = TeuthologyOpenStack.create_floating_ip()
1594
- if ip:
1595
- ip_id = TeuthologyOpenStack.get_floating_ip_id(ip)
1596
- OpenStack().run("ip floating delete " + ip_id)
1597
- self.can_create_floating_ips = True
1598
- else:
1599
- self.can_create_floating_ips = False
1600
-
1601
- def setup(self):
1602
- super(TestTeuthologyOpenStack, self).setup()
1603
- self.key_filename = tempfile.mktemp()
1604
- self.key_name = 'teuthology-test'
1605
- self.name = 'teuthology-test'
1606
- self.clobber()
1607
- misc.sh("""
1608
- openstack keypair create {key_name} > {key_filename}
1609
- chmod 600 {key_filename}
1610
- """.format(key_filename=self.key_filename,
1611
- key_name=self.key_name))
1612
- self.options = ['--key-name', self.key_name,
1613
- '--key-filename', self.key_filename,
1614
- '--name', self.name,
1615
- '--verbose']
1616
-
1617
- def teardown(self):
1618
- super(TestTeuthologyOpenStack, self).teardown()
1619
- self.clobber()
1620
- os.unlink(self.key_filename)
1621
-
1622
- def clobber(self):
1623
- misc.sh("""
1624
- openstack server delete {name} --wait || true
1625
- openstack keypair delete {key_name} || true
1626
- """.format(key_name=self.key_name,
1627
- name=self.name))
1628
-
1629
- def test_create(self, caplog):
1630
- teuthology_argv = [
1631
- '--suite', 'upgrade/hammer',
1632
- '--dry-run',
1633
- '--ceph', 'master',
1634
- '--kernel', 'distro',
1635
- '--flavor', 'gcov',
1636
- '--distro', 'ubuntu',
1637
- '--suite-branch', 'hammer',
1638
- '--email', 'loic@dachary.org',
1639
- '--num', '10',
1640
- '--limit', '23',
1641
- '--subset', '1/2',
1642
- '--priority', '101',
1643
- '--timeout', '234',
1644
- '--filter', 'trasher',
1645
- '--filter-out', 'erasure-code',
1646
- '--throttle', '3',
1647
- ]
1648
- archive_upload = 'user@archive:/tmp'
1649
- argv = (self.options +
1650
- ['--teuthology-git-url', 'TEUTHOLOGY_URL',
1651
- '--teuthology-branch', 'TEUTHOLOGY_BRANCH',
1652
- '--ceph-workbench-git-url', 'CEPH_WORKBENCH_URL',
1653
- '--ceph-workbench-branch', 'CEPH_WORKBENCH_BRANCH',
1654
- '--upload',
1655
- '--archive-upload', archive_upload] +
1656
- teuthology_argv)
1657
- args = scripts.openstack.parse_args(argv)
1658
- teuthology_argv.extend([
1659
- '--archive-upload', archive_upload,
1660
- '--archive-upload-url', args.archive_upload_url,
1661
- ])
1662
- teuthology = TeuthologyOpenStack(args, None, argv)
1663
- teuthology.user_data = 'teuthology/openstack/test/user-data-test1.txt'
1664
- teuthology.teuthology_suite = 'echo --'
1665
-
1666
- teuthology.main()
1667
- assert 0 == teuthology.ssh("lsb_release -a")
1668
- assert 0 == teuthology.ssh("grep 'substituded variables' /var/log/cloud-init.log")
1669
- l = caplog.text
1670
- assert 'Ubuntu 14.04' in l
1671
- assert "nworkers=" + str(args.simultaneous_jobs) in l
1672
- assert "username=" + teuthology.username in l
1673
- assert "upload=--archive-upload user@archive:/tmp" in l
1674
- assert ("ceph_workbench="
1675
- " --ceph-workbench-branch CEPH_WORKBENCH_BRANCH"
1676
- " --ceph-workbench-git-url CEPH_WORKBENCH_URL") in l
1677
- assert "clone=git clone -b TEUTHOLOGY_BRANCH TEUTHOLOGY_URL" in l
1678
- assert os.environ['OS_AUTH_URL'] in l
1679
- assert " ".join(teuthology_argv) in l
1680
-
1681
- if self.can_create_floating_ips:
1682
- ip = teuthology.get_floating_ip(self.name)
1683
- teuthology.teardown()
1684
- if self.can_create_floating_ips:
1685
- assert teuthology.get_floating_ip_id(ip) == None
1686
-
1687
- def test_floating_ip(self):
1688
- if not self.can_create_floating_ips:
1689
- pytest.skip('unable to create floating ips')
1690
-
1691
- expected = TeuthologyOpenStack.create_floating_ip()
1692
- ip = TeuthologyOpenStack.get_unassociated_floating_ip()
1693
- assert expected == ip
1694
- ip_id = TeuthologyOpenStack.get_floating_ip_id(ip)
1695
- OpenStack().run("ip floating delete " + ip_id)