spells icon indicating copy to clipboard operation
spells copied to clipboard

canonical-kubernetes install fails in 02_get-kubectl after-deploy on macOS

Open mgeeforce opened this issue 6 years ago • 1 comments

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 avatar May 03 '18 22:05 mgeeforce

@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

kwmonroe avatar Jun 12 '18 15:06 kwmonroe