Missing namespace in deploy step when using kustomize deployment target

Open
#239 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
github-actions, go
Domain
cli, devops

Research direction

Start by locating the kustomize deployment target generation and the workflow template that creates the GitHub Action deploy step. Inspect the generated kustomization.yaml and deployment manifest, then verify that the configured namespace is applied consistently and passed to the deploy action; reproduce the workflow to confirm deployment succeeds for a non-default namespace.

Written by the indexing model from the issue text.

Description

bug

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.
Dominant language
Go
Stars
644
Forks
74
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Azure/draft

All issues in Azure/draft

Similar issues

More Go issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.