diff --git a/Dockerfile b/Dockerfile index 3fce53f..e543cab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,5 @@ +ARG KUBERNETES_HOST=${KUBERNETES_HOST:-"127.0.0.1"} + FROM golang:alpine AS deps WORKDIR /app @@ -39,6 +41,8 @@ RUN sed -i 's/http:\/\/127.0.0.1:8080\/swagger\/swagger.json/swagger.json/g' /ap FROM golang:alpine +ENV KUBERNETES_SERVICE_HOST=$KUBERNETES_HOST + WORKDIR /app COPY --from=builder /app/extracted/oc-datacenter /usr/bin/ COPY --from=builder /app/extracted/swagger /app/swagger diff --git a/controllers/booking.go b/controllers/booking.go index c9885de..985689c 100644 --- a/controllers/booking.go +++ b/controllers/booking.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "oc-datacenter/infrastructure" - "strings" "time" oclib "cloud.o-forge.io/core/oc-lib" @@ -247,19 +246,11 @@ func (o *BookingController) Post() { o.ServeJSON() return } - if err := o.createNamespace(resp.ExecutionsID); err != nil { - if strings.Contains(err.Error(), "already exists") { - err = nil - } else { - o.Data["json"] = map[string]interface{}{ - "data": nil, - "code": 500, - "error": err.Error(), - } - o.ServeJSON() - return - } - } + + /*if err := o.createNamespace(resp.ExecutionsID); err != nil { + fmt.Println(err.Error()) + }*/ + o.Data["json"] = map[string]interface{}{ "data": []interface{}{b}, "code": 200, diff --git a/datacenter.json b/datacenter.json index 8e206a4..b32b77d 100644 --- a/datacenter.json +++ b/datacenter.json @@ -3,8 +3,5 @@ "NATS_URL": "nats://localhost:4222", "MONGO_DATABASE": "DC_myDC", "KUBERNETES_SERVICE_HOST": "172.16.0.183", - "port": "8092", - "KUBE_CA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlRENDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTXpnNE5UazJNVFl3SGhjTk1qVXdNakEyTVRZek16TTJXaGNOTXpVd01qQTBNVFl6TXpNMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTXpnNE5UazJNVFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFSbi9jVmNUb1orekZUdWZSL29qbG5JMnVpZXJYeTkxcWhxYWpHdWVobXYKV1A4NVQ1dXpkcE1rcFhrNnB5bTlFU0RlRjk1WDFkeTJqdjVFR3paZzZ2WWtvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVXJRK0xUR2NMNXBENnBxSEozaVh5CmZiMFRQUDR3Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQUlObXp3ejhOUVRCNFlURlZJd3BudDhpQjJ5alRlQjYKbkZxRUN6SWw0amUzQWlFQW04dzRma1h0UEhzUG1Yc0hhUXFGSkhkUm9SQ1pSa016akU3REdZY1lMNVE9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "KUBE_CERT": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJYVlyeG5xbm54WEl3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOek00T0RVNU5qRTJNQjRYRFRJMU1ESXdOakUyTXpNek5sb1hEVEkyTURJdwpOakUyTXpNek5sb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJHeDVVb1Ura01obE9xeHgKTjhRV1FOOGF1ekxXRHpjZTBVbnRYWFdHUmFvWHdHdnlYUldkaFlQcVNoU0xJVGttMG5GV2t5cEZlNUdXTXJlVApZd0hReE9talNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCU0ZlbDVtUXNEaW1vMCtEUzZZZWM1QXdDRXFWREFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQWs3U3UrV3RmQks4SmVPazRreVFVdEFtMkxoak8zV25qOW5SdW9HbVpyTGdDSUJwdVNnNU5oMjUrYm1xMgpZQ2xEM3NLTGdQM1ZKUitCYytxS3h3UjVHbmJwCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzTXpnNE5UazJNVFl3SGhjTk1qVXdNakEyTVRZek16TTJXaGNOTXpVd01qQTBNVFl6TXpNMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzTXpnNE5UazJNVFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTDJSZ1U5RHJZazhKUm4xeDlWSVI3eU5hdWVjaFZuK1pRdDVyeDZaalYKeFRSd0RFT0xXZ1MvbkNpYkp6eUVFNmhLUDVzczBPdnp0ZzlxeFZYU1orNzBvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWhYcGVaa0xBNHBxTlBnMHVtSG5PClFNQWhLbFF3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnS09hYVMyczRSWWgrU3J0TXpXTnVtVHduajlKOTZuWUkKL0prdEhjNU5lQnNDSVFDbTY5a1U3cDA5V3hHYWdkNmRQbUlOQ09Fa2V2bzZoQ0dNQTNpd0ZlZ3BiQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "KUBE_DATA": "LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSU0yYUxXTmtPQ2ZGRTJxM2V1VE9kaHd0RXdxTWRaVUZTTlRPOG50OER0K1RvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFYkhsU2hUNlF5R1U2ckhFM3hCWkEzeHE3TXRZUE54N1JTZTFkZFlaRnFoZkFhL0pkRloyRgpnK3BLRklzaE9TYlNjVmFUS2tWN2taWXl0NU5qQWRERTZRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=" + "port": "8092" } \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index f3effaa..e91ff9b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,6 +2,9 @@ version: '3.4' services: oc-datacenter: + env_file: + - path: ./env.env + required: false environment: - MONGO_DATABASE=DC_myDC image: 'oc-datacenter:latest' diff --git a/docker_datacenter.json b/docker_datacenter.json index 84ab28a..1f9013e 100644 --- a/docker_datacenter.json +++ b/docker_datacenter.json @@ -1,9 +1,5 @@ { "MONGO_URL":"mongodb://mongo:27017/", "NATS_URL":"nats://nats:4222", - "MONGO_DATABASE":"DC_myDC", - "KUBERNETES_SERVICE_HOST" : "172.16.0.181", - "KUBE_CA" : "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlRENDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTXpnNE5UazJNVFl3SGhjTk1qVXdNakEyTVRZek16TTJXaGNOTXpVd01qQTBNVFl6TXpNMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTXpnNE5UazJNVFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFSbi9jVmNUb1orekZUdWZSL29qbG5JMnVpZXJYeTkxcWhxYWpHdWVobXYKV1A4NVQ1dXpkcE1rcFhrNnB5bTlFU0RlRjk1WDFkeTJqdjVFR3paZzZ2WWtvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVXJRK0xUR2NMNXBENnBxSEozaVh5CmZiMFRQUDR3Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQUlObXp3ejhOUVRCNFlURlZJd3BudDhpQjJ5alRlQjYKbkZxRUN6SWw0amUzQWlFQW04dzRma1h0UEhzUG1Yc0hhUXFGSkhkUm9SQ1pSa016akU3REdZY1lMNVE9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "KUBE_CERT":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJYVlyeG5xbm54WEl3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOek00T0RVNU5qRTJNQjRYRFRJMU1ESXdOakUyTXpNek5sb1hEVEkyTURJdwpOakUyTXpNek5sb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJHeDVVb1Ura01obE9xeHgKTjhRV1FOOGF1ekxXRHpjZTBVbnRYWFdHUmFvWHdHdnlYUldkaFlQcVNoU0xJVGttMG5GV2t5cEZlNUdXTXJlVApZd0hReE9talNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCU0ZlbDVtUXNEaW1vMCtEUzZZZWM1QXdDRXFWREFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQWs3U3UrV3RmQks4SmVPazRreVFVdEFtMkxoak8zV25qOW5SdW9HbVpyTGdDSUJwdVNnNU5oMjUrYm1xMgpZQ2xEM3NLTGdQM1ZKUitCYytxS3h3UjVHbmJwCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzTXpnNE5UazJNVFl3SGhjTk1qVXdNakEyTVRZek16TTJXaGNOTXpVd01qQTBNVFl6TXpNMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzTXpnNE5UazJNVFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTDJSZ1U5RHJZazhKUm4xeDlWSVI3eU5hdWVjaFZuK1pRdDVyeDZaalYKeFRSd0RFT0xXZ1MvbkNpYkp6eUVFNmhLUDVzczBPdnp0ZzlxeFZYU1orNzBvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWhYcGVaa0xBNHBxTlBnMHVtSG5PClFNQWhLbFF3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnS09hYVMyczRSWWgrU3J0TXpXTnVtVHduajlKOTZuWUkKL0prdEhjNU5lQnNDSVFDbTY5a1U3cDA5V3hHYWdkNmRQbUlOQ09Fa2V2bzZoQ0dNQTNpd0ZlZ3BiQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "KUBE_DATA": "LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSU0yYUxXTmtPQ2ZGRTJxM2V1VE9kaHd0RXdxTWRaVUZTTlRPOG50OER0K1RvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFYkhsU2hUNlF5R1U2ckhFM3hCWkEzeHE3TXRZUE54N1JTZTFkZFlaRnFoZkFhL0pkRloyRgpnK3BLRklzaE9TYlNjVmFUS2tWN2taWXl0NU5qQWRERTZRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=" + "MONGO_DATABASE":"DC_myDC" } \ No newline at end of file diff --git a/env.env b/env.env new file mode 100644 index 0000000..4a00a82 --- /dev/null +++ b/env.env @@ -0,0 +1,4 @@ +KUBERNETES_SERVICE_HOST=192.168.1.169 +KUBE_CA="LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTWpNeE1USXdNell3SGhjTk1qUXdPREE0TVRBeE16VTJXaGNOTXpRd09EQTJNVEF4TXpVMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTWpNeE1USXdNell3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFTVlk3ZHZhNEdYTVdkMy9jMlhLN3JLYjlnWXgyNSthaEE0NmkyNVBkSFAKRktQL2UxSVMyWVF0dzNYZW1TTUQxaStZdzJSaVppNUQrSVZUamNtNHdhcnFvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWtlUVJpNFJiODduME5yRnZaWjZHClc2SU55NnN3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnRXA5ck04WmdNclRZSHYxZjNzOW5DZXZZeWVVa3lZUk4KWjUzazdoaytJS1FDSVFDbk05TnVGKzlTakIzNDFacGZ5ays2NEpWdkpSM3BhcmVaejdMd2lhNm9kdz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" +KUBE_CERT="LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJWUxWNkFPQkdrU1F3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOekl6TVRFeU1ETTJNQjRYRFRJME1EZ3dPREV3TVRNMU5sb1hEVEkxTURndwpPREV3TVRNMU5sb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJGQ2Q1MFdPeWdlQ2syQzcKV2FrOWY4MVAvSkJieVRIajRWOXBsTEo0ck5HeHFtSjJOb2xROFYxdUx5RjBtOTQ2Nkc0RmRDQ2dqaXFVSk92Swp3NVRPNnd5alNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCVFJkOFI5cXVWK2pjeUVmL0ovT1hQSzMyS09XekFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQTArbThqTDBJVldvUTZ0dnB4cFo4NVlMalF1SmpwdXM0aDdnSXRxS3NmUVVDSUI2M2ZNdzFBMm5OVWU1TgpIUGZOcEQwSEtwcVN0Wnk4djIyVzliYlJUNklZCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlRENDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzTWpNeE1USXdNell3SGhjTk1qUXdPREE0TVRBeE16VTJXaGNOTXpRd09EQTJNVEF4TXpVMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzTWpNeE1USXdNell3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRc3hXWk9pbnIrcVp4TmFEQjVGMGsvTDF5cE01VHAxOFRaeU92ektJazQKRTFsZWVqUm9STW0zNmhPeVljbnN3d3JoNnhSUnBpMW5RdGhyMzg0S0Z6MlBvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTBYZkVmYXJsZm8zTWhIL3lmemx6Cnl0OWlqbHN3Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQUxJL2dNYnNMT3MvUUpJa3U2WHVpRVMwTEE2cEJHMXgKcnBlTnpGdlZOekZsQWlFQW1wdjBubjZqN3M0MVI0QzFNMEpSL0djNE53MHdldlFmZWdEVGF1R2p3cFk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" +KUBE_DATA="LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSU5ZS1BFb1dhd1NKUzJlRW5oWmlYMk5VZlY1ZlhKV2krSVNnV09TNFE5VTlvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFVUozblJZN0tCNEtUWUx0WnFUMS96VS84a0Z2Sk1lUGhYMm1Vc25pczBiR3FZblkyaVZEeApYVzR2SVhTYjNqcm9iZ1YwSUtDT0twUWs2OHJEbE03ckRBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=" \ No newline at end of file diff --git a/infrastructure/kubernetes.go b/infrastructure/kubernetes.go index 5fb285e..963ae3d 100644 --- a/infrastructure/kubernetes.go +++ b/infrastructure/kubernetes.go @@ -226,27 +226,25 @@ func (k *KubernetesService) GenerateToken(ctx context.Context, ns string, durati return token.Status.Token, nil } - - // Needs refactoring : -// - Retrieving the metada (in a method that Unmarshall the part of the json in a metadata object) -func (k *KubernetesService) GetTargets(ctx context.Context) ([]string,error){ +// - Retrieving the metada (in a method that Unmarshall the part of the json in a metadata object) +func (k *KubernetesService) GetTargets(ctx context.Context) ([]string, error) { var listTargets []string - resp, err := getCDRapiKube(*k.Set, ctx,"/apis/multicluster.admiralty.io/v1alpha1/targets") + resp, err := getCDRapiKube(*k.Set, ctx, "/apis/multicluster.admiralty.io/v1alpha1/targets") if err != nil { - return nil,err + return nil, err } fmt.Println(string(resp)) var targetDict map[string]interface{} - err = json.Unmarshal(resp,&targetDict) + err = json.Unmarshal(resp, &targetDict) if err != nil { fmt.Println("TODO: handle the error when unmarshalling k8s API response") return nil, err } - b, _ := json.MarshalIndent(targetDict,""," ") + b, _ := json.MarshalIndent(targetDict, "", " ") fmt.Println(string(b)) data := targetDict["items"].([]interface{}) @@ -255,25 +253,25 @@ func (k *KubernetesService) GetTargets(ctx context.Context) ([]string,error){ var metadata metav1.ObjectMeta item := item.(map[string]interface{}) byteMetada, err := json.Marshal(item["metadata"]) - + if err != nil { fmt.Println("Error while Marshalling metadata field") - return nil,err + return nil, err } - err = json.Unmarshal(byteMetada,&metadata) + err = json.Unmarshal(byteMetada, &metadata) if err != nil { fmt.Println("Error while Unmarshalling metadata field to the library object") - return nil,err + return nil, err } listTargets = append(listTargets, metadata.Name) } - return listTargets,nil + return listTargets, nil } -// Admiralty Target allows a cluster to deploy pods to remote cluster +// Admiralty Target allows a cluster to deploy pods to remote cluster // // The remote cluster must : // @@ -281,17 +279,17 @@ func (k *KubernetesService) GetTargets(ctx context.Context) ([]string,error){ // // - have declared the same namespace as the one where the pods are created in the local cluster // -// - have delcared a serviceAccount with sufficient permission to create pods -func (k *KubernetesService) CreateAdmiraltyTarget(context context.Context,executionId string)([]byte,error){ - exists, err := k.GetKubeconfigSecret(context,executionId) +// - have delcared a serviceAccount with sufficient permission to create pods +func (k *KubernetesService) CreateAdmiraltyTarget(context context.Context, executionId string) ([]byte, error) { + exists, err := k.GetKubeconfigSecret(context, executionId) if err != nil { fmt.Println("Error verifying kube-secret before creating target") return nil, err } if exists == nil { - fmt.Println("Target needs to be binded to a secret in namespace ",executionId) - return nil, nil // Maybe we could create a wrapper for errors and add more info to have + fmt.Println("Target needs to be binded to a secret in namespace ", executionId) + return nil, nil // Maybe we could create a wrapper for errors and add more info to have } @@ -318,7 +316,6 @@ func (k *KubernetesService) CreateAdmiraltyTarget(context context.Context,execut } - // Admiralty Source allows a cluster to receive pods from a remote cluster // // The source must be associated to a serviceAccount, which will execute the pods locally. @@ -352,7 +349,7 @@ func (k *KubernetesService) CreateAdmiraltySource(context context.Context,execut // Create a secret from a kubeconfing. Use it to create the secret binded to an Admiralty // target, which must contain the serviceAccount's token value -func (k *KubernetesService) CreateKubeconfigSecret(context context.Context,kubeconfig string, executionId string) ([]byte, error) { +func (k *KubernetesService) CreateKubeconfigSecret(context context.Context, kubeconfig string, executionId string) ([]byte, error) { config, err := base64.StdEncoding.DecodeString(kubeconfig) // config, err := base64.RawStdEncoding.DecodeString(kubeconfig) if err != nil { @@ -394,7 +391,7 @@ func (k *KubernetesService) CreateKubeconfigSecret(context context.Context,kubec }) if err != nil { - fmt.Println("Error while trying to contact API to get secret kube-secret-"+executionId) + fmt.Println("Error while trying to contact API to get secret kube-secret-" + executionId) fmt.Println(err) return nil, err } @@ -406,19 +403,19 @@ func (k *KubernetesService) CreateKubeconfigSecret(context context.Context,kubec return nil, err } return data, nil -} +} -func (k *KubernetesService) GetKubeconfigSecret(context context.Context,executionId string) ([]byte, error) { +func (k *KubernetesService) GetKubeconfigSecret(context context.Context, executionId string) ([]byte, error) { resp, err := k.Set.CoreV1(). - Secrets(executionId). - Get(context,"kube-secret-"+executionId,metav1.GetOptions{}) + Secrets(executionId). + Get(context, "kube-secret-"+executionId, metav1.GetOptions{}) if err != nil { - if(apierrors.IsNotFound(err)){ + if apierrors.IsNotFound(err) { fmt.Println("kube-secret not found for execution", executionId) return nil, nil } - fmt.Println("Error while trying to contact API to get secret kube-secret-"+executionId) + fmt.Println("Error while trying to contact API to get secret kube-secret-" + executionId) fmt.Println(err) return nil, err } @@ -434,19 +431,19 @@ func (k *KubernetesService) GetKubeconfigSecret(context context.Context,executio return data, nil } -func (k *KubernetesService) DeleteKubeConfigSecret(executionID string) ([]byte, error){ +func (k *KubernetesService) DeleteKubeConfigSecret(executionID string) ([]byte, error) { return []byte{}, nil } -func getCDRapiKube(client kubernetes.Clientset, ctx context.Context, path string) ([]byte,error) { +func getCDRapiKube(client kubernetes.Clientset, ctx context.Context, path string) ([]byte, error) { resp, err := client.RESTClient().Get(). - AbsPath(path). - DoRaw(ctx) // from https://stackoverflow.com/questions/60764908/how-to-access-kubernetes-crd-using-client-go + AbsPath(path). + DoRaw(ctx) // from https://stackoverflow.com/questions/60764908/how-to-access-kubernetes-crd-using-client-go if err != nil { - fmt.Println("Error from k8s API when getting " + path + " : " , err) - return nil,err + fmt.Println("Error from k8s API when getting "+path+" : ", err) + return nil, err } return resp, nil @@ -486,21 +483,21 @@ func dynamicClientApply(executionId string, typeResource string, resourceDefinit func putCDRapiKube(client kubernetes.Clientset, ctx context.Context, path string, body []byte, params ...map[string]string) ([]byte, error){ req := client.RESTClient(). - Post(). - AbsPath(path). - Body(body) + Post(). + AbsPath(path). + Body(body) for _, param := range params { - for k,v := range param { - req = req.Param(k,v) + for k, v := range param { + req = req.Param(k, v) } } - + resp, err := req.DoRaw(ctx) if err != nil { - fmt.Println("Error from k8s API when posting " + string(body) + " to " + path + " : " , err) - return nil,err + fmt.Println("Error from k8s API when posting "+string(body)+" to "+path+" : ", err) + return nil, err } return resp, nil @@ -509,13 +506,13 @@ func putCDRapiKube(client kubernetes.Clientset, ctx context.Context, path string // Returns the Kubernetes' Node object corresponding to the executionID if it exists on this host // // The node is created when an admiralty Target (on host) can connect to an admiralty Source (on remote) -func (k *KubernetesService) GetOneNode(context context.Context,executionID string) (*v1.Node, error) { +func (k *KubernetesService) GetOneNode(context context.Context, executionID string) (*v1.Node, error) { res, err := k.Set.CoreV1(). - Nodes(). - List( - context, - metav1.ListOptions{}, - ) + Nodes(). + List( + context, + metav1.ListOptions{}, + ) if err != nil { fmt.Println("Error getting the list of nodes from k8s API") fmt.Println(err) @@ -523,10 +520,10 @@ func (k *KubernetesService) GetOneNode(context context.Context,executionID strin } for _, node := range res.Items { - if isNode := strings.Contains(node.Name,"admiralty-"+executionID+"-target-"+executionID+"-"); isNode { + if isNode := strings.Contains(node.Name, "admiralty-"+executionID+"-target-"+executionID+"-"); isNode { return &node, nil } } return nil, nil -} \ No newline at end of file +} diff --git a/main.go b/main.go index 5971b56..b360134 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "encoding/base64" "oc-datacenter/conf" _ "oc-datacenter/routers" + "os" oclib "cloud.o-forge.io/core/oc-lib" "cloud.o-forge.io/core/oc-lib/tools" @@ -20,7 +21,7 @@ func main() { // Load the right config file o := oclib.GetConfLoader() conf.GetConfig().Mode = o.GetStringDefault("MODE", "kubernetes") - conf.GetConfig().KubeHost = o.GetStringDefault("KUBERNETES_SERVICE_HOST", "") + conf.GetConfig().KubeHost = o.GetStringDefault("KUBERNETES_SERVICE_HOST", os.Getenv("KUBERNETES_SERVICE_HOST")) conf.GetConfig().KubePort = o.GetStringDefault("KUBERNETES_SERVICE_PORT", "6443") sDec, err := base64.StdEncoding.DecodeString(o.GetStringDefault("KUBE_CA", ""))