executing binary from code fails but running it from command line works

5/5/2017

I am trying to upgrade a little netperf-tester from contrib respository but I have one problem as I am not a good developer I have added one more arg for kubectl:

args := []string{"run", serviceName, "--image=" + image, fmt.Sprintf("--port=%d", port), "--hostport=65530", fmt.Sprintf("--overrides='{ \"apiVersion\": \"extensions/v1beta1\", \"spec\": { \"nodeSelector\": { \"kubernetes.io/hostname\": \"%s\" } } }'", node)}

but it gives me an error:

2017/05/05 10:18:02 kubectl path := kubectl
2017/05/05 10:18:02 Running kubectl with args := [run netperf-tester-host --image=paultiplady/netserver:ubuntu.2 --port=12865 --hostport=65530 --overrides='{ "apiVersion": "extensions/v1beta1", "spec": { "nodeSelector": { "kubernetes.io/hostname": "10.122.16.118" } } }']
2017/05/05 10:18:04 Error adding service: exit status 1
Output: error: Invalid JSON Patch

when I am running it manually it works

$ kubectl run netperf-tester-host --image=paultiplady/netserver:ubuntu.2 --port=12865 --hostport=65530 --overrides='{ "apiVersion": "extensions/v1beta1", "spec": { "nodeSelector": { "kubernetes.io/hostname": "10.122.16.118" } } }'
deployment "netperf-tester-host" created

if anyone can point me where the error is I would be very grateful

-- widget
go
kubectl
kubernetes

1 Answer

5/5/2017

the prablem was single quotes in --overrides arg for exec according to this thread, it should look like this:

args := []string{"run", serviceName, "--image=" + image, fmt.Sprintf("--port=%d", port), "--hostport=65530", fmt.Sprintf("--overrides={ \"apiVersion\": \"extensions/v1beta1\", \"spec\": { \"nodeSelector\": { \"kubernetes.io/hostname\": \"%s\" } } }", node)}
-- widget
Source: StackOverflow