Merge lp:~bigdata-dev/charms/trusty/apache-hadoop-hdfs-master/status into lp:~bigdata-dev/charms/trusty/apache-hadoop-hdfs-master/trunk
- Trusty Tahr (14.04)
- status
- Merge into trunk
Proposed by
Cory Johns
Status: | Merged |
---|---|
Merge reported by: | Cory Johns |
Merged at revision: | not available |
Proposed branch: | lp:~bigdata-dev/charms/trusty/apache-hadoop-hdfs-master/status |
Merge into: | lp:~bigdata-dev/charms/trusty/apache-hadoop-hdfs-master/trunk |
Diff against target: |
327 lines (+130/-33) 11 files modified
hooks/callbacks.py (+22/-0) hooks/common.py (+22/-14) hooks/config-changed (+11/-0) hooks/datanode-relation-changed (+11/-0) hooks/install (+11/-0) hooks/namenode-relation-changed (+11/-0) hooks/secondary-relation-changed (+11/-0) hooks/setup.py (+8/-10) hooks/start (+11/-0) hooks/stop (+11/-0) resources.yaml (+1/-9) |
To merge this branch: | bzr merge lp:~bigdata-dev/charms/trusty/apache-hadoop-hdfs-master/status |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Kevin W Monroe | Approve | ||
Review via email: mp+262926@code.launchpad.net |
Commit message
Description of the change
Added extended status support.
Example status (tabular) outputs:
http://
http://
Example status-history outputs:
http://
http://
To post a comment you must log in.
Revision history for this message
Cory Johns (johnsca) wrote : | # |
- 87. By Cory Johns
-
Nested python resources to avoid attempting to pip install future non-python resources
Revision history for this message
Kevin W Monroe (kwmonroe) wrote : | # |
status + bundled resources LGTM, +1.
Merged into to -dev/trunk in r87.
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'hooks/callbacks.py' | |||
2 | --- hooks/callbacks.py 2015-05-12 21:56:03 +0000 | |||
3 | +++ hooks/callbacks.py 2015-06-25 13:44:10 +0000 | |||
4 | @@ -15,3 +15,25 @@ | |||
5 | 15 | Add any additional tasks / setup here. If a callback is used by mutliple | 15 | Add any additional tasks / setup here. If a callback is used by mutliple |
6 | 16 | charms, consider refactoring it up to the jujubigdata library. | 16 | charms, consider refactoring it up to the jujubigdata library. |
7 | 17 | """ | 17 | """ |
8 | 18 | |||
9 | 19 | from charmhelpers.core import hookenv | ||
10 | 20 | from charmhelpers.core import unitdata | ||
11 | 21 | from jujubigdata.relations import DataNode | ||
12 | 22 | |||
13 | 23 | |||
14 | 24 | def update_working_status(): | ||
15 | 25 | if unitdata.kv().get('charm.active', False): | ||
16 | 26 | hookenv.status_set('maintenance', 'Updating configuration') | ||
17 | 27 | return | ||
18 | 28 | hookenv.status_set('maintenance', 'Setting up HDFS master') | ||
19 | 29 | |||
20 | 30 | |||
21 | 31 | def update_active_status(): | ||
22 | 32 | datanode = DataNode() | ||
23 | 33 | if datanode.is_ready(): | ||
24 | 34 | hookenv.status_set('active', 'Ready (%s DataNodes)' % len(datanode.filtered_data())) | ||
25 | 35 | unitdata.kv().set('charm.active', True) | ||
26 | 36 | elif datanode.connected_units(): | ||
27 | 37 | hookenv.status_set('waiting', 'Waiting for compute slaves to provide DataNodes') | ||
28 | 38 | else: | ||
29 | 39 | hookenv.status_set('blocked', 'Waiting for relation to compute slaves') | ||
30 | 18 | 40 | ||
31 | === modified file 'hooks/common.py' | |||
32 | --- hooks/common.py 2015-06-19 17:25:28 +0000 | |||
33 | +++ hooks/common.py 2015-06-25 13:44:10 +0000 | |||
34 | @@ -12,37 +12,39 @@ | |||
35 | 12 | # limitations under the License. | 12 | # limitations under the License. |
36 | 13 | 13 | ||
37 | 14 | import jujuresources | 14 | import jujuresources |
46 | 15 | 15 | from charmhelpers.core import hookenv | |
47 | 16 | 16 | from charmhelpers.core import unitdata | |
48 | 17 | def status_set(status, message): | 17 | from charmhelpers.core import charmframework |
41 | 18 | import subprocess | ||
42 | 19 | try: | ||
43 | 20 | subprocess.check_call(['status-set', status, message]) | ||
44 | 21 | except (subprocess.CalledProcessError, OSError): | ||
45 | 22 | jujuresources.juju_log('status: {}: {}'.format(status, message), 'ERROR') | ||
49 | 23 | 18 | ||
50 | 24 | 19 | ||
51 | 25 | def bootstrap_resources(): | 20 | def bootstrap_resources(): |
52 | 26 | """ | 21 | """ |
53 | 27 | Install required resources defined in resources.yaml | 22 | Install required resources defined in resources.yaml |
54 | 28 | """ | 23 | """ |
55 | 24 | if unitdata.kv().get('charm.bootstrapped', False): | ||
56 | 25 | return True | ||
57 | 26 | hookenv.status_set('maintenance', 'Installing base resources') | ||
58 | 29 | mirror_url = jujuresources.config_get('resources_mirror') | 27 | mirror_url = jujuresources.config_get('resources_mirror') |
59 | 30 | if not jujuresources.fetch(mirror_url=mirror_url): | 28 | if not jujuresources.fetch(mirror_url=mirror_url): |
61 | 31 | status_set('blocked', 'Resources unavailable; manual intervention required') | 29 | missing = jujuresources.invalid() |
62 | 30 | hookenv.status_set('blocked', 'Unable to fetch required resource%s: %s' % ( | ||
63 | 31 | 's' if len(missing) > 1 else '', | ||
64 | 32 | ', '.join(missing), | ||
65 | 33 | )) | ||
66 | 32 | return False | 34 | return False |
68 | 33 | jujuresources.install(['pathlib', 'pyaml', 'six', 'charmhelpers', 'jujubigdata']) | 35 | jujuresources.install(['pathlib', 'jujubigdata']) |
69 | 36 | unitdata.kv().set('charm.bootstrapped', True) | ||
70 | 34 | return True | 37 | return True |
71 | 35 | 38 | ||
72 | 36 | 39 | ||
73 | 37 | def manage(): | 40 | def manage(): |
74 | 38 | if not bootstrap_resources(): | 41 | if not bootstrap_resources(): |
77 | 39 | # defer until resources are available, since charmhelpers, and thus | 42 | # defer until resources are available, since jujubigdata, and thus the |
78 | 40 | # the framework, (will be) managed by jujuresources | 43 | # classes needed for the requires blocks, (will be) managed by jujuresources |
79 | 41 | return | 44 | return |
80 | 42 | 45 | ||
81 | 43 | from charmhelpers.core import charmframework | ||
82 | 44 | import jujubigdata | 46 | import jujubigdata |
84 | 45 | import callbacks # noqa (ignore when linting) | 47 | import callbacks |
85 | 46 | 48 | ||
86 | 47 | # list of keys required to be in the dist.yaml | 49 | # list of keys required to be in the dist.yaml |
87 | 48 | master_reqs = ['vendor', 'hadoop_version', 'packages', 'groups', 'users', | 50 | master_reqs = ['vendor', 'hadoop_version', 'packages', 'groups', 'users', |
88 | @@ -80,6 +82,11 @@ | |||
89 | 80 | jujubigdata.relations.SecondaryNameNode(optional=True), | 82 | jujubigdata.relations.SecondaryNameNode(optional=True), |
90 | 81 | ], | 83 | ], |
91 | 82 | 'callbacks': [ | 84 | 'callbacks': [ |
92 | 85 | # These callbacks will be executed once the Hadoop base packages | ||
93 | 86 | # are installed. New items can be added to the end of this list | ||
94 | 87 | # and to hooks/callbacks.py to extend the functionality of this | ||
95 | 88 | # charm. | ||
96 | 89 | callbacks.update_working_status, | ||
97 | 83 | datanodes.register_connected_hosts, | 90 | datanodes.register_connected_hosts, |
98 | 84 | secondary.register_connected_hosts, | 91 | secondary.register_connected_hosts, |
99 | 85 | jujubigdata.utils.manage_etc_hosts, | 92 | jujubigdata.utils.manage_etc_hosts, |
100 | @@ -89,6 +96,7 @@ | |||
101 | 89 | hdfs.start_namenode, | 96 | hdfs.start_namenode, |
102 | 90 | hdfs.create_hdfs_dirs, | 97 | hdfs.create_hdfs_dirs, |
103 | 91 | charmframework.helpers.open_ports(dist_config.exposed_ports('hdfs-master')), | 98 | charmframework.helpers.open_ports(dist_config.exposed_ports('hdfs-master')), |
104 | 99 | callbacks.update_active_status, | ||
105 | 92 | ], | 100 | ], |
106 | 93 | 'cleanup': [ | 101 | 'cleanup': [ |
107 | 94 | charmframework.helpers.close_ports(dist_config.exposed_ports('hdfs-master')), | 102 | charmframework.helpers.close_ports(dist_config.exposed_ports('hdfs-master')), |
108 | 95 | 103 | ||
109 | === modified file 'hooks/config-changed' | |||
110 | --- hooks/config-changed 2015-02-09 18:19:59 +0000 | |||
111 | +++ hooks/config-changed 2015-06-25 13:44:10 +0000 | |||
112 | @@ -11,5 +11,16 @@ | |||
113 | 11 | # See the License for the specific language governing permissions and | 11 | # See the License for the specific language governing permissions and |
114 | 12 | # limitations under the License. | 12 | # limitations under the License. |
115 | 13 | 13 | ||
116 | 14 | """ | ||
117 | 15 | All hooks in this charm are managed by the Charm Framework. | ||
118 | 16 | The framework helps manage dependencies and preconditions to ensure that | ||
119 | 17 | steps are only executed when they can be successful. As such, no additional | ||
120 | 18 | code should be added to this hook; instead, please integrate new functionality | ||
121 | 19 | into the 'callbacks' list in hooks/common.py. New callbacks can be placed | ||
122 | 20 | in hooks/callbacks.py, if necessary. | ||
123 | 21 | |||
124 | 22 | See http://big-data-charm-helpers.readthedocs.org/en/latest/examples/framework.html | ||
125 | 23 | for more information. | ||
126 | 24 | """ | ||
127 | 14 | import common | 25 | import common |
128 | 15 | common.manage() | 26 | common.manage() |
129 | 16 | 27 | ||
130 | === modified file 'hooks/datanode-relation-changed' | |||
131 | --- hooks/datanode-relation-changed 2015-05-12 21:56:03 +0000 | |||
132 | +++ hooks/datanode-relation-changed 2015-06-25 13:44:10 +0000 | |||
133 | @@ -11,5 +11,16 @@ | |||
134 | 11 | # See the License for the specific language governing permissions and | 11 | # See the License for the specific language governing permissions and |
135 | 12 | # limitations under the License. | 12 | # limitations under the License. |
136 | 13 | 13 | ||
137 | 14 | """ | ||
138 | 15 | All hooks in this charm are managed by the Charm Framework. | ||
139 | 16 | The framework helps manage dependencies and preconditions to ensure that | ||
140 | 17 | steps are only executed when they can be successful. As such, no additional | ||
141 | 18 | code should be added to this hook; instead, please integrate new functionality | ||
142 | 19 | into the 'callbacks' list in hooks/common.py. New callbacks can be placed | ||
143 | 20 | in hooks/callbacks.py, if necessary. | ||
144 | 21 | |||
145 | 22 | See http://big-data-charm-helpers.readthedocs.org/en/latest/examples/framework.html | ||
146 | 23 | for more information. | ||
147 | 24 | """ | ||
148 | 14 | import common | 25 | import common |
149 | 15 | common.manage() | 26 | common.manage() |
150 | 16 | 27 | ||
151 | === modified file 'hooks/install' | |||
152 | --- hooks/install 2015-02-09 18:19:59 +0000 | |||
153 | +++ hooks/install 2015-06-25 13:44:10 +0000 | |||
154 | @@ -13,5 +13,16 @@ | |||
155 | 13 | import setup | 13 | import setup |
156 | 14 | setup.pre_install() | 14 | setup.pre_install() |
157 | 15 | 15 | ||
158 | 16 | """ | ||
159 | 17 | All hooks in this charm are managed by the Charm Framework. | ||
160 | 18 | The framework helps manage dependencies and preconditions to ensure that | ||
161 | 19 | steps are only executed when they can be successful. As such, no additional | ||
162 | 20 | code should be added to this hook; instead, please integrate new functionality | ||
163 | 21 | into the 'callbacks' list in hooks/common.py. New callbacks can be placed | ||
164 | 22 | in hooks/callbacks.py, if necessary. | ||
165 | 23 | |||
166 | 24 | See http://big-data-charm-helpers.readthedocs.org/en/latest/examples/framework.html | ||
167 | 25 | for more information. | ||
168 | 26 | """ | ||
169 | 16 | import common | 27 | import common |
170 | 17 | common.manage() | 28 | common.manage() |
171 | 18 | 29 | ||
172 | === modified file 'hooks/namenode-relation-changed' | |||
173 | --- hooks/namenode-relation-changed 2015-05-12 21:56:03 +0000 | |||
174 | +++ hooks/namenode-relation-changed 2015-06-25 13:44:10 +0000 | |||
175 | @@ -11,5 +11,16 @@ | |||
176 | 11 | # See the License for the specific language governing permissions and | 11 | # See the License for the specific language governing permissions and |
177 | 12 | # limitations under the License. | 12 | # limitations under the License. |
178 | 13 | 13 | ||
179 | 14 | """ | ||
180 | 15 | All hooks in this charm are managed by the Charm Framework. | ||
181 | 16 | The framework helps manage dependencies and preconditions to ensure that | ||
182 | 17 | steps are only executed when they can be successful. As such, no additional | ||
183 | 18 | code should be added to this hook; instead, please integrate new functionality | ||
184 | 19 | into the 'callbacks' list in hooks/common.py. New callbacks can be placed | ||
185 | 20 | in hooks/callbacks.py, if necessary. | ||
186 | 21 | |||
187 | 22 | See http://big-data-charm-helpers.readthedocs.org/en/latest/examples/framework.html | ||
188 | 23 | for more information. | ||
189 | 24 | """ | ||
190 | 14 | import common | 25 | import common |
191 | 15 | common.manage() | 26 | common.manage() |
192 | 16 | 27 | ||
193 | === modified file 'hooks/secondary-relation-changed' | |||
194 | --- hooks/secondary-relation-changed 2015-05-12 21:56:03 +0000 | |||
195 | +++ hooks/secondary-relation-changed 2015-06-25 13:44:10 +0000 | |||
196 | @@ -11,5 +11,16 @@ | |||
197 | 11 | # See the License for the specific language governing permissions and | 11 | # See the License for the specific language governing permissions and |
198 | 12 | # limitations under the License. | 12 | # limitations under the License. |
199 | 13 | 13 | ||
200 | 14 | """ | ||
201 | 15 | All hooks in this charm are managed by the Charm Framework. | ||
202 | 16 | The framework helps manage dependencies and preconditions to ensure that | ||
203 | 17 | steps are only executed when they can be successful. As such, no additional | ||
204 | 18 | code should be added to this hook; instead, please integrate new functionality | ||
205 | 19 | into the 'callbacks' list in hooks/common.py. New callbacks can be placed | ||
206 | 20 | in hooks/callbacks.py, if necessary. | ||
207 | 21 | |||
208 | 22 | See http://big-data-charm-helpers.readthedocs.org/en/latest/examples/framework.html | ||
209 | 23 | for more information. | ||
210 | 24 | """ | ||
211 | 14 | import common | 25 | import common |
212 | 15 | common.manage() | 26 | common.manage() |
213 | 16 | 27 | ||
214 | === modified file 'hooks/setup.py' | |||
215 | --- hooks/setup.py 2015-03-03 21:30:47 +0000 | |||
216 | +++ hooks/setup.py 2015-06-25 13:44:10 +0000 | |||
217 | @@ -12,24 +12,22 @@ | |||
218 | 12 | import subprocess | 12 | import subprocess |
219 | 13 | from glob import glob | 13 | from glob import glob |
220 | 14 | 14 | ||
221 | 15 | |||
222 | 15 | def pre_install(): | 16 | def pre_install(): |
223 | 16 | """ | 17 | """ |
224 | 17 | Do any setup required before the install hook. | 18 | Do any setup required before the install hook. |
225 | 18 | """ | 19 | """ |
226 | 19 | install_pip() | 20 | install_pip() |
228 | 20 | install_jujuresources() | 21 | install_bundled_resources() |
229 | 21 | 22 | ||
230 | 22 | 23 | ||
231 | 23 | def install_pip(): | 24 | def install_pip(): |
232 | 24 | subprocess.check_call(['apt-get', 'install', '-yq', 'python-pip', 'bzr']) | 25 | subprocess.check_call(['apt-get', 'install', '-yq', 'python-pip', 'bzr']) |
233 | 25 | 26 | ||
234 | 26 | 27 | ||
244 | 27 | def install_jujuresources(): | 28 | def install_bundled_resources(): |
245 | 28 | """ | 29 | """ |
246 | 29 | Install the bundled jujuresources library, if not present. | 30 | Install the bundled resources libraries. |
247 | 30 | """ | 31 | """ |
248 | 31 | try: | 32 | archives = glob('resources/python/*') |
249 | 32 | import jujuresources # noqa | 33 | subprocess.check_call(['pip', 'install'] + archives) |
241 | 33 | except ImportError: | ||
242 | 34 | jr_archive = glob('resources/jujuresources-*.tar.gz')[0] | ||
243 | 35 | subprocess.check_call(['pip', 'install', jr_archive]) | ||
250 | 36 | 34 | ||
251 | === modified file 'hooks/start' | |||
252 | --- hooks/start 2015-02-09 18:19:59 +0000 | |||
253 | +++ hooks/start 2015-06-25 13:44:10 +0000 | |||
254 | @@ -11,5 +11,16 @@ | |||
255 | 11 | # See the License for the specific language governing permissions and | 11 | # See the License for the specific language governing permissions and |
256 | 12 | # limitations under the License. | 12 | # limitations under the License. |
257 | 13 | 13 | ||
258 | 14 | """ | ||
259 | 15 | All hooks in this charm are managed by the Charm Framework. | ||
260 | 16 | The framework helps manage dependencies and preconditions to ensure that | ||
261 | 17 | steps are only executed when they can be successful. As such, no additional | ||
262 | 18 | code should be added to this hook; instead, please integrate new functionality | ||
263 | 19 | into the 'callbacks' list in hooks/common.py. New callbacks can be placed | ||
264 | 20 | in hooks/callbacks.py, if necessary. | ||
265 | 21 | |||
266 | 22 | See http://big-data-charm-helpers.readthedocs.org/en/latest/examples/framework.html | ||
267 | 23 | for more information. | ||
268 | 24 | """ | ||
269 | 14 | import common | 25 | import common |
270 | 15 | common.manage() | 26 | common.manage() |
271 | 16 | 27 | ||
272 | === modified file 'hooks/stop' | |||
273 | --- hooks/stop 2015-02-09 18:19:59 +0000 | |||
274 | +++ hooks/stop 2015-06-25 13:44:10 +0000 | |||
275 | @@ -11,5 +11,16 @@ | |||
276 | 11 | # See the License for the specific language governing permissions and | 11 | # See the License for the specific language governing permissions and |
277 | 12 | # limitations under the License. | 12 | # limitations under the License. |
278 | 13 | 13 | ||
279 | 14 | """ | ||
280 | 15 | All hooks in this charm are managed by the Charm Framework. | ||
281 | 16 | The framework helps manage dependencies and preconditions to ensure that | ||
282 | 17 | steps are only executed when they can be successful. As such, no additional | ||
283 | 18 | code should be added to this hook; instead, please integrate new functionality | ||
284 | 19 | into the 'callbacks' list in hooks/common.py. New callbacks can be placed | ||
285 | 20 | in hooks/callbacks.py, if necessary. | ||
286 | 21 | |||
287 | 22 | See http://big-data-charm-helpers.readthedocs.org/en/latest/examples/framework.html | ||
288 | 23 | for more information. | ||
289 | 24 | """ | ||
290 | 14 | import common | 25 | import common |
291 | 15 | common.manage() | 26 | common.manage() |
292 | 16 | 27 | ||
293 | === modified file 'resources.yaml' | |||
294 | --- resources.yaml 2015-06-19 17:25:28 +0000 | |||
295 | +++ resources.yaml 2015-06-25 13:44:10 +0000 | |||
296 | @@ -3,16 +3,8 @@ | |||
297 | 3 | resources: | 3 | resources: |
298 | 4 | pathlib: | 4 | pathlib: |
299 | 5 | pypi: path.py>=7.0 | 5 | pypi: path.py>=7.0 |
300 | 6 | pyaml: | ||
301 | 7 | pypi: pyaml | ||
302 | 8 | six: | ||
303 | 9 | pypi: six | ||
304 | 10 | jujubigdata: | 6 | jujubigdata: |
310 | 11 | pypi: jujubigdata>=2.0.0,<3.0.0 | 7 | pypi: jujubigdata>=2.0.2,<3.0.0 |
306 | 12 | charmhelpers: | ||
307 | 13 | pypi: http://bazaar.launchpad.net/~bigdata-dev/bigdata-data/trunk/download/kevin.monroe%40canonical.com-20150610215108-gq4ud2rriy1sp1h6/charmhelpers0.3.1.ta-20150610215050-vxrqhizdsrqwnmcm-1/charmhelpers-0.3.1.tar.gz | ||
308 | 14 | hash: 061fe7204289b96fab5d3ca02883040ea3026526ebf0ad38e21457527a18d139 | ||
309 | 15 | hash_type: sha256 | ||
311 | 16 | java-installer: | 8 | java-installer: |
312 | 17 | # This points to a script which manages installing Java. | 9 | # This points to a script which manages installing Java. |
313 | 18 | # If replaced with an alternate implementation, it must output *only* two | 10 | # If replaced with an alternate implementation, it must output *only* two |
314 | 19 | 11 | ||
315 | === removed file 'resources/jujuresources-0.2.5.tar.gz' | |||
316 | 20 | Binary files resources/jujuresources-0.2.5.tar.gz 2015-03-03 19:57:43 +0000 and resources/jujuresources-0.2.5.tar.gz 1970-01-01 00:00:00 +0000 differ | 12 | Binary files resources/jujuresources-0.2.5.tar.gz 2015-03-03 19:57:43 +0000 and resources/jujuresources-0.2.5.tar.gz 1970-01-01 00:00:00 +0000 differ |
317 | === added directory 'resources/python' | |||
318 | === added file 'resources/python/PyYAML-3.11.tar.gz' | |||
319 | 21 | Binary files resources/python/PyYAML-3.11.tar.gz 1970-01-01 00:00:00 +0000 and resources/python/PyYAML-3.11.tar.gz 2015-06-25 13:44:10 +0000 differ | 13 | Binary files resources/python/PyYAML-3.11.tar.gz 1970-01-01 00:00:00 +0000 and resources/python/PyYAML-3.11.tar.gz 2015-06-25 13:44:10 +0000 differ |
320 | === added file 'resources/python/charmhelpers-0.3.1.tar.gz' | |||
321 | 22 | Binary files resources/python/charmhelpers-0.3.1.tar.gz 1970-01-01 00:00:00 +0000 and resources/python/charmhelpers-0.3.1.tar.gz 2015-06-25 13:44:10 +0000 differ | 14 | Binary files resources/python/charmhelpers-0.3.1.tar.gz 1970-01-01 00:00:00 +0000 and resources/python/charmhelpers-0.3.1.tar.gz 2015-06-25 13:44:10 +0000 differ |
322 | === added file 'resources/python/jujuresources-0.2.8.tar.gz' | |||
323 | 23 | Binary files resources/python/jujuresources-0.2.8.tar.gz 1970-01-01 00:00:00 +0000 and resources/python/jujuresources-0.2.8.tar.gz 2015-06-25 13:44:10 +0000 differ | 15 | Binary files resources/python/jujuresources-0.2.8.tar.gz 1970-01-01 00:00:00 +0000 and resources/python/jujuresources-0.2.8.tar.gz 2015-06-25 13:44:10 +0000 differ |
324 | === added file 'resources/python/pyaml-15.5.7.tar.gz' | |||
325 | 24 | Binary files resources/python/pyaml-15.5.7.tar.gz 1970-01-01 00:00:00 +0000 and resources/python/pyaml-15.5.7.tar.gz 2015-06-25 13:44:10 +0000 differ | 16 | Binary files resources/python/pyaml-15.5.7.tar.gz 1970-01-01 00:00:00 +0000 and resources/python/pyaml-15.5.7.tar.gz 2015-06-25 13:44:10 +0000 differ |
326 | === added file 'resources/python/six-1.9.0-py2.py3-none-any.whl' | |||
327 | 25 | Binary files resources/python/six-1.9.0-py2.py3-none-any.whl 1970-01-01 00:00:00 +0000 and resources/python/six-1.9.0-py2.py3-none-any.whl 2015-06-25 13:44:10 +0000 differ | 17 | Binary files resources/python/six-1.9.0-py2.py3-none-any.whl 1970-01-01 00:00:00 +0000 and resources/python/six-1.9.0-py2.py3-none-any.whl 2015-06-25 13:44:10 +0000 differ |
I also bundled charmhelpers and its dependencies, since there is almost no churn on it now and it made the status handling code cleaner as I could depend on hookenv. status_ set() always being there.