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,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