spells
spells copied to clipboard
canonical-kubernetes install fails in 02_get-kubectl after-deploy on macOS
With AWS as the target, I get all the way to after-deploy but then conjure-up fails. The AWS EC2 instances are all created and are up and running.
2018-05-03 16:05:53,416 [DEBUG] conjure-up/canonical-kubernetes - step.py:260 - Executing script: /Users/mike/.cache/conjure-up/canonical-kubernetes/steps/00_process-providertype/after-deploy 2018-05-03 16:05:53,440 [INFO] conjure-up/canonical-kubernetes - step.py:215 - Running Canonical Distribution of Kubernetes step: 02_get-kubectl after-deploy. 2018-05-03 16:05:53,621 [DEBUG] conjure-up/canonical-kubernetes - step.py:254 - Storing environment 2018-05-03 16:05:53,627 [DEBUG] conjure-up/canonical-kubernetes - step.py:260 - Executing script: /Users/mike/.cache/conjure-up/canonical-kubernetes/steps/02_get-kubectl/after-deploy 2018-05-03 16:06:45,544 [DEBUG] conjure-up/canonical-kubernetes - events.py:53 - Setting Error at conjureup/events.py:148 2018-05-03 16:06:45,544 [ERROR] conjure-up/canonical-kubernetes - events.py:160 - Unhandled exception in <Task finished coro=<RunStepsController.run_steps() done, defined at /usr/local/Cellar/conjure-up/2.5.6/libexec/lib/python3.6/site-packages/conjureup/controllers/runsteps/gui.py:14> exception=Exception('Failure in step 02_get-kubectl after-deploy',)> Traceback (most recent call last): File "/usr/local/Cellar/conjure-up/2.5.6/libexec/lib/python3.6/site-packages/conjureup/controllers/runsteps/gui.py", line 19, in run_steps step.result = await step.after_deploy(view.set_footer) File "/usr/local/Cellar/conjure-up/2.5.6/libexec/lib/python3.6/site-packages/conjureup/models/step.py", line 132, in after_deploy return await self.run(PHASES.AFTER_DEPLOY, msg_cb) File "/usr/local/Cellar/conjure-up/2.5.6/libexec/lib/python3.6/site-packages/conjureup/models/step.py", line 275, in run phase.value)) Exception: Failure in step 02_get-kubectl after-deploy 2018-05-03 16:06:45,566 [DEBUG] conjure-up/canonical-kubernetes - init.py:29 - Showing dialog for exception: Failure in step 02_get-kubectl after-deploy 2018-05-03 16:06:56,607 [WARNING] conjure-up/canonical-kubernetes - websockets.protocol: protocol.py:513 - Error in data transfer Traceback (most recent call last): File "/usr/local/Cellar/conjure-up/2.5.6/libexec/lib/python3.6/site-packages/websockets/protocol.py", line 496, in transfer_data msg = yield from self.read_message() File "/usr/local/Cellar/conjure-up/2.5.6/libexec/lib/python3.6/site-packages/websockets/protocol.py", line 526, in read_message frame = yield from self.read_data_frame(max_size=self.max_size) File "/usr/local/Cellar/conjure-up/2.5.6/libexec/lib/python3.6/site-packages/websockets/protocol.py", line 591, in read_data_frame frame = yield from self.read_frame(max_size) File "/usr/local/Cellar/conjure-up/2.5.6/libexec/lib/python3.6/site-packages/websockets/protocol.py", line 632, in read_frame extensions=self.extensions, File "/usr/local/Cellar/conjure-up/2.5.6/libexec/lib/python3.6/site-packages/websockets/framing.py", line 100, in read data = yield from reader(2) File "/usr/local/opt/python/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/streams.py", line 674, in readexactly yield from self._wait_for_data('readexactly') File "/usr/local/opt/python/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/streams.py", line 464, in _wait_for_data yield from self._waiter File "/usr/local/opt/python/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/selector_events.py", line 723, in _read_ready data = self._sock.recv(self.max_size) TimeoutError: [Errno 60] Operation timed out
@mgeeforce i'm unable to reproduce this on my mac. The spell does curl the kubectl binary from google -- is it possible your env is blocking the url or perhaps timed out before grabbing the whole thing (it's about 50MB)?
https://github.com/conjure-up/spells/blob/master/canonical-kubernetes/steps/02_get-kubectl/after-deploy#L11
If you're still having this issue, see if this works from a terminal:
curl -sLO https://storage.googleapis.com/kubernetes-release/release/v1.10.4/bin/darwin/amd64/kubectl
No matter what, we should validate the downloaded bits vs blindly assuming the binary is legit. Something like this in the spell would be nice:
--- a/canonical-kubernetes/steps/02_get-kubectl/after-deploy
+++ b/canonical-kubernetes/steps/02_get-kubectl/after-deploy
@@ -11,6 +11,10 @@ if [[ $(uname -s) = "Darwin" ]]; then
KUBE_REPO=https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64
curl -sLO "$KUBE_REPO/kubectl"
+ if ! file kubectl 2>&1 | grep -q 'executable'; then
+ echo "${app} is not an executable"
+ ## EXIT OR RETRY THE DOWNLOAD; TELL THE USER SOMETHING
+ fi
chmod +x kubectl
mv kubectl "$KUBE_DEST/kubectl"
else