teuthology 1.0.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 (172) hide show
  1. scripts/describe.py +1 -0
  2. scripts/dispatcher.py +62 -0
  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/run.py +4 -0
  9. scripts/schedule.py +4 -0
  10. scripts/suite.py +61 -16
  11. scripts/supervisor.py +44 -0
  12. scripts/update_inventory.py +10 -4
  13. scripts/wait.py +31 -0
  14. teuthology/__init__.py +24 -21
  15. teuthology/beanstalk.py +4 -3
  16. teuthology/config.py +17 -6
  17. teuthology/contextutil.py +18 -14
  18. teuthology/describe_tests.py +25 -18
  19. teuthology/dispatcher/__init__.py +365 -0
  20. teuthology/dispatcher/supervisor.py +374 -0
  21. teuthology/exceptions.py +54 -0
  22. teuthology/exporter.py +347 -0
  23. teuthology/kill.py +76 -75
  24. teuthology/lock/cli.py +16 -7
  25. teuthology/lock/ops.py +276 -70
  26. teuthology/lock/query.py +61 -44
  27. teuthology/ls.py +9 -18
  28. teuthology/misc.py +152 -137
  29. teuthology/nuke/__init__.py +12 -351
  30. teuthology/openstack/__init__.py +4 -3
  31. teuthology/openstack/openstack-centos-7.0-user-data.txt +1 -1
  32. teuthology/openstack/openstack-centos-7.1-user-data.txt +1 -1
  33. teuthology/openstack/openstack-centos-7.2-user-data.txt +1 -1
  34. teuthology/openstack/openstack-debian-8.0-user-data.txt +1 -1
  35. teuthology/openstack/openstack-opensuse-42.1-user-data.txt +1 -1
  36. teuthology/openstack/openstack-teuthology.cron +0 -1
  37. teuthology/orchestra/cluster.py +51 -9
  38. teuthology/orchestra/connection.py +23 -16
  39. teuthology/orchestra/console.py +111 -50
  40. teuthology/orchestra/daemon/cephadmunit.py +23 -5
  41. teuthology/orchestra/daemon/state.py +10 -3
  42. teuthology/orchestra/daemon/systemd.py +10 -8
  43. teuthology/orchestra/opsys.py +32 -11
  44. teuthology/orchestra/remote.py +369 -152
  45. teuthology/orchestra/run.py +21 -12
  46. teuthology/packaging.py +54 -15
  47. teuthology/provision/__init__.py +30 -10
  48. teuthology/provision/cloud/openstack.py +12 -6
  49. teuthology/provision/cloud/util.py +1 -2
  50. teuthology/provision/downburst.py +83 -29
  51. teuthology/provision/fog.py +68 -20
  52. teuthology/provision/openstack.py +5 -4
  53. teuthology/provision/pelagos.py +13 -5
  54. teuthology/repo_utils.py +91 -44
  55. teuthology/report.py +57 -35
  56. teuthology/results.py +5 -3
  57. teuthology/run.py +21 -15
  58. teuthology/run_tasks.py +114 -40
  59. teuthology/schedule.py +4 -3
  60. teuthology/scrape.py +28 -22
  61. teuthology/suite/__init__.py +75 -46
  62. teuthology/suite/build_matrix.py +34 -24
  63. teuthology/suite/fragment-merge.lua +105 -0
  64. teuthology/suite/matrix.py +31 -2
  65. teuthology/suite/merge.py +175 -0
  66. teuthology/suite/placeholder.py +8 -8
  67. teuthology/suite/run.py +204 -102
  68. teuthology/suite/util.py +67 -211
  69. teuthology/task/__init__.py +1 -1
  70. teuthology/task/ansible.py +101 -31
  71. teuthology/task/buildpackages.py +2 -2
  72. teuthology/task/ceph_ansible.py +13 -6
  73. teuthology/task/cephmetrics.py +2 -1
  74. teuthology/task/clock.py +33 -14
  75. teuthology/task/exec.py +18 -0
  76. teuthology/task/hadoop.py +2 -2
  77. teuthology/task/install/__init__.py +51 -22
  78. teuthology/task/install/bin/adjust-ulimits +16 -0
  79. teuthology/task/install/bin/daemon-helper +114 -0
  80. teuthology/task/install/bin/stdin-killer +263 -0
  81. teuthology/task/install/deb.py +24 -4
  82. teuthology/task/install/redhat.py +36 -32
  83. teuthology/task/install/rpm.py +41 -14
  84. teuthology/task/install/util.py +48 -22
  85. teuthology/task/internal/__init__.py +69 -11
  86. teuthology/task/internal/edit_sudoers.sh +10 -0
  87. teuthology/task/internal/lock_machines.py +3 -133
  88. teuthology/task/internal/redhat.py +48 -28
  89. teuthology/task/internal/syslog.py +31 -8
  90. teuthology/task/kernel.py +155 -147
  91. teuthology/task/lockfile.py +1 -1
  92. teuthology/task/mpi.py +10 -10
  93. teuthology/task/pcp.py +1 -1
  94. teuthology/task/selinux.py +17 -8
  95. teuthology/task/ssh_keys.py +6 -6
  96. teuthology/task/tests/__init__.py +137 -77
  97. teuthology/task/tests/test_fetch_coredumps.py +116 -0
  98. teuthology/task/tests/test_run.py +4 -4
  99. teuthology/timer.py +3 -3
  100. teuthology/util/loggerfile.py +19 -0
  101. teuthology/util/scanner.py +159 -0
  102. teuthology/util/sentry.py +52 -0
  103. teuthology/util/time.py +52 -0
  104. teuthology-1.2.0.data/scripts/adjust-ulimits +16 -0
  105. teuthology-1.2.0.data/scripts/daemon-helper +114 -0
  106. teuthology-1.2.0.data/scripts/stdin-killer +263 -0
  107. teuthology-1.2.0.dist-info/METADATA +89 -0
  108. teuthology-1.2.0.dist-info/RECORD +174 -0
  109. {teuthology-1.0.0.dist-info → teuthology-1.2.0.dist-info}/WHEEL +1 -1
  110. {teuthology-1.0.0.dist-info → teuthology-1.2.0.dist-info}/entry_points.txt +5 -2
  111. scripts/nuke.py +0 -45
  112. scripts/worker.py +0 -37
  113. teuthology/nuke/actions.py +0 -456
  114. teuthology/openstack/test/__init__.py +0 -0
  115. teuthology/openstack/test/openstack-integration.py +0 -286
  116. teuthology/openstack/test/test_config.py +0 -35
  117. teuthology/openstack/test/test_openstack.py +0 -1695
  118. teuthology/orchestra/test/__init__.py +0 -0
  119. teuthology/orchestra/test/integration/__init__.py +0 -0
  120. teuthology/orchestra/test/integration/test_integration.py +0 -94
  121. teuthology/orchestra/test/test_cluster.py +0 -240
  122. teuthology/orchestra/test/test_connection.py +0 -106
  123. teuthology/orchestra/test/test_console.py +0 -217
  124. teuthology/orchestra/test/test_opsys.py +0 -404
  125. teuthology/orchestra/test/test_remote.py +0 -185
  126. teuthology/orchestra/test/test_run.py +0 -286
  127. teuthology/orchestra/test/test_systemd.py +0 -54
  128. teuthology/orchestra/test/util.py +0 -12
  129. teuthology/sentry.py +0 -18
  130. teuthology/test/__init__.py +0 -0
  131. teuthology/test/fake_archive.py +0 -107
  132. teuthology/test/fake_fs.py +0 -92
  133. teuthology/test/integration/__init__.py +0 -0
  134. teuthology/test/integration/test_suite.py +0 -86
  135. teuthology/test/task/__init__.py +0 -205
  136. teuthology/test/task/test_ansible.py +0 -624
  137. teuthology/test/task/test_ceph_ansible.py +0 -176
  138. teuthology/test/task/test_console_log.py +0 -88
  139. teuthology/test/task/test_install.py +0 -337
  140. teuthology/test/task/test_internal.py +0 -57
  141. teuthology/test/task/test_kernel.py +0 -243
  142. teuthology/test/task/test_pcp.py +0 -379
  143. teuthology/test/task/test_selinux.py +0 -35
  144. teuthology/test/test_config.py +0 -189
  145. teuthology/test/test_contextutil.py +0 -68
  146. teuthology/test/test_describe_tests.py +0 -316
  147. teuthology/test/test_email_sleep_before_teardown.py +0 -81
  148. teuthology/test/test_exit.py +0 -97
  149. teuthology/test/test_get_distro.py +0 -47
  150. teuthology/test/test_get_distro_version.py +0 -47
  151. teuthology/test/test_get_multi_machine_types.py +0 -27
  152. teuthology/test/test_job_status.py +0 -60
  153. teuthology/test/test_ls.py +0 -48
  154. teuthology/test/test_misc.py +0 -368
  155. teuthology/test/test_nuke.py +0 -232
  156. teuthology/test/test_packaging.py +0 -763
  157. teuthology/test/test_parallel.py +0 -28
  158. teuthology/test/test_repo_utils.py +0 -204
  159. teuthology/test/test_report.py +0 -77
  160. teuthology/test/test_results.py +0 -155
  161. teuthology/test/test_run.py +0 -238
  162. teuthology/test/test_safepath.py +0 -55
  163. teuthology/test/test_schedule.py +0 -45
  164. teuthology/test/test_scrape.py +0 -167
  165. teuthology/test/test_timer.py +0 -80
  166. teuthology/test/test_vps_os_vers_parameter_checking.py +0 -84
  167. teuthology/test/test_worker.py +0 -303
  168. teuthology/worker.py +0 -339
  169. teuthology-1.0.0.dist-info/METADATA +0 -76
  170. teuthology-1.0.0.dist-info/RECORD +0 -210
  171. {teuthology-1.0.0.dist-info → teuthology-1.2.0.dist-info}/LICENSE +0 -0
  172. {teuthology-1.0.0.dist-info → teuthology-1.2.0.dist-info}/top_level.txt +0 -0
@@ -1,205 +0,0 @@
1
- from mock import patch, DEFAULT
2
- from pytest import raises
3
-
4
- from teuthology.config import FakeNamespace
5
- from teuthology.orchestra.cluster import Cluster
6
- from teuthology.orchestra.remote import Remote
7
- from teuthology.task import Task
8
-
9
-
10
- class TestTask(object):
11
- klass = Task
12
- task_name = 'task'
13
-
14
- def setup(self):
15
- self.ctx = FakeNamespace()
16
- self.ctx.config = dict()
17
- self.task_config = dict()
18
-
19
- def test_overrides(self):
20
- self.ctx.config['overrides'] = dict()
21
- self.ctx.config['overrides'][self.task_name] = dict(
22
- key_1='overridden',
23
- )
24
- self.task_config.update(dict(
25
- key_1='default',
26
- key_2='default',
27
- ))
28
- with patch.multiple(
29
- self.klass,
30
- begin=DEFAULT,
31
- end=DEFAULT,
32
- ):
33
- with self.klass(self.ctx, self.task_config) as task:
34
- assert task.config['key_1'] == 'overridden'
35
- assert task.config['key_2'] == 'default'
36
-
37
- def test_hosts_no_filter(self):
38
- self.ctx.cluster = Cluster()
39
- self.ctx.cluster.add(Remote('user@remote1'), ['role1'])
40
- self.ctx.cluster.add(Remote('user@remote2'), ['role2'])
41
- with patch.multiple(
42
- self.klass,
43
- begin=DEFAULT,
44
- end=DEFAULT,
45
- ):
46
- with self.klass(self.ctx, self.task_config) as task:
47
- task_hosts = list(task.cluster.remotes)
48
- assert len(task_hosts) == 2
49
- assert sorted(host.shortname for host in task_hosts) == \
50
- ['remote1', 'remote2']
51
-
52
- def test_hosts_no_results(self):
53
- self.ctx.cluster = Cluster()
54
- self.ctx.cluster.add(Remote('user@remote1'), ['role1'])
55
- self.task_config.update(dict(
56
- hosts=['role2'],
57
- ))
58
- with patch.multiple(
59
- self.klass,
60
- begin=DEFAULT,
61
- end=DEFAULT,
62
- ):
63
- with raises(RuntimeError):
64
- with self.klass(self.ctx, self.task_config):
65
- pass
66
-
67
- def test_hosts_one_role(self):
68
- self.ctx.cluster = Cluster()
69
- self.ctx.cluster.add(Remote('user@remote1'), ['role1'])
70
- self.ctx.cluster.add(Remote('user@remote2'), ['role2'])
71
- self.task_config.update(dict(
72
- hosts=['role1'],
73
- ))
74
- with patch.multiple(
75
- self.klass,
76
- begin=DEFAULT,
77
- end=DEFAULT,
78
- ):
79
- with self.klass(self.ctx, self.task_config) as task:
80
- task_hosts = list(task.cluster.remotes)
81
- assert len(task_hosts) == 1
82
- assert task_hosts[0].shortname == 'remote1'
83
-
84
- def test_hosts_two_roles(self):
85
- self.ctx.cluster = Cluster()
86
- self.ctx.cluster.add(Remote('user@remote1'), ['role1'])
87
- self.ctx.cluster.add(Remote('user@remote2'), ['role2'])
88
- self.ctx.cluster.add(Remote('user@remote3'), ['role3'])
89
- self.task_config.update(dict(
90
- hosts=['role1', 'role3'],
91
- ))
92
- with patch.multiple(
93
- self.klass,
94
- begin=DEFAULT,
95
- end=DEFAULT,
96
- ):
97
- with self.klass(self.ctx, self.task_config) as task:
98
- task_hosts = list(task.cluster.remotes)
99
- assert len(task_hosts) == 2
100
- hostnames = [host.shortname for host in task_hosts]
101
- assert sorted(hostnames) == ['remote1', 'remote3']
102
-
103
- def test_hosts_two_hostnames(self):
104
- self.ctx.cluster = Cluster()
105
- self.ctx.cluster.add(Remote('user@remote1.example.com'), ['role1'])
106
- self.ctx.cluster.add(Remote('user@remote2.example.com'), ['role2'])
107
- self.ctx.cluster.add(Remote('user@remote3.example.com'), ['role3'])
108
- self.task_config.update(dict(
109
- hosts=['remote1', 'remote2.example.com'],
110
- ))
111
- with patch.multiple(
112
- self.klass,
113
- begin=DEFAULT,
114
- end=DEFAULT,
115
- ):
116
- with self.klass(self.ctx, self.task_config) as task:
117
- task_hosts = list(task.cluster.remotes)
118
- assert len(task_hosts) == 2
119
- hostnames = [host.hostname for host in task_hosts]
120
- assert sorted(hostnames) == ['remote1.example.com',
121
- 'remote2.example.com']
122
-
123
- def test_hosts_one_role_one_hostname(self):
124
- self.ctx.cluster = Cluster()
125
- self.ctx.cluster.add(Remote('user@remote1.example.com'), ['role1'])
126
- self.ctx.cluster.add(Remote('user@remote2.example.com'), ['role2'])
127
- self.ctx.cluster.add(Remote('user@remote3.example.com'), ['role3'])
128
- self.task_config.update(dict(
129
- hosts=['role1', 'remote2.example.com'],
130
- ))
131
- with patch.multiple(
132
- self.klass,
133
- begin=DEFAULT,
134
- end=DEFAULT,
135
- ):
136
- with self.klass(self.ctx, self.task_config) as task:
137
- task_hosts = list(task.cluster.remotes)
138
- assert len(task_hosts) == 2
139
- hostnames = [host.hostname for host in task_hosts]
140
- assert sorted(hostnames) == ['remote1.example.com',
141
- 'remote2.example.com']
142
-
143
- def test_setup_called(self):
144
- with patch.multiple(
145
- self.klass,
146
- setup=DEFAULT,
147
- begin=DEFAULT,
148
- end=DEFAULT,
149
- teardown=DEFAULT,
150
- ):
151
- with self.klass(self.ctx, self.task_config) as task:
152
- task.setup.assert_called_once_with()
153
-
154
- def test_begin_called(self):
155
- with patch.multiple(
156
- self.klass,
157
- setup=DEFAULT,
158
- begin=DEFAULT,
159
- end=DEFAULT,
160
- teardown=DEFAULT,
161
- ):
162
- with self.klass(self.ctx, self.task_config) as task:
163
- task.begin.assert_called_once_with()
164
-
165
- def test_end_called(self):
166
- self.task_config.update(dict())
167
- with patch.multiple(
168
- self.klass,
169
- begin=DEFAULT,
170
- end=DEFAULT,
171
- ):
172
- with self.klass(self.ctx, self.task_config) as task:
173
- pass
174
- task.end.assert_called_once_with()
175
-
176
- def test_teardown_called(self):
177
- self.task_config.update(dict())
178
- with patch.multiple(
179
- self.klass,
180
- setup=DEFAULT,
181
- begin=DEFAULT,
182
- end=DEFAULT,
183
- teardown=DEFAULT,
184
- ):
185
- with self.klass(self.ctx, self.task_config) as task:
186
- pass
187
- task.teardown.assert_called_once_with()
188
-
189
- def test_skip_teardown(self):
190
- self.task_config.update(dict(
191
- skip_teardown=True,
192
- ))
193
-
194
- def fake_teardown(self):
195
- assert False
196
-
197
- with patch.multiple(
198
- self.klass,
199
- setup=DEFAULT,
200
- begin=DEFAULT,
201
- end=DEFAULT,
202
- teardown=fake_teardown,
203
- ):
204
- with self.klass(self.ctx, self.task_config):
205
- pass