Azure / draft

A day 0 tool for getting your app on k8s fast
MIT License
514 stars 61 forks source link

Missing namespace in deploy step when using kustomize deployment target #239

Open bcho opened 10 months ago

bcho commented 10 months ago

Describe the bug

When creating a project using deployment type kustomize, the cli wizard will ask for target namespace:

✔ Please enter  the namespace to place new resources in (default: default): 

When using a non-default namespace, for example foo, the wizard will create the k8s deployment configuration like this:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: draft-demo
  labels:
    app: draft-demo
  namespace: foo

However, the later workflow setup wizard will not prompt for target namespace, and generate a deployment step like this:

# Deploys application based on manifest files from previous step
      - name: Deploy application
        uses: Azure/k8s-deploy@v4
        with:
          action: deploy
          manifests: ${{ steps.bake.outputs.manifestsBundle }}
          images: |
            ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_NAME }}:${{ github.sha }}

This deployment step will deploy to default namespace by default:

Run Azure/k8s-deploy@v4
  with:
    action: deploy
    manifests: <omitted>
    images: <omitted>

    namespace: default # <---- default value for namespace
    pull-images: true
    strategy: basic
    route-method: service
    version-switch-buffer: 0
    traffic-split-method: pod
    percentage: 0
    force: false
    token: ***
    annotate-namespace: true
    private-cluster: false
    skip-tls-verify: false

Hence, the deployment will fail with error like:

the namespace from the provided object "foo" does not match the namespace "default". You must pass '--namespace=foo' to perform this operation.

Mention the platform you are using

OSS draft

To Reproduce Steps to reproduce the behavior:

See above description.

Expected behavior

When using kustomize deployment target:

  1. the namespace should be set in kustomization.yaml instead of k8s object spec. By using a kustomization level namespace settings, we can ensure all controlled k8s objects are created under the same namespace.
  2. namespace settings should set in the deploy GitHub Action step.
davidgamero commented 9 months ago

thanks for this issue! yes i see the namespace is set in the object specs, which is unnecessary for kustomize, and overrides the supplied namespace later