reconcilerio / dies

immutable, fluent, builders for Kubernetes resources
Apache License 2.0
8 stars 4 forks source link

AddLimit/Request panics with assignment in nil map #66

Closed mamachanko closed 2 years ago

mamachanko commented 2 years ago
go 1.19

require dies.dev v0.6.1
package main

import (
    dieappsv1 "dies.dev/apis/apps/v1"
    diev1 "dies.dev/apis/core/v1"
    "k8s.io/apimachinery/pkg/api/resource"
)

func main() {
    var _ = dieappsv1.DeploymentBlank.
        SpecDie(func(d *dieappsv1.DeploymentSpecDie) {
            d.TemplateDie(func(d *diev1.PodTemplateSpecDie) {
                d.SpecDie(func(d *diev1.PodSpecDie) {
                    d.ContainerDie("redis", func(d *diev1.ContainerDie) {
                        d.ResourcesDie(func(d *diev1.ResourceRequirementsDie) {
                            d.AddLimit("mem", resource.MustParse("123m"))
                        })
                    })
                })
            })
        })
}
❯ go run .
panic: assignment to entry in nil map

goroutine 1 [running]:
dies.dev/apis/core/v1.(*ResourceRequirementsDie).AddLimit.func1(0x0?)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/core/v1/container.go:267 +0x30
dies.dev/apis/core/v1.(*ResourceRequirementsDie).DieStamp(0xc000012af8, 0xc0001f1168)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/core/v1/zz_generated.die.go:2478 +0x7d
dies.dev/apis/core/v1.(*ResourceRequirementsDie).AddLimit(0x18?, {0x177e2ef?, 0x1?}, {{0x7b, 0xfffffffd}, {0x0}, {0x177e3f7, 0x4}, {0x1780108, 0x9}})
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/core/v1/container.go:266 +0x8a
main.main.func1.1.1.1.1(0xc000012960?)
        /tmp/dies/main.go:16 +0xa5
dies.dev/apis/core/v1.(*ContainerDie).ResourcesDie.func1(0xc0000efb80)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/core/v1/container.go:73 +0xfd
dies.dev/apis/core/v1.(*ContainerDie).DieStamp(0xc0000efa20, 0xc0001f16c0)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/core/v1/zz_generated.die.go:1190 +0x104
dies.dev/apis/core/v1.(*ContainerDie).ResourcesDie(0x0?, 0x0?)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/core/v1/container.go:71 +0x35
main.main.func1.1.1.1(0xc0000ef340?)
        /tmp/dies/main.go:15 +0x25
dies.dev/apis/core/v1.(*PodSpecDie).ContainerDie.func1(0xc0001fe600)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/core/v1/pod.go:77 +0x502
dies.dev/apis/core/v1.(*PodSpecDie).DieStamp(0xc0001fe400, 0xc0001f2298)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/core/v1/zz_generated.die.go:11101 +0xe4
dies.dev/apis/core/v1.(*PodSpecDie).ContainerDie(0x0?, {0x177ea00?, 0x0?}, 0x0?)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/core/v1/pod.go:66 +0x56
main.main.func1.1.1(0xc0001fe200?)
        /tmp/dies/main.go:14 +0x2c
dies.dev/apis/core/v1.(*PodTemplateSpecDie).SpecDie.func1(0xc000204f00?)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/core/v1/podtemplate.go:49 +0x197
dies.dev/apis/core/v1.(*PodTemplateSpecDie).DieStamp(0xc000204c00, 0xc0001f31c0)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/core/v1/zz_generated.die.go:12787 +0x104
dies.dev/apis/core/v1.(*PodTemplateSpecDie).SpecDie(0x0?, 0x0?)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/core/v1/podtemplate.go:47 +0x35
main.main.func1.1(0xc000204300?)
        /tmp/dies/main.go:13 +0x25
dies.dev/apis/apps/v1.(*DeploymentSpecDie).TemplateDie.func1(0xc000208e00)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/apps/v1/deployment.go:43 +0x1bf
dies.dev/apis/apps/v1.(*DeploymentSpecDie).DieStamp(0xc000208a80, 0xc0001f4458)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/apps/v1/zz_generated.die.go:1127 +0xe4
dies.dev/apis/apps/v1.(*DeploymentSpecDie).TemplateDie(0x0?, 0x0?)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/apps/v1/deployment.go:41 +0x35
main.main.func1(0xc000208000?)
        /tmp/dies/main.go:12 +0x25
dies.dev/apis/apps/v1.(*DeploymentDie).SpecDie.func1(0xc0001c7200?)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/apps/v1/zz_generated.die.go:1028 +0x197
dies.dev/apis/apps/v1.(*DeploymentDie).DieStamp(0xc000182100, 0xc0001f5f40)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/apps/v1/zz_generated.die.go:959 +0xe8
dies.dev/apis/apps/v1.(*DeploymentDie).SpecDie(0x168e2a0?, 0xc0000061a0?)
        /Users/mbrauer/go/pkg/mod/dies.dev@v0.6.1/apis/apps/v1/zz_generated.die.go:1026 +0x35
main.main()
        /tmp/dies/main.go:11 +0x27
exit status 2
mamachanko commented 2 years ago

This works:

package main

import (
    dieappsv1 "dies.dev/apis/apps/v1"
    diev1 "dies.dev/apis/core/v1"
    "k8s.io/apimachinery/pkg/api/resource"
)

func main() {
    var _ = dieappsv1.DeploymentBlank.
        SpecDie(func(d *dieappsv1.DeploymentSpecDie) {
            d.TemplateDie(func(d *diev1.PodTemplateSpecDie) {
                d.SpecDie(func(d *diev1.PodSpecDie) {
                    d.ContainerDie("redis", func(d *diev1.ContainerDie) {
                        d.Resources(corev1.ResourceRequirements{
                            Limits:   map[corev1.ResourceName]resource.Quantity{},
                        })
                        d.ResourcesDie(func(d *diev1.ResourceRequirementsDie) {
                            d.AddLimit("mem", resource.MustParse("123m"))
                        })
                    })
                })
            })
        })
}