teuthology 1.2.1__py3-none-any.whl → 1.2.2__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 (36) hide show
  1. scripts/node_cleanup.py +18 -2
  2. scripts/suite.py +2 -0
  3. teuthology/__init__.py +0 -1
  4. teuthology/config.py +28 -7
  5. teuthology/dispatcher/supervisor.py +9 -6
  6. teuthology/lock/cli.py +4 -2
  7. teuthology/lock/ops.py +10 -9
  8. teuthology/lock/query.py +28 -4
  9. teuthology/lock/util.py +1 -1
  10. teuthology/misc.py +13 -58
  11. teuthology/openstack/__init__.py +202 -176
  12. teuthology/openstack/setup-openstack.sh +52 -27
  13. teuthology/orchestra/opsys.py +15 -0
  14. teuthology/orchestra/remote.py +54 -2
  15. teuthology/orchestra/run.py +8 -2
  16. teuthology/provision/downburst.py +84 -43
  17. teuthology/provision/fog.py +2 -2
  18. teuthology/repo_utils.py +3 -1
  19. teuthology/run.py +1 -1
  20. teuthology/scrape.py +5 -2
  21. teuthology/suite/merge.py +3 -1
  22. teuthology/suite/run.py +51 -37
  23. teuthology/suite/util.py +2 -2
  24. teuthology/task/install/rpm.py +8 -16
  25. teuthology/task/internal/__init__.py +2 -1
  26. teuthology/task/internal/syslog.py +17 -13
  27. teuthology/task/kernel.py +1 -1
  28. {teuthology-1.2.1.dist-info → teuthology-1.2.2.dist-info}/METADATA +10 -8
  29. {teuthology-1.2.1.dist-info → teuthology-1.2.2.dist-info}/RECORD +36 -36
  30. {teuthology-1.2.1.dist-info → teuthology-1.2.2.dist-info}/WHEEL +1 -1
  31. {teuthology-1.2.1.data → teuthology-1.2.2.data}/scripts/adjust-ulimits +0 -0
  32. {teuthology-1.2.1.data → teuthology-1.2.2.data}/scripts/daemon-helper +0 -0
  33. {teuthology-1.2.1.data → teuthology-1.2.2.data}/scripts/stdin-killer +0 -0
  34. {teuthology-1.2.1.dist-info → teuthology-1.2.2.dist-info}/entry_points.txt +0 -0
  35. {teuthology-1.2.1.dist-info → teuthology-1.2.2.dist-info/licenses}/LICENSE +0 -0
  36. {teuthology-1.2.1.dist-info → teuthology-1.2.2.dist-info}/top_level.txt +0 -0
teuthology/suite/run.py CHANGED
@@ -7,16 +7,17 @@ import yaml
7
7
  import re
8
8
  import time
9
9
 
10
+ from pathlib import Path
11
+
10
12
  from humanfriendly import format_timespan
11
13
 
12
- from tempfile import NamedTemporaryFile
13
14
  from teuthology import repo_utils
14
15
 
15
16
  from teuthology.config import config, JobConfig
16
17
  from teuthology.exceptions import (
17
18
  BranchMismatchError, BranchNotFoundError, CommitNotFoundError,
18
19
  )
19
- from teuthology.misc import deep_merge, get_results_url
20
+ from teuthology.misc import deep_merge, get_results_url, update_key
20
21
  from teuthology.orchestra.opsys import OS
21
22
  from teuthology.repo_utils import build_git_url
22
23
 
@@ -45,10 +46,8 @@ class Run(object):
45
46
  # We assume timestamp is a datetime.datetime object
46
47
  self.timestamp = self.args.timestamp or \
47
48
  datetime.datetime.now().strftime(TIMESTAMP_FMT)
48
- self.user = self.args.user or pwd.getpwuid(os.getuid()).pw_name
49
-
49
+ self.user = self.args.owner or pwd.getpwuid(os.getuid()).pw_name
50
50
  self.name = self.make_run_name()
51
-
52
51
  if self.args.ceph_repo:
53
52
  config.ceph_git_url = self.args.ceph_repo
54
53
  if self.args.suite_repo:
@@ -108,7 +107,7 @@ class Run(object):
108
107
  self.suite_repo_path = self.args.suite_dir
109
108
  else:
110
109
  self.suite_repo_path = util.fetch_repos(
111
- suite_branch, test_name=self.name, dry_run=self.args.dry_run)
110
+ suite_branch, test_name=self.name, dry_run=self.args.dry_run, commit=suite_hash)
112
111
  teuthology_branch, teuthology_sha1 = self.choose_teuthology_branch()
113
112
 
114
113
 
@@ -169,13 +168,16 @@ class Run(object):
169
168
  # Put together a stanza specifying the kernel hash
170
169
  if self.args.kernel_branch == 'distro':
171
170
  kernel_hash = 'distro'
171
+ kernel_branch = 'distro'
172
172
  # Skip the stanza if '-k none' is given
173
173
  elif self.args.kernel_branch is None or \
174
174
  self.args.kernel_branch.lower() == 'none':
175
175
  kernel_hash = None
176
+ kernel_branch = None
176
177
  else:
178
+ kernel_branch = self.args.kernel_branch
177
179
  kernel_hash = util.get_gitbuilder_hash(
178
- 'kernel', self.args.kernel_branch, 'default',
180
+ 'kernel', kernel_branch, 'default',
179
181
  self.args.machine_type, self.args.distro,
180
182
  self.args.distro_version,
181
183
  )
@@ -191,7 +193,7 @@ class Run(object):
191
193
 
192
194
  if kernel_hash:
193
195
  log.info("kernel sha1: {hash}".format(hash=kernel_hash))
194
- kernel_dict = dict(kernel=dict(kdb=kdb, sha1=kernel_hash))
196
+ kernel_dict = dict(kernel=dict(branch=kernel_branch, kdb=kdb, sha1=kernel_hash))
195
197
  if kernel_hash != 'distro':
196
198
  kernel_dict['kernel']['flavor'] = 'default'
197
199
  else:
@@ -305,7 +307,7 @@ class Run(object):
305
307
  if not teuthology_branch:
306
308
  teuthology_branch = actual_branch
307
309
  teuthology_sha1 = util.git_ls_remote(
308
- f"file://{config.teuthology_path}",
310
+ f"file://{Path(config.teuthology_path).resolve()}",
309
311
  teuthology_branch
310
312
  )
311
313
  else:
@@ -367,14 +369,27 @@ class Run(object):
367
369
 
368
370
  def choose_suite_hash(self, suite_branch):
369
371
  suite_repo_name = self.suite_repo_name
370
- suite_repo_project_or_url = self.args.suite_repo or 'ceph-qa-suite'
371
- suite_hash = util.git_ls_remote(
372
- suite_repo_project_or_url,
373
- suite_branch
374
- )
375
- if not suite_hash:
376
- exc = BranchNotFoundError(suite_branch, suite_repo_name)
377
- util.schedule_fail(message=str(exc), name=self.name, dry_run=self.args.dry_run)
372
+ suite_hash = None
373
+ if self.args.suite_sha1:
374
+ suite_hash = self.args.suite_sha1
375
+ if self.args.validate_sha1:
376
+ suite_hash = util.git_validate_sha1(suite_repo_name, suite_hash)
377
+ if not suite_hash:
378
+ exc = CommitNotFoundError(
379
+ self.args.suite_sha1,
380
+ '%s.git' % suite_repo_name
381
+ )
382
+ util.schedule_fail(message=str(exc), name=self.name, dry_run=self.args.dry_run)
383
+ log.info("suite sha1 explicitly supplied")
384
+ else:
385
+ suite_repo_project_or_url = self.args.suite_repo or 'ceph-qa-suite'
386
+ suite_hash = util.git_ls_remote(
387
+ suite_repo_project_or_url,
388
+ suite_branch
389
+ )
390
+ if not suite_hash:
391
+ exc = BranchNotFoundError(suite_branch, suite_repo_name)
392
+ util.schedule_fail(message=str(exc), name=self.name, dry_run=self.args.dry_run)
378
393
  log.info("%s branch: %s %s", suite_repo_name, suite_branch, suite_hash)
379
394
  return suite_hash
380
395
 
@@ -493,6 +508,14 @@ class Run(object):
493
508
  log.info('Skipping due to excluded_os_type: %s facets %s',
494
509
  exclude_os_type, description)
495
510
  continue
511
+ update_key('sha1', parsed_yaml, self.base_config)
512
+ update_key('suite_sha1', parsed_yaml, self.base_config)
513
+
514
+ full_job_config = copy.deepcopy(self.base_config.to_dict())
515
+ deep_merge(full_job_config, parsed_yaml)
516
+ flavor = util.get_install_task_flavor(full_job_config)
517
+
518
+ parsed_yaml['flavor'] = flavor
496
519
 
497
520
  arg = copy.deepcopy(self.base_args)
498
521
  arg.extend([
@@ -516,9 +539,6 @@ class Run(object):
516
539
  sha1 = self.base_config.sha1
517
540
  if parsed_yaml.get('verify_ceph_hash',
518
541
  config.suite_verify_ceph_hash):
519
- full_job_config = copy.deepcopy(self.base_config.to_dict())
520
- deep_merge(full_job_config, parsed_yaml)
521
- flavor = util.get_install_task_flavor(full_job_config)
522
542
  version = util.package_version_for_hash(sha1, flavor, os_type,
523
543
  os_version, self.args.machine_type)
524
544
  if not version:
@@ -611,6 +631,9 @@ Note: If you still want to go ahead, use --job-threshold 0'''
611
631
  log.debug('Suite %s in %s' % (suite_name, suite_path))
612
632
  log.debug(f"subset = {self.args.subset}")
613
633
  log.debug(f"no_nested_subset = {self.args.no_nested_subset}")
634
+ if self.args.dry_run:
635
+ log.debug("Base job config:\n%s" % self.base_config)
636
+
614
637
  configs = build_matrix(suite_path,
615
638
  subset=self.args.subset,
616
639
  no_nested_subset=self.args.no_nested_subset,
@@ -622,20 +645,10 @@ Note: If you still want to go ahead, use --job-threshold 0'''
622
645
  filter_out=self.args.filter_out,
623
646
  filter_all=self.args.filter_all,
624
647
  filter_fragments=self.args.filter_fragments,
648
+ base_config=self.base_config,
625
649
  seed=self.args.seed,
626
650
  suite_name=suite_name))
627
651
 
628
- if self.args.dry_run:
629
- log.debug("Base job config:\n%s" % self.base_config)
630
-
631
- # create, but do not write, the temp file here, so it can be
632
- # added to the args in collect_jobs, but not filled until
633
- # any backtracking is done
634
- base_yaml_path = NamedTemporaryFile(
635
- prefix='schedule_suite_', delete=False
636
- ).name
637
- self.base_yaml_paths.insert(0, base_yaml_path)
638
-
639
652
  # compute job limit in respect of --sleep-before-teardown
640
653
  job_limit = self.args.limit or 0
641
654
  sleep_before_teardown = int(self.args.sleep_before_teardown or 0)
@@ -684,7 +697,13 @@ Note: If you still want to go ahead, use --job-threshold 0'''
684
697
  sha1s = util.find_git_parents('ceph', str(self.base_config.sha1), self.args.newest)
685
698
  if not sha1s:
686
699
  util.schedule_fail('Backtrack for --newest failed', name, dry_run=self.args.dry_run)
687
- self.config_input['ceph_hash'] = sha1s.pop(0)
700
+ cur_sha1 = sha1s.pop(0)
701
+ self.config_input['ceph_hash'] = cur_sha1
702
+ # If ceph_branch and suite_branch are the same and
703
+ # ceph_repo and suite_repo are the same, update suite_hash
704
+ if (self.args.ceph_repo == self.args.suite_repo) and \
705
+ (self.args.ceph_branch == self.args.suite_branch):
706
+ self.config_input['suite_hash'] = cur_sha1
688
707
  self.base_config = self.build_base_config()
689
708
  backtrack += 1
690
709
  continue
@@ -700,9 +719,6 @@ Note: If you still want to go ahead, use --job-threshold 0'''
700
719
  dry_run=self.args.dry_run,
701
720
  )
702
721
 
703
- with open(base_yaml_path, 'w+b') as base_yaml:
704
- base_yaml.write(str(self.base_config).encode())
705
-
706
722
  if jobs_to_schedule:
707
723
  self.write_rerun_memo()
708
724
 
@@ -714,8 +730,6 @@ Note: If you still want to go ahead, use --job-threshold 0'''
714
730
 
715
731
  self.schedule_jobs(jobs_missing_packages, jobs_to_schedule, name)
716
732
 
717
- os.remove(base_yaml_path)
718
-
719
733
  count = len(jobs_to_schedule)
720
734
  missing_count = len(jobs_missing_packages)
721
735
  total_count = count
teuthology/suite/util.py CHANGED
@@ -29,7 +29,7 @@ CONTAINER_DISTRO = 'centos/9' # the one to check for build_complete
29
29
  CONTAINER_FLAVOR = 'default'
30
30
 
31
31
 
32
- def fetch_repos(branch, test_name, dry_run):
32
+ def fetch_repos(branch, test_name, dry_run, commit=None):
33
33
  """
34
34
  Fetch the suite repo (and also the teuthology repo) so that we can use it
35
35
  to build jobs. Repos are stored in ~/src/.
@@ -49,7 +49,7 @@ def fetch_repos(branch, test_name, dry_run):
49
49
  # We use teuthology's main branch in all cases right now
50
50
  if config.teuthology_path is None:
51
51
  fetch_teuthology('main')
52
- suite_repo_path = fetch_qa_suite(branch)
52
+ suite_repo_path = fetch_qa_suite(branch, commit)
53
53
  except BranchNotFoundError as exc:
54
54
  schedule_fail(message=str(exc), name=test_name, dry_run=dry_run)
55
55
  return suite_repo_path
@@ -180,16 +180,7 @@ def _update_package_list_and_install(ctx, remote, rpm, config):
180
180
  for copr in enable_coprs:
181
181
  remote.run(args=['sudo', 'dnf', '-y', 'copr', 'enable', copr])
182
182
 
183
- # rpm does not force installation of a particular version of the project
184
- # packages, so we can put extra_system_packages together with the rest
185
- system_pkglist = config.get('extra_system_packages')
186
- if system_pkglist:
187
- if isinstance(system_pkglist, dict):
188
- rpm += system_pkglist.get('rpm')
189
- else:
190
- rpm += system_pkglist
191
183
  remote_os = remote.os
192
-
193
184
  dist_release = remote_os.name
194
185
  log.debug("_update_package_list_and_install: config is {}".format(config))
195
186
  repos = config.get('repos')
@@ -214,25 +205,26 @@ def _update_package_list_and_install(ctx, remote, rpm, config):
214
205
  log.info("repos_only was specified: not installing any packages")
215
206
  return None
216
207
 
208
+ packages = list(rpm)
217
209
  if not install_ceph_packages:
218
210
  log.info("install_ceph_packages set to False: not installing Ceph packages")
219
211
  # Although "librados2" is an indirect dependency of ceph-test, we
220
212
  # install it separately because, otherwise, ceph-test cannot be
221
213
  # installed (even with --force) when there are several conflicting
222
214
  # repos from different vendors.
223
- rpm = ["librados2", "ceph-test"]
215
+ packages = ["librados2", "ceph-test"]
224
216
 
225
217
  # rpm does not force installation of a particular version of the project
226
218
  # packages, so we can put extra_system_packages together with the rest
227
219
  system_pkglist = config.get('extra_system_packages', [])
228
220
  if system_pkglist:
229
221
  if isinstance(system_pkglist, dict):
230
- rpm += system_pkglist.get('rpm')
222
+ packages += system_pkglist.get('rpm')
231
223
  else:
232
- rpm += system_pkglist
224
+ packages += system_pkglist
233
225
 
234
226
  log.info("Installing packages: {pkglist} on remote rpm {arch}".format(
235
- pkglist=", ".join(rpm), arch=remote.arch))
227
+ pkglist=", ".join(packages), arch=remote.arch))
236
228
 
237
229
  if dist_release not in ['opensuse', 'sle']:
238
230
  project = builder.project
@@ -257,15 +249,15 @@ def _update_package_list_and_install(ctx, remote, rpm, config):
257
249
  install_cmd = 'sudo yum -y install'
258
250
  # to compose version string like "0.94.10-87.g116a558.el7"
259
251
  pkg_version = '.'.join([builder.version, builder.dist_release])
260
- rpm = _downgrade_packages(ctx, remote, rpm, pkg_version, config)
252
+ packages = _downgrade_packages(ctx, remote, packages, pkg_version, config)
261
253
 
262
254
  if system_pkglist:
263
255
  _retry_if_failures_are_recoverable(remote,
264
256
  args='{install_cmd} {rpms}'
265
- .format(install_cmd=install_cmd, rpms=' '.join(rpm))
257
+ .format(install_cmd=install_cmd, rpms=' '.join(packages))
266
258
  )
267
259
  else:
268
- for cpack in rpm:
260
+ for cpack in packages:
269
261
  if ldir:
270
262
  _retry_if_failures_are_recoverable(remote,
271
263
  args='''
@@ -334,7 +334,8 @@ def fetch_binaries_for_coredumps(path, remote):
334
334
  log.error(e)
335
335
  continue
336
336
  try:
337
- dump_program = re.findall("from '([^']+)'", dump_out)[0]
337
+ dump_command = re.findall("from '([^ ']+)", dump_out)[0]
338
+ dump_program = dump_command.split()[0]
338
339
  log.info(f' dump_program: {dump_program}')
339
340
  except Exception as e:
340
341
  log.info("core doesn't have the desired format, moving on ...")
@@ -159,6 +159,18 @@ def syslog(ctx, config):
159
159
  ctx.summary['failure_reason'] = \
160
160
  "'{error}' in syslog".format(error=stdout)
161
161
 
162
+ log.info('Gathering journactl...')
163
+ run.wait(
164
+ cluster.run(
165
+ args=[
166
+ 'sudo', 'journalctl',
167
+ run.Raw('>'),
168
+ f'{archive_dir}/syslog/journalctl.log',
169
+ ],
170
+ wait=False,
171
+ )
172
+ )
173
+
162
174
  log.info('Compressing syslogs...')
163
175
  run.wait(
164
176
  cluster.run(
@@ -172,25 +184,17 @@ def syslog(ctx, config):
172
184
  'sudo',
173
185
  'xargs',
174
186
  '-0',
187
+ '--max-args=1',
188
+ '--max-procs=0',
189
+ '--verbose',
175
190
  '--no-run-if-empty',
176
191
  '--',
177
192
  'gzip',
193
+ '-5',
194
+ '--verbose',
178
195
  '--',
179
196
  ],
180
197
  wait=False,
181
198
  )
182
199
  )
183
200
 
184
- log.info('Gathering journactl -b0...')
185
- run.wait(
186
- cluster.run(
187
- args=[
188
- 'sudo', 'journalctl', '-b0',
189
- run.Raw('|'),
190
- 'gzip', '-9',
191
- run.Raw('>'),
192
- f'{archive_dir}/syslog/journalctl-b0.gz',
193
- ],
194
- wait=False,
195
- )
196
- )
teuthology/task/kernel.py CHANGED
@@ -33,7 +33,7 @@ from teuthology.task.install.deb import install_dep_packages
33
33
 
34
34
  log = logging.getLogger(__name__)
35
35
 
36
- CONFIG_DEFAULT = {'branch': 'main'}
36
+ CONFIG_DEFAULT = {'branch': 'distro', 'sha1': 'distro'}
37
37
  TIMEOUT_DEFAULT = 300
38
38
 
39
39
  VERSION_KEYS = ['branch', 'tag', 'sha1', 'deb', 'rpm', 'koji', 'koji_task']
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: teuthology
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: Ceph test framework
5
5
  Home-page: https://github.com/ceph/teuthology
6
6
  Author: Red Hat, Inc.
@@ -24,25 +24,26 @@ Requires-Python: >=3.10
24
24
  Description-Content-Type: text/x-rst
25
25
  License-File: LICENSE
26
26
  Requires-Dist: PyYAML
27
- Requires-Dist: ansible-core==2.16.6
27
+ Requires-Dist: ansible-core==2.17.7
28
28
  Requires-Dist: apache-libcloud
29
29
  Requires-Dist: backports.ssl-match-hostname
30
30
  Requires-Dist: beanstalkc3>=0.4.0
31
31
  Requires-Dist: configobj
32
32
  Requires-Dist: configparser
33
33
  Requires-Dist: docopt
34
- Requires-Dist: gevent
34
+ Requires-Dist: gevent<25
35
35
  Requires-Dist: httplib2
36
36
  Requires-Dist: humanfriendly
37
37
  Requires-Dist: lupa
38
38
  Requires-Dist: lxml
39
39
  Requires-Dist: ndg-httpsclient
40
40
  Requires-Dist: netaddr
41
+ Requires-Dist: openstacksdk
41
42
  Requires-Dist: paramiko
42
43
  Requires-Dist: pexpect
43
44
  Requires-Dist: pip-tools
44
45
  Requires-Dist: prettytable
45
- Requires-Dist: prometheus-client>=0.16.0
46
+ Requires-Dist: prometheus_client>=0.16.0
46
47
  Requires-Dist: psutil>=2.1.0
47
48
  Requires-Dist: pyasn1
48
49
  Requires-Dist: pynacl>=1.5.0
@@ -54,9 +55,6 @@ Requires-Dist: types-psutil
54
55
  Requires-Dist: urllib3<1.27,>=1.25.4
55
56
  Provides-Extra: manhole
56
57
  Requires-Dist: manhole; extra == "manhole"
57
- Provides-Extra: openstack
58
- Requires-Dist: python-openstackclient; extra == "openstack"
59
- Requires-Dist: python-novaclient; extra == "openstack"
60
58
  Provides-Extra: rocketchat
61
59
  Requires-Dist: rocket-python>=1.2.15; extra == "rocketchat"
62
60
  Provides-Extra: sentry
@@ -74,6 +72,10 @@ Requires-Dist: pytest-cov; extra == "test"
74
72
  Requires-Dist: toml; extra == "test"
75
73
  Requires-Dist: tox; extra == "test"
76
74
  Requires-Dist: xmltodict; extra == "test"
75
+ Provides-Extra: openstack
76
+ Requires-Dist: python-openstackclient; extra == "openstack"
77
+ Requires-Dist: python-novaclient; extra == "openstack"
78
+ Dynamic: license-file
77
79
 
78
80
  ===================================================
79
81
  `Teuthology` -- The Ceph integration test framework
@@ -5,7 +5,7 @@ scripts/exporter.py,sha256=gp7PjO9xLXIuElRiAbKUNxZd2D70j0WgirHHgfInQ_Q,423
5
5
  scripts/kill.py,sha256=EvkEA8_60WfCyvifVyaqYlVJfFRJxSoM0iTmUnXXHR8,1662
6
6
  scripts/lock.py,sha256=E0J6HP-Y7aw9mHSM9LbS3CpzDz-tiTeDB0rFmkx4bJw,5222
7
7
  scripts/ls.py,sha256=3-mobC_B9WpsSx0Oa6hf-bjEx1N-BAU_jgNGFLQgtYE,393
8
- scripts/node_cleanup.py,sha256=Z3R124H4RM5dQamMo32TIEbygYuExVuVtWZzr_3KFaY,1722
8
+ scripts/node_cleanup.py,sha256=dfuHUe23LDsEXML_yFQV6BkJGb6KkHLu9zHIBTgQaRQ,2249
9
9
  scripts/openstack.py,sha256=T8lHFiy41Ja3hFgu4hn0oFzX3JlBVReUAUzZd-gRjfU,13127
10
10
  scripts/prune_logs.py,sha256=VL5yXKMBqGHtpkEQ7p4yCaNuAMrmifnCRUA_aRUW3hM,1377
11
11
  scripts/queue.py,sha256=JAusXNUem4X-rnZ8cqHsfndBqzjKsmB5J05KvaxOpUw,1175
@@ -14,14 +14,14 @@ scripts/report.py,sha256=OaF7lQzxx7bwvrXEDhoLANzULGuvIUtEHIRgoxHjImE,1704
14
14
  scripts/results.py,sha256=I13-JfHdPLEc0Hb6rJ9TdppNEG8t5LnkhAbFbpWTXOc,989
15
15
  scripts/run.py,sha256=Hk4mJ_ECG8Det-vQue5zizUWZMPaWHVpwd3JN28Gl3Y,1516
16
16
  scripts/schedule.py,sha256=2KKIdUCDmSqzQnnQ3ubyPvpNCxFAYb53_08J9h4K6Xs,2965
17
- scripts/suite.py,sha256=e8UuFhtMfrBxjJU3V5IJ7Gy3lX-e2xggjjzLL_5w0Lc,14263
17
+ scripts/suite.py,sha256=UFmwVjBaNeSsWQsMRzJUaArxnPQZxwfi5acqp1ThMXI,14386
18
18
  scripts/supervisor.py,sha256=yoMUfoEioh73IpTN9DjUCSYHWvIGuCxp7ubj73lbIWU,973
19
19
  scripts/update_inventory.py,sha256=3DnKrLCRlje44xkLNX1X1Cvkqs4FiWKLZj20ouGxNB8,1272
20
20
  scripts/updatekeys.py,sha256=JKrf8md1pW_R91yN51vGXtUJqs9bWCXshqaFFBRwNFI,859
21
21
  scripts/wait.py,sha256=YtJ3rXb8sIUl1ojtzadjD3TE-YXRdOtkFXlJAmEh1IU,728
22
- teuthology/__init__.py,sha256=3FCURFJNxbR5hQsdEtq-QMR2iObe2JIWn8ERty2QkuQ,3816
22
+ teuthology/__init__.py,sha256=I6HUxgPso5E_LTGLGFz5y_XjTefUqAqfZeN1d-rVqks,3778
23
23
  teuthology/beanstalk.py,sha256=glA75hY8j3nQVn8T9DbQBHCQfoVDhpdNLgGHZywDYzM,6308
24
- teuthology/config.py,sha256=DCXMPkHnjo8iRL7ul7VxsGcXIixYyWxet1b75EeJCQI,8933
24
+ teuthology/config.py,sha256=ytJplrDjqMy34_gEFeTI85cAbVhRgrPVVDxoHvriZi0,9587
25
25
  teuthology/contextutil.py,sha256=GhtTPbl8McNmCrlovQ79G-fjgUTxnQQjYLVSj6FpBU8,5242
26
26
  teuthology/describe_tests.py,sha256=R0Wjern-RaUohYoIMy6q5ZHe2JZfSUZWJy4-DZoG0yA,12654
27
27
  teuthology/exceptions.py,sha256=afFFYIb54lu7a-dTICr7_3v_qANY4ixyjYrjlGN0Cyk,5858
@@ -30,29 +30,29 @@ teuthology/exporter.py,sha256=Vnk4f85C0xhae4OjdeibbzyXEG41coSLLfNmvHz5428,9855
30
30
  teuthology/job_status.py,sha256=3CWkKOFvRtqj_xYnRBeth-RYidKynum4Qcdu-HVuv_4,975
31
31
  teuthology/kill.py,sha256=161h7ne1-aYpUAXzUE4aNPSKT1PSgZWPJCy_S1YPoSw,8601
32
32
  teuthology/ls.py,sha256=dyWawq4aJHrgxaWnq4J1iG4VMx7Kk_By8mZd5vAV0ws,1993
33
- teuthology/misc.py,sha256=t4innjQJnyRx1vHiS5sG_pRc-r39R4TYqCjPwcWiAHE,41667
33
+ teuthology/misc.py,sha256=n6uopfUZ8faHazVHE8laDEO9A3gSt-iVHd_1Bqf4mQw,40370
34
34
  teuthology/packaging.py,sha256=Q_x2aXy3RJ19iJc4WszMfpXaSeKa44EOvuZXAiT15Dc,35566
35
35
  teuthology/parallel.py,sha256=x4q5Fr4iLn52usjJBkI0EbGSpD9JI6AXItvuf7sBgBg,2890
36
36
  teuthology/prune.py,sha256=vRxHf-yQ1bkNu6TsFUzeapdTR2C7kUQcCHBEuL8rnRc,7345
37
37
  teuthology/reimage.py,sha256=rIe4PfA6uF3vAEWpyQUxfVFLP8ueAw4CtJFLsw9Ymls,1904
38
- teuthology/repo_utils.py,sha256=p9h9hC4PeIJvTQ9nihH0flau3PNOPIZfebUIDV80-mM,16355
38
+ teuthology/repo_utils.py,sha256=sFVzm11RWfULlCaei8CYopA7-6aX6mX_jwpSfhqoEUg,16424
39
39
  teuthology/report.py,sha256=hxj5w28HW938QFnLGWFcSZ1Kzn8f56khRJAKTCBMAPw,20475
40
40
  teuthology/results.py,sha256=-myx_dTehDV0D48l26U5oywEAMsaqtEaWlMkjfCkeqA,8588
41
- teuthology/run.py,sha256=SMUvS-E4BcFmVBaW1npaMLZLe2Edyy5r7dmxoZyy2rg,13280
41
+ teuthology/run.py,sha256=FHHJlZYOzuzndTLuT2GPd9zE1JNd1gQ8_89QXkRfelY,13273
42
42
  teuthology/run_tasks.py,sha256=VcGK7WEWelg6iE0rJ8il8TyHzS75Kpu4tSeDLP17EYA,12472
43
43
  teuthology/safepath.py,sha256=AvzzYmXIySHdz9mEVSQU1UnTV6lni3yTe_XKv-nXPSY,1226
44
44
  teuthology/schedule.py,sha256=8IFkDi191gD8HGjnjcu8RGTUtKN84p1p_GDiyfbelpc,4712
45
- teuthology/scrape.py,sha256=8r0yLnVTNb8aIrvi_HL0O_vmdh8SiPI5NU8xXZnx1p8,17503
45
+ teuthology/scrape.py,sha256=m8kFIIXUBQVwfp36A4hdHy984Zrxh_PLWEfjk_A2VaY,17593
46
46
  teuthology/timer.py,sha256=_FxgyNvAJhL60PIdnZevufUjp0K0A_Te1wf61VdNsSo,3468
47
47
  teuthology/dispatcher/__init__.py,sha256=XfhkKgnfQ92xr8a864N8Y5H50sz0flcqPeoZcRfCYGA,12438
48
- teuthology/dispatcher/supervisor.py,sha256=fFrhzoyYBzNmGFSoxXhFDPajTcNYIXbMgiKobUfhRgo,13914
48
+ teuthology/dispatcher/supervisor.py,sha256=98VpM-hpIyJ7EdK0O_DjmUpIjBaHx_gecPWuCkGMvOM,13880
49
49
  teuthology/lock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- teuthology/lock/cli.py,sha256=byhxaW-ZjxKXzy9oyULGj81PfpmCC3J2ADCT1xRrHJc,11933
51
- teuthology/lock/ops.py,sha256=rJlT6N6FGmq1LBxpBEmUL4J7z5ngww6367bnXif-wcQ,19830
52
- teuthology/lock/query.py,sha256=JOrd7JWTV3dMuwwv03kHHnpl6XdMUkES2XpDhBDctME,5444
53
- teuthology/lock/util.py,sha256=nI7AAazV7aspr_s_jblVhDt6BuJxbBawN1IY755ngpA,3719
50
+ teuthology/lock/cli.py,sha256=hu9fIiMxHMVEprTDOtX73CofSU2x0zzCPOgkyWa_53I,12047
51
+ teuthology/lock/ops.py,sha256=3lHBWrbkUkVPO6yuArBq7B1qkQCp5yEeitMCZlzsdoc,19969
52
+ teuthology/lock/query.py,sha256=QF9deBzwexAIaZjl2FKtxRLDv6y6C162iRqzHvw6PxI,6603
53
+ teuthology/lock/util.py,sha256=RpU-nwWTHpZWu0YHhA7LCWdQNqFrz_f6oaz28gfwGHw,3758
54
54
  teuthology/nuke/__init__.py,sha256=qlnMNKy3ULSuJhq9NO9PaUrFn7Gv35HmZlMWOCHfykk,619
55
- teuthology/openstack/__init__.py,sha256=WYvHVgzuZGpOPbMNVhf1yHZGWUBN8rzmFsMN2WH9bgA,54841
55
+ teuthology/openstack/__init__.py,sha256=F6wH0YDLxbyymd90zRBBesb8wJAnRReWqMPLi6RWjYk,56405
56
56
  teuthology/openstack/archive-key,sha256=x_4TjSfktzupIuRYnJA8vwFj6jspXGNVR_8YvajZBtU,1675
57
57
  teuthology/openstack/archive-key.pub,sha256=k0jel1IFoPHxamhXEqkhcA2n_czoQLZeCMn_N-onbqY,391
58
58
  teuthology/openstack/openstack-centos-6.5-user-data.txt,sha256=MAXQr7PH2sQmx9EUr9XdmEcnhlN7L0e0LEdL7LlnF-Q,1201
@@ -66,23 +66,23 @@ teuthology/openstack/openstack-teuthology.init,sha256=jjARL833tMT6RmbrrGCkitpc9N
66
66
  teuthology/openstack/openstack-ubuntu-12.04-user-data.txt,sha256=poTBKswDTm98VjXHnNLlO5p2OuLBWp5aKivM52yKxvU,988
67
67
  teuthology/openstack/openstack-ubuntu-14.04-user-data.txt,sha256=Cko6ek8dU0VXXFD-HVYj179UZTzUu4ZGjze3DDJSz5w,905
68
68
  teuthology/openstack/openstack-user-data.txt,sha256=lyzGBNI0hPury7DSsgqEyUfkc0GVyw6uHdKkZrg_5Wc,1024
69
- teuthology/openstack/setup-openstack.sh,sha256=OYzY9Koy0iHun5aUMwL8VM_rpXxiMpD_BvNNS0hPR-Y,24471
69
+ teuthology/openstack/setup-openstack.sh,sha256=TKtlSRarN3Fm3EuS8ZywIEunaTwnYJW3vylSI6PB_LE,25695
70
70
  teuthology/orchestra/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
71
  teuthology/orchestra/cluster.py,sha256=o46Q1L05YKWNB5szNMfZU8l0X8ndqXWU7tDrBlIgjB0,6697
72
72
  teuthology/orchestra/connection.py,sha256=OFb8ahpg0e04ICijevnhut_ckN0Ls7oQxhVXQt-p90Q,4078
73
73
  teuthology/orchestra/console.py,sha256=DVW2T3F0_Kcm1KyjIu05ngj8c3v5WxScJeH3fZtr81k,15718
74
74
  teuthology/orchestra/monkey.py,sha256=YtwEnrQyEOEJG2_oozzDmnfsB33jeAmtzvsxEbnLkfA,1385
75
- teuthology/orchestra/opsys.py,sha256=TXScUAkQQdcmf4GPI_seubsiCvHi4P_SK1FXGzCP7Us,7102
76
- teuthology/orchestra/remote.py,sha256=C7wNVW9PtugUOy3Y-8I_llhRIdZnN_Msy9CgjU4-bak,25656
77
- teuthology/orchestra/run.py,sha256=TVyeWBPMJw3egUIVQILEgI0JunvjI0z5KN-hN_k4R4U,16180
75
+ teuthology/orchestra/opsys.py,sha256=BwITAeKJMAFAeQoeu8AMvBIarR1gHsT2oDPGYEfaBzg,7412
76
+ teuthology/orchestra/remote.py,sha256=pBlTf9bdl0lVFgYoQr0sZnQq0IsSQQWowgCT3swHRtM,27974
77
+ teuthology/orchestra/run.py,sha256=z_iFiZ2-GkfF0OG_1d8u9uQ_PLe2ggFQ0u9_PfYr-Qc,16444
78
78
  teuthology/orchestra/daemon/__init__.py,sha256=gB0iOtyIROajsYE-UTT-unCnLxkeyYJxLQ7u2bqoaxk,66
79
79
  teuthology/orchestra/daemon/cephadmunit.py,sha256=C_k3T__3CXK4zCctega5C16_oyzXWJIyPIYlOHTR6s8,6133
80
80
  teuthology/orchestra/daemon/group.py,sha256=ydMrCtJYFc2rIa1YUVdFS2UZ3exBkTvpPq8LCojxA7M,7625
81
81
  teuthology/orchestra/daemon/state.py,sha256=MdzAgBf0HubzuFP33v8UGMfhwuVYboS9W0z41bKp3sk,5598
82
82
  teuthology/orchestra/daemon/systemd.py,sha256=InMxghFVqKa26DkX14Io-SW1XWTm1G8OfPEx0eUbzAU,7529
83
83
  teuthology/provision/__init__.py,sha256=SBofH0pLmuP3Omlz-Y1t446ye29c319Ru2m5uL-zXJc,4859
84
- teuthology/provision/downburst.py,sha256=hYguICUaftgeXYqyPGrIBOyeCBtJIjKDTghJdrr4V6k,12512
85
- teuthology/provision/fog.py,sha256=x0gRxY-Gc6ARBx69gF5Ik1uGSLD2bQLiiaPD__9QRKE,12835
84
+ teuthology/provision/downburst.py,sha256=LH5FK3FG00hnJDyM50dWEkzwlMxw7R5XETydB_K1QGU,13897
85
+ teuthology/provision/fog.py,sha256=Rv303wtaQF1S2dGPm5vITVBEonknx28bEWqOVbhqlts,12849
86
86
  teuthology/provision/openstack.py,sha256=aXFYQMAuSwi2obVWtdMP8OfN7_e_xF0bxBe4L0rcxpo,9589
87
87
  teuthology/provision/pelagos.py,sha256=1yEE1nn3n8qdCvBoF08TvfyWkT3evXoqI4yUo19vVXA,6267
88
88
  teuthology/provision/cloud/__init__.py,sha256=7MkeRHOFGqZcZbDElEK9ImHAvX_v3tmr7whpCq5WqEo,1274
@@ -93,10 +93,10 @@ teuthology/suite/__init__.py,sha256=Q6g2Al575h7b4LSJpZSxP8Ntiv1szhBf7ObpvKtwsmo,
93
93
  teuthology/suite/build_matrix.py,sha256=1Ng0AY3sqjFit_K0po5YZZv0BVi4iqASZX5Ds5OzZ9Y,7432
94
94
  teuthology/suite/fragment-merge.lua,sha256=nO5ER2ByU5euLfPsogj2OtKwa6YJNTgQ7h-Z9Sb8pmQ,2701
95
95
  teuthology/suite/matrix.py,sha256=JhHk1ZPWUIdSYewQlsqsqMsvlwJTrNSjO4sqdXxQQg4,11468
96
- teuthology/suite/merge.py,sha256=W1Ija2YX7IhEohXHDvpnUh-XhPnB_u0VH4ML6TF8s1I,6381
96
+ teuthology/suite/merge.py,sha256=lOOYZ5vN2gYhZumIcsidlNfxYYIdgN7QjjFfhYnmCis,6519
97
97
  teuthology/suite/placeholder.py,sha256=KGjq2WhfwUK_485rsZhrU3IDgwHohgDdRUA6V0fFfQ8,3652
98
- teuthology/suite/run.py,sha256=5velqtl8CSqiSEMfyHVlkDBUADVdRc6hgpILntSBG2k,29856
99
- teuthology/suite/util.py,sha256=JVOvl1dniRejoco92Nl4TDnuctjqNRVjxoZfNytGhok,12753
98
+ teuthology/suite/run.py,sha256=V_KTiGadsOz3Bbu2AfTwamejnMVVq5gg9FOloada7ws,30727
99
+ teuthology/suite/util.py,sha256=xD0pg7-9MHMEP3vZU13XY_h26de6hjVRIVWXcz7pOt4,12774
100
100
  teuthology/task/__init__.py,sha256=wkcn1hCM9W805s6_3u0F2YAagW1qbAlx5fNaCrXOBp0,4723
101
101
  teuthology/task/ansible.py,sha256=O3y8T9gFyCWfTf6H9FcpFvJwkoOH7hTSNQuOI_9OQV4,18716
102
102
  teuthology/task/args.py,sha256=JUw2nCCEz4pUdEJT03l_PLHSJhV3bVBIEOOtkahapRY,1731
@@ -114,7 +114,7 @@ teuthology/task/full_sequential_finally.py,sha256=C1sXt1n1JM4S6RChZu6pjahpsHAKVs
114
114
  teuthology/task/hadoop.py,sha256=nS_raErpq8PMRgXCoHZfJkOTSuk1eH6mIU3npmkcmq0,12817
115
115
  teuthology/task/interactive.py,sha256=BRhp2vkm_2YcZTSn-oBjFto32-jJ9Edw0gWUPYfKVrM,974
116
116
  teuthology/task/iscsi.py,sha256=jjAYmzmvbXkAzZ0XmBZwy6ZuImSDZGBlRsTtfkiwRvA,5580
117
- teuthology/task/kernel.py,sha256=AOtTF-P54WatlkRdUhYm3rOxLWYPTjEZrt-B9p3e3c4,49454
117
+ teuthology/task/kernel.py,sha256=RmnHZITwc2ustY8_skpe25SpcJRQJR652olsUx3XywI,49474
118
118
  teuthology/task/knfsd.py,sha256=ZmCdqnE0oHp1T3bOLJerJjhx7FOlsGcKOWm2QgbKvf4,5395
119
119
  teuthology/task/localdir.py,sha256=uFJ7nvQBgbe3oW2fmFFldwrGN8C8H5vhOPNGAmH2zyQ,1620
120
120
  teuthology/task/lockfile.py,sha256=sx_MRVUu7Aqi0InY8sRO34DLOPRxGwoumsoKD7s9gA8,9002
@@ -137,18 +137,18 @@ teuthology/task/timer.py,sha256=EsRwXAVofdAez6mpP7TO5A7lCVQU2nAZ3mXS-oDYn3c,1260
137
137
  teuthology/task/install/__init__.py,sha256=tTt1DLv24i1E1pah_hU3mb3cmS-2o8HTp1L7WT_Soys,21237
138
138
  teuthology/task/install/deb.py,sha256=wMYfaOZ5Jf36CzGmb3jTM94BMv5l15iiH8b3_DeKeHg,7442
139
139
  teuthology/task/install/redhat.py,sha256=XVVS4BP3hy2q2URs9-d4fOwNO9K7nvnTlS1XT2oVuO4,7871
140
- teuthology/task/install/rpm.py,sha256=ecLj7mQ_v4--vHTwjsx14J2dmmvdVhFm5oxb8F_wcoY,16171
140
+ teuthology/task/install/rpm.py,sha256=dTUWmSot8PvOdNXFhvh6uuqocM0KmSTnvb0YKkUUKGs,15865
141
141
  teuthology/task/install/util.py,sha256=Sc7q_CgfkWXrIssFEf2SZwpqF9ZZvFAzzWHUVFgN7Qc,4179
142
142
  teuthology/task/install/bin/adjust-ulimits,sha256=Bgdmytehcl6Y3e2Lmg2Gstx5r_Xkl9DvWO7g74DLzfs,299
143
143
  teuthology/task/install/bin/daemon-helper,sha256=3uG_2u1jnLVLfUzJ7TDi-fWAGoFAaiQc_FRw7UtjLX0,3058
144
144
  teuthology/task/install/bin/stdin-killer,sha256=qPF2v7_Q4Y1S1qz6whNIMQ0TVtKJTvnhvO3attyREvo,8633
145
- teuthology/task/internal/__init__.py,sha256=Y0gWy-D3IVTuL8Z_LS7AnZ2BPh16L8BmjzjuT5qTkEY,19170
145
+ teuthology/task/internal/__init__.py,sha256=Og1vF1TMgnlUeigtmBZiZmo0tf5I5Xb_QHN_5m7Q1_4,19225
146
146
  teuthology/task/internal/check_lock.py,sha256=n6DpqdQhoqGBefpufekofYQ1sV_7dmR8m1abGahz50w,1188
147
147
  teuthology/task/internal/edit_sudoers.sh,sha256=6uJoT44TNfZnPiQp1Qbz0Fgqt0RRcYzmu8tuMfd4xJw,119
148
148
  teuthology/task/internal/git_ignore_ssl.py,sha256=GxYGFfP2_sBhQCRDd1cQ3ZRVQFu9ff46vYROF-F8FLw,489
149
149
  teuthology/task/internal/lock_machines.py,sha256=Bn3TR5ItJ-NGBw7s4-PdCJekxemS6HpmvzMBmYowTKE,1003
150
150
  teuthology/task/internal/redhat.py,sha256=I0U-OULBfPMLYtenduRts4wG3WSg3TXuUoWVm3ChrWA,9991
151
- teuthology/task/internal/syslog.py,sha256=N9AjsLyRpQRH0D2WycuT-FstxxK4cXdet3B2PuOq814,6738
151
+ teuthology/task/internal/syslog.py,sha256=0PqJm9cVbPCzD98tNnpCiDe6NmyynwbbeCLz-PC1bhs,6823
152
152
  teuthology/task/internal/vm_setup.py,sha256=cNlsBmVqXTYA6BgF5Sqd3k2eh87cnfuR1KdPUsOKskw,1825
153
153
  teuthology/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
154
  teuthology/util/compat.py,sha256=3jWbf2QSMSwq2t5ZgoGZ7z0fk98sY489P7im8j6eoOU,458
@@ -157,12 +157,12 @@ teuthology/util/loggerfile.py,sha256=mg6jjC2kJzhctX7VRmYms-iaJoGXEEU-8E-ud21RKXI
157
157
  teuthology/util/scanner.py,sha256=SLcQQuUz7sgCLMXwlW_5qQFZJWbD_IETSXqd3RYsAdg,5769
158
158
  teuthology/util/sentry.py,sha256=pDe_wW5wGstu8NH3FmqaWa1GYBUA8n4o6gWNa_RHklY,1529
159
159
  teuthology/util/time.py,sha256=Pn2sMtP0BQd6mUKyrOp3SGJmV8uJ5hLKaQvdf1rBXJM,1575
160
- teuthology-1.2.1.data/scripts/adjust-ulimits,sha256=Bgdmytehcl6Y3e2Lmg2Gstx5r_Xkl9DvWO7g74DLzfs,299
161
- teuthology-1.2.1.data/scripts/daemon-helper,sha256=R8GE83f41E_p5SO6egeyIhABmXz1qwuCwfrc89Uo3ug,3048
162
- teuthology-1.2.1.data/scripts/stdin-killer,sha256=GuhUjSBxU81FL8F7mUOpdIl1yH4gFpEd_Dt3KJu60DU,8627
163
- teuthology-1.2.1.dist-info/LICENSE,sha256=ghAkcYBW8nQm9oZJTob8w6h4Ga8ovjAv3boORc0qbYs,1057
164
- teuthology-1.2.1.dist-info/METADATA,sha256=oYM3_kXcYQOUMoDsu7zTbMV90TnzaavcWAk2lmXxPKI,3188
165
- teuthology-1.2.1.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
166
- teuthology-1.2.1.dist-info/entry_points.txt,sha256=7TnOX2EuE5RkoVzz_rXt-12Dn5ZTk3Ie2RDu8Dw591c,910
167
- teuthology-1.2.1.dist-info/top_level.txt,sha256=h2iGdGnj97Y9V5XwADbLYyhjY4Fek6KMSxrvYVNnphQ,19
168
- teuthology-1.2.1.dist-info/RECORD,,
160
+ teuthology-1.2.2.data/scripts/adjust-ulimits,sha256=Bgdmytehcl6Y3e2Lmg2Gstx5r_Xkl9DvWO7g74DLzfs,299
161
+ teuthology-1.2.2.data/scripts/daemon-helper,sha256=R8GE83f41E_p5SO6egeyIhABmXz1qwuCwfrc89Uo3ug,3048
162
+ teuthology-1.2.2.data/scripts/stdin-killer,sha256=GuhUjSBxU81FL8F7mUOpdIl1yH4gFpEd_Dt3KJu60DU,8627
163
+ teuthology-1.2.2.dist-info/licenses/LICENSE,sha256=ghAkcYBW8nQm9oZJTob8w6h4Ga8ovjAv3boORc0qbYs,1057
164
+ teuthology-1.2.2.dist-info/METADATA,sha256=U8UOTqUFvSbkjbGO4r4GSH0T-ilr5cASs6KzXDWBhY4,3241
165
+ teuthology-1.2.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
166
+ teuthology-1.2.2.dist-info/entry_points.txt,sha256=7TnOX2EuE5RkoVzz_rXt-12Dn5ZTk3Ie2RDu8Dw591c,910
167
+ teuthology-1.2.2.dist-info/top_level.txt,sha256=h2iGdGnj97Y9V5XwADbLYyhjY4Fek6KMSxrvYVNnphQ,19
168
+ teuthology-1.2.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.0.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5