github.com/tilt-dev/tilt@v0.36.0/internal/tiltfile/v1alpha1/types.go (about)

     1  package v1alpha1
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	"go.starlark.net/starlark"
     8  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     9  
    10  	"github.com/tilt-dev/tilt/internal/tiltfile/starkit"
    11  	"github.com/tilt-dev/tilt/internal/tiltfile/value"
    12  	"github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1"
    13  )
    14  
    15  // AUTOGENERATED by github.com/tilt-dev/tilt-starlark-codegen
    16  // DO NOT EDIT MANUALLY
    17  
    18  func (p Plugin) registerSymbols(env *starkit.Environment) error {
    19  	var err error
    20  
    21  	err = env.AddBuiltin("v1alpha1.cmd", p.cmd)
    22  	if err != nil {
    23  		return err
    24  	}
    25  	err = env.AddBuiltin("v1alpha1.config_map", p.configMap)
    26  	if err != nil {
    27  		return err
    28  	}
    29  	err = env.AddBuiltin("v1alpha1.extension", p.extension)
    30  	if err != nil {
    31  		return err
    32  	}
    33  	err = env.AddBuiltin("v1alpha1.extension_repo", p.extensionRepo)
    34  	if err != nil {
    35  		return err
    36  	}
    37  	err = env.AddBuiltin("v1alpha1.file_watch", p.fileWatch)
    38  	if err != nil {
    39  		return err
    40  	}
    41  	err = env.AddBuiltin("v1alpha1.kubernetes_apply", p.kubernetesApply)
    42  	if err != nil {
    43  		return err
    44  	}
    45  	err = env.AddBuiltin("v1alpha1.kubernetes_discovery", p.kubernetesDiscovery)
    46  	if err != nil {
    47  		return err
    48  	}
    49  	err = env.AddBuiltin("v1alpha1.ui_button", p.uiButton)
    50  	if err != nil {
    51  		return err
    52  	}
    53  	err = env.AddBuiltin("v1alpha1.config_map_disable_source", p.configMapDisableSource)
    54  	if err != nil {
    55  		return err
    56  	}
    57  	err = env.AddBuiltin("v1alpha1.disable_source", p.disableSource)
    58  	if err != nil {
    59  		return err
    60  	}
    61  	err = env.AddBuiltin("v1alpha1.exec_action", p.execAction)
    62  	if err != nil {
    63  		return err
    64  	}
    65  	err = env.AddBuiltin("v1alpha1.forward", p.forward)
    66  	if err != nil {
    67  		return err
    68  	}
    69  	err = env.AddBuiltin("v1alpha1.http_get_action", p.hTTPGetAction)
    70  	if err != nil {
    71  		return err
    72  	}
    73  	err = env.AddBuiltin("v1alpha1.http_header", p.hTTPHeader)
    74  	if err != nil {
    75  		return err
    76  	}
    77  	err = env.AddBuiltin("v1alpha1.handler", p.handler)
    78  	if err != nil {
    79  		return err
    80  	}
    81  	err = env.AddBuiltin("v1alpha1.ignore_def", p.ignoreDef)
    82  	if err != nil {
    83  		return err
    84  	}
    85  	err = env.AddBuiltin("v1alpha1.kubernetes_apply_cmd", p.kubernetesApplyCmd)
    86  	if err != nil {
    87  		return err
    88  	}
    89  	err = env.AddBuiltin("v1alpha1.kubernetes_discovery_template_spec", p.kubernetesDiscoveryTemplateSpec)
    90  	if err != nil {
    91  		return err
    92  	}
    93  	err = env.AddBuiltin("v1alpha1.kubernetes_image_locator", p.kubernetesImageLocator)
    94  	if err != nil {
    95  		return err
    96  	}
    97  	err = env.AddBuiltin("v1alpha1.kubernetes_image_object_descriptor", p.kubernetesImageObjectDescriptor)
    98  	if err != nil {
    99  		return err
   100  	}
   101  	err = env.AddBuiltin("v1alpha1.kubernetes_watch_ref", p.kubernetesWatchRef)
   102  	if err != nil {
   103  		return err
   104  	}
   105  	err = env.AddBuiltin("v1alpha1.label_selector", p.labelSelector)
   106  	if err != nil {
   107  		return err
   108  	}
   109  	err = env.AddBuiltin("v1alpha1.label_selector_requirement", p.labelSelectorRequirement)
   110  	if err != nil {
   111  		return err
   112  	}
   113  	err = env.AddBuiltin("v1alpha1.object_selector", p.objectSelector)
   114  	if err != nil {
   115  		return err
   116  	}
   117  	err = env.AddBuiltin("v1alpha1.pod_log_stream_template_spec", p.podLogStreamTemplateSpec)
   118  	if err != nil {
   119  		return err
   120  	}
   121  	err = env.AddBuiltin("v1alpha1.port_forward_template_spec", p.portForwardTemplateSpec)
   122  	if err != nil {
   123  		return err
   124  	}
   125  	err = env.AddBuiltin("v1alpha1.probe", p.probe)
   126  	if err != nil {
   127  		return err
   128  	}
   129  	err = env.AddBuiltin("v1alpha1.restart_on_spec", p.restartOnSpec)
   130  	if err != nil {
   131  		return err
   132  	}
   133  	err = env.AddBuiltin("v1alpha1.start_on_spec", p.startOnSpec)
   134  	if err != nil {
   135  		return err
   136  	}
   137  	err = env.AddBuiltin("v1alpha1.tcp_socket_action", p.tCPSocketAction)
   138  	if err != nil {
   139  		return err
   140  	}
   141  	err = env.AddBuiltin("v1alpha1.ui_bool_input_spec", p.uIBoolInputSpec)
   142  	if err != nil {
   143  		return err
   144  	}
   145  	err = env.AddBuiltin("v1alpha1.ui_choice_input_spec", p.uIChoiceInputSpec)
   146  	if err != nil {
   147  		return err
   148  	}
   149  	err = env.AddBuiltin("v1alpha1.ui_component_location", p.uIComponentLocation)
   150  	if err != nil {
   151  		return err
   152  	}
   153  	err = env.AddBuiltin("v1alpha1.ui_hidden_input_spec", p.uIHiddenInputSpec)
   154  	if err != nil {
   155  		return err
   156  	}
   157  	err = env.AddBuiltin("v1alpha1.ui_input_spec", p.uIInputSpec)
   158  	if err != nil {
   159  		return err
   160  	}
   161  	err = env.AddBuiltin("v1alpha1.ui_text_input_spec", p.uITextInputSpec)
   162  	if err != nil {
   163  		return err
   164  	}
   165  	return nil
   166  }
   167  func (p Plugin) cmd(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
   168  	var err error
   169  	obj := &v1alpha1.Cmd{
   170  		ObjectMeta: metav1.ObjectMeta{},
   171  		Spec:       v1alpha1.CmdSpec{},
   172  	}
   173  	var specArgs value.StringList
   174  	var dir value.LocalPath = value.NewLocalPathUnpacker(t)
   175  	err = dir.Unpack(starlark.String(""))
   176  	if err != nil {
   177  		return nil, err
   178  	}
   179  
   180  	var env value.StringList
   181  	var readinessProbe Probe = Probe{t: t}
   182  	var restartOn RestartOnSpec = RestartOnSpec{t: t}
   183  	var startOn StartOnSpec = StartOnSpec{t: t}
   184  	var disableSource DisableSource = DisableSource{t: t}
   185  	var labels value.StringStringMap
   186  	var annotations value.StringStringMap
   187  	err = starkit.UnpackArgs(t, fn.Name(), args, kwargs,
   188  		"name", &obj.ObjectMeta.Name,
   189  		"labels?", &labels,
   190  		"annotations?", &annotations,
   191  		"args?", &specArgs,
   192  		"dir?", &dir,
   193  		"env?", &env,
   194  		"readiness_probe?", &readinessProbe,
   195  		"restart_on?", &restartOn,
   196  		"start_on?", &startOn,
   197  		"disable_source?", &disableSource,
   198  	)
   199  	if err != nil {
   200  		return nil, err
   201  	}
   202  
   203  	obj.Spec.Args = specArgs
   204  	obj.Spec.Dir = dir.Value
   205  	obj.Spec.Env = env
   206  	if readinessProbe.isUnpacked {
   207  		obj.Spec.ReadinessProbe = (*v1alpha1.Probe)(&readinessProbe.Value)
   208  	}
   209  	if restartOn.isUnpacked {
   210  		obj.Spec.RestartOn = (*v1alpha1.RestartOnSpec)(&restartOn.Value)
   211  	}
   212  	if startOn.isUnpacked {
   213  		obj.Spec.StartOn = (*v1alpha1.StartOnSpec)(&startOn.Value)
   214  	}
   215  	if disableSource.isUnpacked {
   216  		obj.Spec.DisableSource = (*v1alpha1.DisableSource)(&disableSource.Value)
   217  	}
   218  	obj.ObjectMeta.Labels = labels
   219  	obj.ObjectMeta.Annotations = annotations
   220  	return p.register(t, obj)
   221  }
   222  
   223  func (p Plugin) configMap(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
   224  	var err error
   225  	obj := &v1alpha1.ConfigMap{
   226  		ObjectMeta: metav1.ObjectMeta{},
   227  	}
   228  	var data value.StringStringMap
   229  	var labels value.StringStringMap
   230  	var annotations value.StringStringMap
   231  	err = starkit.UnpackArgs(t, fn.Name(), args, kwargs,
   232  		"name", &obj.ObjectMeta.Name,
   233  		"labels?", &labels,
   234  		"annotations?", &annotations,
   235  		"data?", &data,
   236  	)
   237  	if err != nil {
   238  		return nil, err
   239  	}
   240  
   241  	obj.Data = data
   242  	obj.ObjectMeta.Labels = labels
   243  	obj.ObjectMeta.Annotations = annotations
   244  	return p.register(t, obj)
   245  }
   246  
   247  func (p Plugin) extension(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
   248  	var err error
   249  	obj := &v1alpha1.Extension{
   250  		ObjectMeta: metav1.ObjectMeta{},
   251  		Spec:       v1alpha1.ExtensionSpec{},
   252  	}
   253  	var specArgs value.StringList
   254  	var labels value.StringStringMap
   255  	var annotations value.StringStringMap
   256  	err = starkit.UnpackArgs(t, fn.Name(), args, kwargs,
   257  		"name", &obj.ObjectMeta.Name,
   258  		"labels?", &labels,
   259  		"annotations?", &annotations,
   260  		"repo_name?", &obj.Spec.RepoName,
   261  		"repo_path?", &obj.Spec.RepoPath,
   262  		"args?", &specArgs,
   263  	)
   264  	if err != nil {
   265  		return nil, err
   266  	}
   267  
   268  	obj.Spec.Args = specArgs
   269  	obj.ObjectMeta.Labels = labels
   270  	obj.ObjectMeta.Annotations = annotations
   271  	return p.register(t, obj)
   272  }
   273  
   274  func (p Plugin) extensionRepo(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
   275  	var err error
   276  	obj := &v1alpha1.ExtensionRepo{
   277  		ObjectMeta: metav1.ObjectMeta{},
   278  		Spec:       v1alpha1.ExtensionRepoSpec{},
   279  	}
   280  	var labels value.StringStringMap
   281  	var annotations value.StringStringMap
   282  	err = starkit.UnpackArgs(t, fn.Name(), args, kwargs,
   283  		"name", &obj.ObjectMeta.Name,
   284  		"labels?", &labels,
   285  		"annotations?", &annotations,
   286  		"url?", &obj.Spec.URL,
   287  		"ref?", &obj.Spec.Ref,
   288  		"load_host?", &obj.Spec.LoadHost,
   289  		"git_subpath?", &obj.Spec.GitSubpath,
   290  	)
   291  	if err != nil {
   292  		return nil, err
   293  	}
   294  
   295  	obj.ObjectMeta.Labels = labels
   296  	obj.ObjectMeta.Annotations = annotations
   297  	return p.register(t, obj)
   298  }
   299  
   300  func (p Plugin) fileWatch(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
   301  	var err error
   302  	obj := &v1alpha1.FileWatch{
   303  		ObjectMeta: metav1.ObjectMeta{},
   304  		Spec:       v1alpha1.FileWatchSpec{},
   305  	}
   306  	var watchedPaths value.LocalPathList = value.NewLocalPathListUnpacker(t)
   307  	var ignores IgnoreDefList = IgnoreDefList{t: t}
   308  	var disableSource DisableSource = DisableSource{t: t}
   309  	var labels value.StringStringMap
   310  	var annotations value.StringStringMap
   311  	err = starkit.UnpackArgs(t, fn.Name(), args, kwargs,
   312  		"name", &obj.ObjectMeta.Name,
   313  		"labels?", &labels,
   314  		"annotations?", &annotations,
   315  		"watched_paths?", &watchedPaths,
   316  		"ignores?", &ignores,
   317  		"disable_source?", &disableSource,
   318  	)
   319  	if err != nil {
   320  		return nil, err
   321  	}
   322  
   323  	obj.Spec.WatchedPaths = watchedPaths.Value
   324  	obj.Spec.Ignores = ignores.Value
   325  	if disableSource.isUnpacked {
   326  		obj.Spec.DisableSource = (*v1alpha1.DisableSource)(&disableSource.Value)
   327  	}
   328  	obj.ObjectMeta.Labels = labels
   329  	obj.ObjectMeta.Annotations = annotations
   330  	return p.register(t, obj)
   331  }
   332  
   333  func (p Plugin) kubernetesApply(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
   334  	var err error
   335  	obj := &v1alpha1.KubernetesApply{
   336  		ObjectMeta: metav1.ObjectMeta{},
   337  		Spec:       v1alpha1.KubernetesApplySpec{},
   338  	}
   339  	var imageMaps value.StringList
   340  	var imageLocators KubernetesImageLocatorList = KubernetesImageLocatorList{t: t}
   341  	var timeout value.Duration
   342  	var kubernetesDiscoveryTemplateSpec KubernetesDiscoveryTemplateSpec = KubernetesDiscoveryTemplateSpec{t: t}
   343  	var portForwardTemplateSpec PortForwardTemplateSpec = PortForwardTemplateSpec{t: t}
   344  	var podLogStreamTemplateSpec PodLogStreamTemplateSpec = PodLogStreamTemplateSpec{t: t}
   345  	var discoveryStrategy string
   346  	var disableSource DisableSource = DisableSource{t: t}
   347  	var applyCmd KubernetesApplyCmd = KubernetesApplyCmd{t: t}
   348  	var restartOn RestartOnSpec = RestartOnSpec{t: t}
   349  	var deleteCmd KubernetesApplyCmd = KubernetesApplyCmd{t: t}
   350  	var labels value.StringStringMap
   351  	var annotations value.StringStringMap
   352  	err = starkit.UnpackArgs(t, fn.Name(), args, kwargs,
   353  		"name", &obj.ObjectMeta.Name,
   354  		"labels?", &labels,
   355  		"annotations?", &annotations,
   356  		"yaml?", &obj.Spec.YAML,
   357  		"image_maps?", &imageMaps,
   358  		"image_locators?", &imageLocators,
   359  		"timeout?", &timeout,
   360  		"kubernetes_discovery_template_spec?", &kubernetesDiscoveryTemplateSpec,
   361  		"port_forward_template_spec?", &portForwardTemplateSpec,
   362  		"pod_log_stream_template_spec?", &podLogStreamTemplateSpec,
   363  		"discovery_strategy?", &discoveryStrategy,
   364  		"disable_source?", &disableSource,
   365  		"apply_cmd?", &applyCmd,
   366  		"restart_on?", &restartOn,
   367  		"delete_cmd?", &deleteCmd,
   368  		"cluster?", &obj.Spec.Cluster,
   369  	)
   370  	if err != nil {
   371  		return nil, err
   372  	}
   373  
   374  	obj.Spec.ImageMaps = imageMaps
   375  	obj.Spec.ImageLocators = imageLocators.Value
   376  	obj.Spec.Timeout = metav1.Duration{Duration: time.Duration(timeout)}
   377  	if kubernetesDiscoveryTemplateSpec.isUnpacked {
   378  		obj.Spec.KubernetesDiscoveryTemplateSpec = (*v1alpha1.KubernetesDiscoveryTemplateSpec)(&kubernetesDiscoveryTemplateSpec.Value)
   379  	}
   380  	if portForwardTemplateSpec.isUnpacked {
   381  		obj.Spec.PortForwardTemplateSpec = (*v1alpha1.PortForwardTemplateSpec)(&portForwardTemplateSpec.Value)
   382  	}
   383  	if podLogStreamTemplateSpec.isUnpacked {
   384  		obj.Spec.PodLogStreamTemplateSpec = (*v1alpha1.PodLogStreamTemplateSpec)(&podLogStreamTemplateSpec.Value)
   385  	}
   386  	obj.Spec.DiscoveryStrategy = v1alpha1.KubernetesDiscoveryStrategy(discoveryStrategy)
   387  	if disableSource.isUnpacked {
   388  		obj.Spec.DisableSource = (*v1alpha1.DisableSource)(&disableSource.Value)
   389  	}
   390  	if applyCmd.isUnpacked {
   391  		obj.Spec.ApplyCmd = (*v1alpha1.KubernetesApplyCmd)(&applyCmd.Value)
   392  	}
   393  	if restartOn.isUnpacked {
   394  		obj.Spec.RestartOn = (*v1alpha1.RestartOnSpec)(&restartOn.Value)
   395  	}
   396  	if deleteCmd.isUnpacked {
   397  		obj.Spec.DeleteCmd = (*v1alpha1.KubernetesApplyCmd)(&deleteCmd.Value)
   398  	}
   399  	obj.ObjectMeta.Labels = labels
   400  	obj.ObjectMeta.Annotations = annotations
   401  	return p.register(t, obj)
   402  }
   403  
   404  func (p Plugin) kubernetesDiscovery(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
   405  	var err error
   406  	obj := &v1alpha1.KubernetesDiscovery{
   407  		ObjectMeta: metav1.ObjectMeta{},
   408  		Spec:       v1alpha1.KubernetesDiscoverySpec{},
   409  	}
   410  	var watches KubernetesWatchRefList = KubernetesWatchRefList{t: t}
   411  	var extraSelectors LabelSelectorList = LabelSelectorList{t: t}
   412  	var portForwardTemplateSpec PortForwardTemplateSpec = PortForwardTemplateSpec{t: t}
   413  	var podLogStreamTemplateSpec PodLogStreamTemplateSpec = PodLogStreamTemplateSpec{t: t}
   414  	var labels value.StringStringMap
   415  	var annotations value.StringStringMap
   416  	err = starkit.UnpackArgs(t, fn.Name(), args, kwargs,
   417  		"name", &obj.ObjectMeta.Name,
   418  		"labels?", &labels,
   419  		"annotations?", &annotations,
   420  		"watches?", &watches,
   421  		"extra_selectors?", &extraSelectors,
   422  		"port_forward_template_spec?", &portForwardTemplateSpec,
   423  		"pod_log_stream_template_spec?", &podLogStreamTemplateSpec,
   424  		"cluster?", &obj.Spec.Cluster,
   425  	)
   426  	if err != nil {
   427  		return nil, err
   428  	}
   429  
   430  	obj.Spec.Watches = watches.Value
   431  	obj.Spec.ExtraSelectors = extraSelectors.Value
   432  	if portForwardTemplateSpec.isUnpacked {
   433  		obj.Spec.PortForwardTemplateSpec = (*v1alpha1.PortForwardTemplateSpec)(&portForwardTemplateSpec.Value)
   434  	}
   435  	if podLogStreamTemplateSpec.isUnpacked {
   436  		obj.Spec.PodLogStreamTemplateSpec = (*v1alpha1.PodLogStreamTemplateSpec)(&podLogStreamTemplateSpec.Value)
   437  	}
   438  	obj.ObjectMeta.Labels = labels
   439  	obj.ObjectMeta.Annotations = annotations
   440  	return p.register(t, obj)
   441  }
   442  
   443  func (p Plugin) uiButton(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
   444  	var err error
   445  	obj := &v1alpha1.UIButton{
   446  		ObjectMeta: metav1.ObjectMeta{},
   447  		Spec:       v1alpha1.UIButtonSpec{},
   448  	}
   449  	var location UIComponentLocation = UIComponentLocation{t: t}
   450  	var inputs UIInputSpecList = UIInputSpecList{t: t}
   451  	var labels value.StringStringMap
   452  	var annotations value.StringStringMap
   453  	err = starkit.UnpackArgs(t, fn.Name(), args, kwargs,
   454  		"name", &obj.ObjectMeta.Name,
   455  		"labels?", &labels,
   456  		"annotations?", &annotations,
   457  		"location?", &location,
   458  		"text?", &obj.Spec.Text,
   459  		"icon_name?", &obj.Spec.IconName,
   460  		"icon_svg?", &obj.Spec.IconSVG,
   461  		"disabled?", &obj.Spec.Disabled,
   462  		"requires_confirmation?", &obj.Spec.RequiresConfirmation,
   463  		"inputs?", &inputs,
   464  	)
   465  	if err != nil {
   466  		return nil, err
   467  	}
   468  
   469  	obj.Spec.Location = v1alpha1.UIComponentLocation(location.Value)
   470  	obj.Spec.Inputs = inputs.Value
   471  	obj.ObjectMeta.Labels = labels
   472  	obj.ObjectMeta.Annotations = annotations
   473  	return p.register(t, obj)
   474  }
   475  
   476  type ConfigMapDisableSource struct {
   477  	*starlark.Dict
   478  	Value      v1alpha1.ConfigMapDisableSource
   479  	isUnpacked bool
   480  	t          *starlark.Thread // instantiation thread for computing abspath
   481  }
   482  
   483  func (p Plugin) configMapDisableSource(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
   484  	var name starlark.Value
   485  	var key starlark.Value
   486  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
   487  		"name?", &name,
   488  		"key?", &key,
   489  	)
   490  	if err != nil {
   491  		return nil, err
   492  	}
   493  
   494  	dict := starlark.NewDict(2)
   495  
   496  	if name != nil {
   497  		err := dict.SetKey(starlark.String("name"), name)
   498  		if err != nil {
   499  			return nil, err
   500  		}
   501  	}
   502  	if key != nil {
   503  		err := dict.SetKey(starlark.String("key"), key)
   504  		if err != nil {
   505  			return nil, err
   506  		}
   507  	}
   508  	var obj *ConfigMapDisableSource = &ConfigMapDisableSource{t: t}
   509  	err = obj.Unpack(dict)
   510  	if err != nil {
   511  		return nil, err
   512  	}
   513  	return obj, nil
   514  }
   515  
   516  func (o *ConfigMapDisableSource) Unpack(v starlark.Value) error {
   517  	obj := v1alpha1.ConfigMapDisableSource{}
   518  
   519  	starlarkObj, ok := v.(*ConfigMapDisableSource)
   520  	if ok {
   521  		*o = *starlarkObj
   522  		return nil
   523  	}
   524  
   525  	mapObj, ok := v.(*starlark.Dict)
   526  	if !ok {
   527  		return fmt.Errorf("expected dict, actual: %v", v.Type())
   528  	}
   529  
   530  	for _, item := range mapObj.Items() {
   531  		keyV, val := item[0], item[1]
   532  		key, ok := starlark.AsString(keyV)
   533  		if !ok {
   534  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
   535  		}
   536  
   537  		if key == "name" {
   538  			v, ok := starlark.AsString(val)
   539  			if !ok {
   540  				return fmt.Errorf("Expected string, actual: %s", val.Type())
   541  			}
   542  			obj.Name = string(v)
   543  			continue
   544  		}
   545  		if key == "key" {
   546  			v, ok := starlark.AsString(val)
   547  			if !ok {
   548  				return fmt.Errorf("Expected string, actual: %s", val.Type())
   549  			}
   550  			obj.Key = string(v)
   551  			continue
   552  		}
   553  		return fmt.Errorf("Unexpected attribute name: %s", key)
   554  	}
   555  
   556  	mapObj.Freeze()
   557  	o.Dict = mapObj
   558  	o.Value = obj
   559  	o.isUnpacked = true
   560  
   561  	return nil
   562  }
   563  
   564  type ConfigMapDisableSourceList struct {
   565  	*starlark.List
   566  	Value []v1alpha1.ConfigMapDisableSource
   567  	t     *starlark.Thread
   568  }
   569  
   570  func (o *ConfigMapDisableSourceList) Unpack(v starlark.Value) error {
   571  	items := []v1alpha1.ConfigMapDisableSource{}
   572  
   573  	listObj, ok := v.(*starlark.List)
   574  	if !ok {
   575  		return fmt.Errorf("expected list, actual: %v", v.Type())
   576  	}
   577  
   578  	for i := 0; i < listObj.Len(); i++ {
   579  		v := listObj.Index(i)
   580  
   581  		item := ConfigMapDisableSource{t: o.t}
   582  		err := item.Unpack(v)
   583  		if err != nil {
   584  			return fmt.Errorf("at index %d: %v", i, err)
   585  		}
   586  		items = append(items, v1alpha1.ConfigMapDisableSource(item.Value))
   587  	}
   588  
   589  	listObj.Freeze()
   590  	o.List = listObj
   591  	o.Value = items
   592  
   593  	return nil
   594  }
   595  
   596  type DisableSource struct {
   597  	*starlark.Dict
   598  	Value      v1alpha1.DisableSource
   599  	isUnpacked bool
   600  	t          *starlark.Thread // instantiation thread for computing abspath
   601  }
   602  
   603  func (p Plugin) disableSource(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
   604  	var configMap starlark.Value
   605  	var everyConfigMap starlark.Value
   606  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
   607  		"config_map?", &configMap,
   608  		"every_config_map?", &everyConfigMap,
   609  	)
   610  	if err != nil {
   611  		return nil, err
   612  	}
   613  
   614  	dict := starlark.NewDict(2)
   615  
   616  	if configMap != nil {
   617  		err := dict.SetKey(starlark.String("config_map"), configMap)
   618  		if err != nil {
   619  			return nil, err
   620  		}
   621  	}
   622  	if everyConfigMap != nil {
   623  		err := dict.SetKey(starlark.String("every_config_map"), everyConfigMap)
   624  		if err != nil {
   625  			return nil, err
   626  		}
   627  	}
   628  	var obj *DisableSource = &DisableSource{t: t}
   629  	err = obj.Unpack(dict)
   630  	if err != nil {
   631  		return nil, err
   632  	}
   633  	return obj, nil
   634  }
   635  
   636  func (o *DisableSource) Unpack(v starlark.Value) error {
   637  	obj := v1alpha1.DisableSource{}
   638  
   639  	starlarkObj, ok := v.(*DisableSource)
   640  	if ok {
   641  		*o = *starlarkObj
   642  		return nil
   643  	}
   644  
   645  	mapObj, ok := v.(*starlark.Dict)
   646  	if !ok {
   647  		return fmt.Errorf("expected dict, actual: %v", v.Type())
   648  	}
   649  
   650  	for _, item := range mapObj.Items() {
   651  		keyV, val := item[0], item[1]
   652  		key, ok := starlark.AsString(keyV)
   653  		if !ok {
   654  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
   655  		}
   656  
   657  		if key == "config_map" {
   658  			v := ConfigMapDisableSource{t: o.t}
   659  			err := v.Unpack(val)
   660  			if err != nil {
   661  				return fmt.Errorf("unpacking %s: %v", key, err)
   662  			}
   663  			obj.ConfigMap = (*v1alpha1.ConfigMapDisableSource)(&v.Value)
   664  			continue
   665  		}
   666  		if key == "every_config_map" {
   667  			v := ConfigMapDisableSourceList{t: o.t}
   668  			err := v.Unpack(val)
   669  			if err != nil {
   670  				return fmt.Errorf("unpacking %s: %v", key, err)
   671  			}
   672  			obj.EveryConfigMap = v.Value
   673  			continue
   674  		}
   675  		return fmt.Errorf("Unexpected attribute name: %s", key)
   676  	}
   677  
   678  	mapObj.Freeze()
   679  	o.Dict = mapObj
   680  	o.Value = obj
   681  	o.isUnpacked = true
   682  
   683  	return nil
   684  }
   685  
   686  type DisableSourceList struct {
   687  	*starlark.List
   688  	Value []v1alpha1.DisableSource
   689  	t     *starlark.Thread
   690  }
   691  
   692  func (o *DisableSourceList) Unpack(v starlark.Value) error {
   693  	items := []v1alpha1.DisableSource{}
   694  
   695  	listObj, ok := v.(*starlark.List)
   696  	if !ok {
   697  		return fmt.Errorf("expected list, actual: %v", v.Type())
   698  	}
   699  
   700  	for i := 0; i < listObj.Len(); i++ {
   701  		v := listObj.Index(i)
   702  
   703  		item := DisableSource{t: o.t}
   704  		err := item.Unpack(v)
   705  		if err != nil {
   706  			return fmt.Errorf("at index %d: %v", i, err)
   707  		}
   708  		items = append(items, v1alpha1.DisableSource(item.Value))
   709  	}
   710  
   711  	listObj.Freeze()
   712  	o.List = listObj
   713  	o.Value = items
   714  
   715  	return nil
   716  }
   717  
   718  type ExecAction struct {
   719  	*starlark.Dict
   720  	Value      v1alpha1.ExecAction
   721  	isUnpacked bool
   722  	t          *starlark.Thread // instantiation thread for computing abspath
   723  }
   724  
   725  func (p Plugin) execAction(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
   726  	var command starlark.Value
   727  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
   728  		"command?", &command,
   729  	)
   730  	if err != nil {
   731  		return nil, err
   732  	}
   733  
   734  	dict := starlark.NewDict(1)
   735  
   736  	if command != nil {
   737  		err := dict.SetKey(starlark.String("command"), command)
   738  		if err != nil {
   739  			return nil, err
   740  		}
   741  	}
   742  	var obj *ExecAction = &ExecAction{t: t}
   743  	err = obj.Unpack(dict)
   744  	if err != nil {
   745  		return nil, err
   746  	}
   747  	return obj, nil
   748  }
   749  
   750  func (o *ExecAction) Unpack(v starlark.Value) error {
   751  	obj := v1alpha1.ExecAction{}
   752  
   753  	starlarkObj, ok := v.(*ExecAction)
   754  	if ok {
   755  		*o = *starlarkObj
   756  		return nil
   757  	}
   758  
   759  	mapObj, ok := v.(*starlark.Dict)
   760  	if !ok {
   761  		return fmt.Errorf("expected dict, actual: %v", v.Type())
   762  	}
   763  
   764  	for _, item := range mapObj.Items() {
   765  		keyV, val := item[0], item[1]
   766  		key, ok := starlark.AsString(keyV)
   767  		if !ok {
   768  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
   769  		}
   770  
   771  		if key == "command" {
   772  			var v value.StringList
   773  			err := v.Unpack(val)
   774  			if err != nil {
   775  				return fmt.Errorf("unpacking %s: %v", key, err)
   776  			}
   777  			obj.Command = v
   778  			continue
   779  		}
   780  		return fmt.Errorf("Unexpected attribute name: %s", key)
   781  	}
   782  
   783  	mapObj.Freeze()
   784  	o.Dict = mapObj
   785  	o.Value = obj
   786  	o.isUnpacked = true
   787  
   788  	return nil
   789  }
   790  
   791  type ExecActionList struct {
   792  	*starlark.List
   793  	Value []v1alpha1.ExecAction
   794  	t     *starlark.Thread
   795  }
   796  
   797  func (o *ExecActionList) Unpack(v starlark.Value) error {
   798  	items := []v1alpha1.ExecAction{}
   799  
   800  	listObj, ok := v.(*starlark.List)
   801  	if !ok {
   802  		return fmt.Errorf("expected list, actual: %v", v.Type())
   803  	}
   804  
   805  	for i := 0; i < listObj.Len(); i++ {
   806  		v := listObj.Index(i)
   807  
   808  		item := ExecAction{t: o.t}
   809  		err := item.Unpack(v)
   810  		if err != nil {
   811  			return fmt.Errorf("at index %d: %v", i, err)
   812  		}
   813  		items = append(items, v1alpha1.ExecAction(item.Value))
   814  	}
   815  
   816  	listObj.Freeze()
   817  	o.List = listObj
   818  	o.Value = items
   819  
   820  	return nil
   821  }
   822  
   823  type Forward struct {
   824  	*starlark.Dict
   825  	Value      v1alpha1.Forward
   826  	isUnpacked bool
   827  	t          *starlark.Thread // instantiation thread for computing abspath
   828  }
   829  
   830  func (p Plugin) forward(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
   831  	var localPort starlark.Value
   832  	var containerPort starlark.Value
   833  	var host starlark.Value
   834  	var name starlark.Value
   835  	var path starlark.Value
   836  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
   837  		"local_port?", &localPort,
   838  		"container_port?", &containerPort,
   839  		"host?", &host,
   840  		"name?", &name,
   841  		"path?", &path,
   842  	)
   843  	if err != nil {
   844  		return nil, err
   845  	}
   846  
   847  	dict := starlark.NewDict(5)
   848  
   849  	if localPort != nil {
   850  		err := dict.SetKey(starlark.String("local_port"), localPort)
   851  		if err != nil {
   852  			return nil, err
   853  		}
   854  	}
   855  	if containerPort != nil {
   856  		err := dict.SetKey(starlark.String("container_port"), containerPort)
   857  		if err != nil {
   858  			return nil, err
   859  		}
   860  	}
   861  	if host != nil {
   862  		err := dict.SetKey(starlark.String("host"), host)
   863  		if err != nil {
   864  			return nil, err
   865  		}
   866  	}
   867  	if name != nil {
   868  		err := dict.SetKey(starlark.String("name"), name)
   869  		if err != nil {
   870  			return nil, err
   871  		}
   872  	}
   873  	if path != nil {
   874  		err := dict.SetKey(starlark.String("path"), path)
   875  		if err != nil {
   876  			return nil, err
   877  		}
   878  	}
   879  	var obj *Forward = &Forward{t: t}
   880  	err = obj.Unpack(dict)
   881  	if err != nil {
   882  		return nil, err
   883  	}
   884  	return obj, nil
   885  }
   886  
   887  func (o *Forward) Unpack(v starlark.Value) error {
   888  	obj := v1alpha1.Forward{}
   889  
   890  	starlarkObj, ok := v.(*Forward)
   891  	if ok {
   892  		*o = *starlarkObj
   893  		return nil
   894  	}
   895  
   896  	mapObj, ok := v.(*starlark.Dict)
   897  	if !ok {
   898  		return fmt.Errorf("expected dict, actual: %v", v.Type())
   899  	}
   900  
   901  	for _, item := range mapObj.Items() {
   902  		keyV, val := item[0], item[1]
   903  		key, ok := starlark.AsString(keyV)
   904  		if !ok {
   905  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
   906  		}
   907  
   908  		if key == "local_port" {
   909  			v, err := starlark.AsInt32(val)
   910  			if err != nil {
   911  				return fmt.Errorf("Expected int, got: %v", err)
   912  			}
   913  			obj.LocalPort = int32(v)
   914  			continue
   915  		}
   916  		if key == "container_port" {
   917  			v, err := starlark.AsInt32(val)
   918  			if err != nil {
   919  				return fmt.Errorf("Expected int, got: %v", err)
   920  			}
   921  			obj.ContainerPort = int32(v)
   922  			continue
   923  		}
   924  		if key == "host" {
   925  			v, ok := starlark.AsString(val)
   926  			if !ok {
   927  				return fmt.Errorf("Expected string, actual: %s", val.Type())
   928  			}
   929  			obj.Host = string(v)
   930  			continue
   931  		}
   932  		if key == "name" {
   933  			v, ok := starlark.AsString(val)
   934  			if !ok {
   935  				return fmt.Errorf("Expected string, actual: %s", val.Type())
   936  			}
   937  			obj.Name = string(v)
   938  			continue
   939  		}
   940  		if key == "path" {
   941  			v, ok := starlark.AsString(val)
   942  			if !ok {
   943  				return fmt.Errorf("Expected string, actual: %s", val.Type())
   944  			}
   945  			obj.Path = string(v)
   946  			continue
   947  		}
   948  		return fmt.Errorf("Unexpected attribute name: %s", key)
   949  	}
   950  
   951  	mapObj.Freeze()
   952  	o.Dict = mapObj
   953  	o.Value = obj
   954  	o.isUnpacked = true
   955  
   956  	return nil
   957  }
   958  
   959  type ForwardList struct {
   960  	*starlark.List
   961  	Value []v1alpha1.Forward
   962  	t     *starlark.Thread
   963  }
   964  
   965  func (o *ForwardList) Unpack(v starlark.Value) error {
   966  	items := []v1alpha1.Forward{}
   967  
   968  	listObj, ok := v.(*starlark.List)
   969  	if !ok {
   970  		return fmt.Errorf("expected list, actual: %v", v.Type())
   971  	}
   972  
   973  	for i := 0; i < listObj.Len(); i++ {
   974  		v := listObj.Index(i)
   975  
   976  		item := Forward{t: o.t}
   977  		err := item.Unpack(v)
   978  		if err != nil {
   979  			return fmt.Errorf("at index %d: %v", i, err)
   980  		}
   981  		items = append(items, v1alpha1.Forward(item.Value))
   982  	}
   983  
   984  	listObj.Freeze()
   985  	o.List = listObj
   986  	o.Value = items
   987  
   988  	return nil
   989  }
   990  
   991  type HTTPGetAction struct {
   992  	*starlark.Dict
   993  	Value      v1alpha1.HTTPGetAction
   994  	isUnpacked bool
   995  	t          *starlark.Thread // instantiation thread for computing abspath
   996  }
   997  
   998  func (p Plugin) hTTPGetAction(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
   999  	var path starlark.Value
  1000  	var port starlark.Value
  1001  	var host starlark.Value
  1002  	var scheme starlark.Value
  1003  	var hTTPHeaders starlark.Value
  1004  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  1005  		"path?", &path,
  1006  		"port?", &port,
  1007  		"host?", &host,
  1008  		"scheme?", &scheme,
  1009  		"http_headers?", &hTTPHeaders,
  1010  	)
  1011  	if err != nil {
  1012  		return nil, err
  1013  	}
  1014  
  1015  	dict := starlark.NewDict(5)
  1016  
  1017  	if path != nil {
  1018  		err := dict.SetKey(starlark.String("path"), path)
  1019  		if err != nil {
  1020  			return nil, err
  1021  		}
  1022  	}
  1023  	if port != nil {
  1024  		err := dict.SetKey(starlark.String("port"), port)
  1025  		if err != nil {
  1026  			return nil, err
  1027  		}
  1028  	}
  1029  	if host != nil {
  1030  		err := dict.SetKey(starlark.String("host"), host)
  1031  		if err != nil {
  1032  			return nil, err
  1033  		}
  1034  	}
  1035  	if scheme != nil {
  1036  		err := dict.SetKey(starlark.String("scheme"), scheme)
  1037  		if err != nil {
  1038  			return nil, err
  1039  		}
  1040  	}
  1041  	if hTTPHeaders != nil {
  1042  		err := dict.SetKey(starlark.String("http_headers"), hTTPHeaders)
  1043  		if err != nil {
  1044  			return nil, err
  1045  		}
  1046  	}
  1047  	var obj *HTTPGetAction = &HTTPGetAction{t: t}
  1048  	err = obj.Unpack(dict)
  1049  	if err != nil {
  1050  		return nil, err
  1051  	}
  1052  	return obj, nil
  1053  }
  1054  
  1055  func (o *HTTPGetAction) Unpack(v starlark.Value) error {
  1056  	obj := v1alpha1.HTTPGetAction{}
  1057  
  1058  	starlarkObj, ok := v.(*HTTPGetAction)
  1059  	if ok {
  1060  		*o = *starlarkObj
  1061  		return nil
  1062  	}
  1063  
  1064  	mapObj, ok := v.(*starlark.Dict)
  1065  	if !ok {
  1066  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  1067  	}
  1068  
  1069  	for _, item := range mapObj.Items() {
  1070  		keyV, val := item[0], item[1]
  1071  		key, ok := starlark.AsString(keyV)
  1072  		if !ok {
  1073  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  1074  		}
  1075  
  1076  		if key == "path" {
  1077  			v, ok := starlark.AsString(val)
  1078  			if !ok {
  1079  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  1080  			}
  1081  			obj.Path = string(v)
  1082  			continue
  1083  		}
  1084  		if key == "port" {
  1085  			v, err := starlark.AsInt32(val)
  1086  			if err != nil {
  1087  				return fmt.Errorf("Expected int, got: %v", err)
  1088  			}
  1089  			obj.Port = int32(v)
  1090  			continue
  1091  		}
  1092  		if key == "host" {
  1093  			v, ok := starlark.AsString(val)
  1094  			if !ok {
  1095  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  1096  			}
  1097  			obj.Host = string(v)
  1098  			continue
  1099  		}
  1100  		if key == "scheme" {
  1101  			v, ok := starlark.AsString(val)
  1102  			if !ok {
  1103  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  1104  			}
  1105  			obj.Scheme = v1alpha1.URIScheme(v)
  1106  			continue
  1107  		}
  1108  		if key == "http_headers" {
  1109  			v := HTTPHeaderList{t: o.t}
  1110  			err := v.Unpack(val)
  1111  			if err != nil {
  1112  				return fmt.Errorf("unpacking %s: %v", key, err)
  1113  			}
  1114  			obj.HTTPHeaders = v.Value
  1115  			continue
  1116  		}
  1117  		return fmt.Errorf("Unexpected attribute name: %s", key)
  1118  	}
  1119  
  1120  	mapObj.Freeze()
  1121  	o.Dict = mapObj
  1122  	o.Value = obj
  1123  	o.isUnpacked = true
  1124  
  1125  	return nil
  1126  }
  1127  
  1128  type HTTPGetActionList struct {
  1129  	*starlark.List
  1130  	Value []v1alpha1.HTTPGetAction
  1131  	t     *starlark.Thread
  1132  }
  1133  
  1134  func (o *HTTPGetActionList) Unpack(v starlark.Value) error {
  1135  	items := []v1alpha1.HTTPGetAction{}
  1136  
  1137  	listObj, ok := v.(*starlark.List)
  1138  	if !ok {
  1139  		return fmt.Errorf("expected list, actual: %v", v.Type())
  1140  	}
  1141  
  1142  	for i := 0; i < listObj.Len(); i++ {
  1143  		v := listObj.Index(i)
  1144  
  1145  		item := HTTPGetAction{t: o.t}
  1146  		err := item.Unpack(v)
  1147  		if err != nil {
  1148  			return fmt.Errorf("at index %d: %v", i, err)
  1149  		}
  1150  		items = append(items, v1alpha1.HTTPGetAction(item.Value))
  1151  	}
  1152  
  1153  	listObj.Freeze()
  1154  	o.List = listObj
  1155  	o.Value = items
  1156  
  1157  	return nil
  1158  }
  1159  
  1160  type HTTPHeader struct {
  1161  	*starlark.Dict
  1162  	Value      v1alpha1.HTTPHeader
  1163  	isUnpacked bool
  1164  	t          *starlark.Thread // instantiation thread for computing abspath
  1165  }
  1166  
  1167  func (p Plugin) hTTPHeader(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  1168  	var name starlark.Value
  1169  	var value starlark.Value
  1170  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  1171  		"name?", &name,
  1172  		"value?", &value,
  1173  	)
  1174  	if err != nil {
  1175  		return nil, err
  1176  	}
  1177  
  1178  	dict := starlark.NewDict(2)
  1179  
  1180  	if name != nil {
  1181  		err := dict.SetKey(starlark.String("name"), name)
  1182  		if err != nil {
  1183  			return nil, err
  1184  		}
  1185  	}
  1186  	if value != nil {
  1187  		err := dict.SetKey(starlark.String("value"), value)
  1188  		if err != nil {
  1189  			return nil, err
  1190  		}
  1191  	}
  1192  	var obj *HTTPHeader = &HTTPHeader{t: t}
  1193  	err = obj.Unpack(dict)
  1194  	if err != nil {
  1195  		return nil, err
  1196  	}
  1197  	return obj, nil
  1198  }
  1199  
  1200  func (o *HTTPHeader) Unpack(v starlark.Value) error {
  1201  	obj := v1alpha1.HTTPHeader{}
  1202  
  1203  	starlarkObj, ok := v.(*HTTPHeader)
  1204  	if ok {
  1205  		*o = *starlarkObj
  1206  		return nil
  1207  	}
  1208  
  1209  	mapObj, ok := v.(*starlark.Dict)
  1210  	if !ok {
  1211  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  1212  	}
  1213  
  1214  	for _, item := range mapObj.Items() {
  1215  		keyV, val := item[0], item[1]
  1216  		key, ok := starlark.AsString(keyV)
  1217  		if !ok {
  1218  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  1219  		}
  1220  
  1221  		if key == "name" {
  1222  			v, ok := starlark.AsString(val)
  1223  			if !ok {
  1224  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  1225  			}
  1226  			obj.Name = string(v)
  1227  			continue
  1228  		}
  1229  		if key == "value" {
  1230  			v, ok := starlark.AsString(val)
  1231  			if !ok {
  1232  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  1233  			}
  1234  			obj.Value = string(v)
  1235  			continue
  1236  		}
  1237  		return fmt.Errorf("Unexpected attribute name: %s", key)
  1238  	}
  1239  
  1240  	mapObj.Freeze()
  1241  	o.Dict = mapObj
  1242  	o.Value = obj
  1243  	o.isUnpacked = true
  1244  
  1245  	return nil
  1246  }
  1247  
  1248  type HTTPHeaderList struct {
  1249  	*starlark.List
  1250  	Value []v1alpha1.HTTPHeader
  1251  	t     *starlark.Thread
  1252  }
  1253  
  1254  func (o *HTTPHeaderList) Unpack(v starlark.Value) error {
  1255  	items := []v1alpha1.HTTPHeader{}
  1256  
  1257  	listObj, ok := v.(*starlark.List)
  1258  	if !ok {
  1259  		return fmt.Errorf("expected list, actual: %v", v.Type())
  1260  	}
  1261  
  1262  	for i := 0; i < listObj.Len(); i++ {
  1263  		v := listObj.Index(i)
  1264  
  1265  		item := HTTPHeader{t: o.t}
  1266  		err := item.Unpack(v)
  1267  		if err != nil {
  1268  			return fmt.Errorf("at index %d: %v", i, err)
  1269  		}
  1270  		items = append(items, v1alpha1.HTTPHeader(item.Value))
  1271  	}
  1272  
  1273  	listObj.Freeze()
  1274  	o.List = listObj
  1275  	o.Value = items
  1276  
  1277  	return nil
  1278  }
  1279  
  1280  type Handler struct {
  1281  	*starlark.Dict
  1282  	Value      v1alpha1.Handler
  1283  	isUnpacked bool
  1284  	t          *starlark.Thread // instantiation thread for computing abspath
  1285  }
  1286  
  1287  func (p Plugin) handler(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  1288  	var exec starlark.Value
  1289  	var hTTPGet starlark.Value
  1290  	var tCPSocket starlark.Value
  1291  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  1292  		"exec?", &exec,
  1293  		"http_get?", &hTTPGet,
  1294  		"tcp_socket?", &tCPSocket,
  1295  	)
  1296  	if err != nil {
  1297  		return nil, err
  1298  	}
  1299  
  1300  	dict := starlark.NewDict(3)
  1301  
  1302  	if exec != nil {
  1303  		err := dict.SetKey(starlark.String("exec"), exec)
  1304  		if err != nil {
  1305  			return nil, err
  1306  		}
  1307  	}
  1308  	if hTTPGet != nil {
  1309  		err := dict.SetKey(starlark.String("http_get"), hTTPGet)
  1310  		if err != nil {
  1311  			return nil, err
  1312  		}
  1313  	}
  1314  	if tCPSocket != nil {
  1315  		err := dict.SetKey(starlark.String("tcp_socket"), tCPSocket)
  1316  		if err != nil {
  1317  			return nil, err
  1318  		}
  1319  	}
  1320  	var obj *Handler = &Handler{t: t}
  1321  	err = obj.Unpack(dict)
  1322  	if err != nil {
  1323  		return nil, err
  1324  	}
  1325  	return obj, nil
  1326  }
  1327  
  1328  func (o *Handler) Unpack(v starlark.Value) error {
  1329  	obj := v1alpha1.Handler{}
  1330  
  1331  	starlarkObj, ok := v.(*Handler)
  1332  	if ok {
  1333  		*o = *starlarkObj
  1334  		return nil
  1335  	}
  1336  
  1337  	mapObj, ok := v.(*starlark.Dict)
  1338  	if !ok {
  1339  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  1340  	}
  1341  
  1342  	for _, item := range mapObj.Items() {
  1343  		keyV, val := item[0], item[1]
  1344  		key, ok := starlark.AsString(keyV)
  1345  		if !ok {
  1346  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  1347  		}
  1348  
  1349  		if key == "exec" {
  1350  			v := ExecAction{t: o.t}
  1351  			err := v.Unpack(val)
  1352  			if err != nil {
  1353  				return fmt.Errorf("unpacking %s: %v", key, err)
  1354  			}
  1355  			obj.Exec = (*v1alpha1.ExecAction)(&v.Value)
  1356  			continue
  1357  		}
  1358  		if key == "http_get" {
  1359  			v := HTTPGetAction{t: o.t}
  1360  			err := v.Unpack(val)
  1361  			if err != nil {
  1362  				return fmt.Errorf("unpacking %s: %v", key, err)
  1363  			}
  1364  			obj.HTTPGet = (*v1alpha1.HTTPGetAction)(&v.Value)
  1365  			continue
  1366  		}
  1367  		if key == "tcp_socket" {
  1368  			v := TCPSocketAction{t: o.t}
  1369  			err := v.Unpack(val)
  1370  			if err != nil {
  1371  				return fmt.Errorf("unpacking %s: %v", key, err)
  1372  			}
  1373  			obj.TCPSocket = (*v1alpha1.TCPSocketAction)(&v.Value)
  1374  			continue
  1375  		}
  1376  		return fmt.Errorf("Unexpected attribute name: %s", key)
  1377  	}
  1378  
  1379  	mapObj.Freeze()
  1380  	o.Dict = mapObj
  1381  	o.Value = obj
  1382  	o.isUnpacked = true
  1383  
  1384  	return nil
  1385  }
  1386  
  1387  type HandlerList struct {
  1388  	*starlark.List
  1389  	Value []v1alpha1.Handler
  1390  	t     *starlark.Thread
  1391  }
  1392  
  1393  func (o *HandlerList) Unpack(v starlark.Value) error {
  1394  	items := []v1alpha1.Handler{}
  1395  
  1396  	listObj, ok := v.(*starlark.List)
  1397  	if !ok {
  1398  		return fmt.Errorf("expected list, actual: %v", v.Type())
  1399  	}
  1400  
  1401  	for i := 0; i < listObj.Len(); i++ {
  1402  		v := listObj.Index(i)
  1403  
  1404  		item := Handler{t: o.t}
  1405  		err := item.Unpack(v)
  1406  		if err != nil {
  1407  			return fmt.Errorf("at index %d: %v", i, err)
  1408  		}
  1409  		items = append(items, v1alpha1.Handler(item.Value))
  1410  	}
  1411  
  1412  	listObj.Freeze()
  1413  	o.List = listObj
  1414  	o.Value = items
  1415  
  1416  	return nil
  1417  }
  1418  
  1419  type IgnoreDef struct {
  1420  	*starlark.Dict
  1421  	Value      v1alpha1.IgnoreDef
  1422  	isUnpacked bool
  1423  	t          *starlark.Thread // instantiation thread for computing abspath
  1424  }
  1425  
  1426  func (p Plugin) ignoreDef(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  1427  	var basePath starlark.Value
  1428  	var patterns starlark.Value
  1429  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  1430  		"base_path?", &basePath,
  1431  		"patterns?", &patterns,
  1432  	)
  1433  	if err != nil {
  1434  		return nil, err
  1435  	}
  1436  
  1437  	dict := starlark.NewDict(2)
  1438  
  1439  	if basePath != nil {
  1440  		err := dict.SetKey(starlark.String("base_path"), basePath)
  1441  		if err != nil {
  1442  			return nil, err
  1443  		}
  1444  	}
  1445  	if patterns != nil {
  1446  		err := dict.SetKey(starlark.String("patterns"), patterns)
  1447  		if err != nil {
  1448  			return nil, err
  1449  		}
  1450  	}
  1451  	var obj *IgnoreDef = &IgnoreDef{t: t}
  1452  	err = obj.Unpack(dict)
  1453  	if err != nil {
  1454  		return nil, err
  1455  	}
  1456  	return obj, nil
  1457  }
  1458  
  1459  func (o *IgnoreDef) Unpack(v starlark.Value) error {
  1460  	obj := v1alpha1.IgnoreDef{}
  1461  
  1462  	starlarkObj, ok := v.(*IgnoreDef)
  1463  	if ok {
  1464  		*o = *starlarkObj
  1465  		return nil
  1466  	}
  1467  
  1468  	mapObj, ok := v.(*starlark.Dict)
  1469  	if !ok {
  1470  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  1471  	}
  1472  
  1473  	for _, item := range mapObj.Items() {
  1474  		keyV, val := item[0], item[1]
  1475  		key, ok := starlark.AsString(keyV)
  1476  		if !ok {
  1477  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  1478  		}
  1479  
  1480  		if key == "base_path" {
  1481  			v := value.NewLocalPathUnpacker(o.t)
  1482  			err := v.Unpack(val)
  1483  			if err != nil {
  1484  				return fmt.Errorf("unpacking %s: %v", key, err)
  1485  			}
  1486  			obj.BasePath = v.Value
  1487  			continue
  1488  		}
  1489  		if key == "patterns" {
  1490  			var v value.StringList
  1491  			err := v.Unpack(val)
  1492  			if err != nil {
  1493  				return fmt.Errorf("unpacking %s: %v", key, err)
  1494  			}
  1495  			obj.Patterns = v
  1496  			continue
  1497  		}
  1498  		return fmt.Errorf("Unexpected attribute name: %s", key)
  1499  	}
  1500  
  1501  	mapObj.Freeze()
  1502  	o.Dict = mapObj
  1503  	o.Value = obj
  1504  	o.isUnpacked = true
  1505  
  1506  	return nil
  1507  }
  1508  
  1509  type IgnoreDefList struct {
  1510  	*starlark.List
  1511  	Value []v1alpha1.IgnoreDef
  1512  	t     *starlark.Thread
  1513  }
  1514  
  1515  func (o *IgnoreDefList) Unpack(v starlark.Value) error {
  1516  	items := []v1alpha1.IgnoreDef{}
  1517  
  1518  	listObj, ok := v.(*starlark.List)
  1519  	if !ok {
  1520  		return fmt.Errorf("expected list, actual: %v", v.Type())
  1521  	}
  1522  
  1523  	for i := 0; i < listObj.Len(); i++ {
  1524  		v := listObj.Index(i)
  1525  
  1526  		item := IgnoreDef{t: o.t}
  1527  		err := item.Unpack(v)
  1528  		if err != nil {
  1529  			return fmt.Errorf("at index %d: %v", i, err)
  1530  		}
  1531  		items = append(items, v1alpha1.IgnoreDef(item.Value))
  1532  	}
  1533  
  1534  	listObj.Freeze()
  1535  	o.List = listObj
  1536  	o.Value = items
  1537  
  1538  	return nil
  1539  }
  1540  
  1541  type KubernetesApplyCmd struct {
  1542  	*starlark.Dict
  1543  	Value      v1alpha1.KubernetesApplyCmd
  1544  	isUnpacked bool
  1545  	t          *starlark.Thread // instantiation thread for computing abspath
  1546  }
  1547  
  1548  func (p Plugin) kubernetesApplyCmd(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  1549  	var specArgs starlark.Value
  1550  	var dir starlark.Value
  1551  	var env starlark.Value
  1552  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  1553  		"args?", &specArgs,
  1554  		"dir?", &dir,
  1555  		"env?", &env,
  1556  	)
  1557  	if err != nil {
  1558  		return nil, err
  1559  	}
  1560  
  1561  	dict := starlark.NewDict(3)
  1562  
  1563  	if specArgs != nil {
  1564  		err := dict.SetKey(starlark.String("args"), specArgs)
  1565  		if err != nil {
  1566  			return nil, err
  1567  		}
  1568  	}
  1569  	if dir != nil {
  1570  		err := dict.SetKey(starlark.String("dir"), dir)
  1571  		if err != nil {
  1572  			return nil, err
  1573  		}
  1574  	}
  1575  	if env != nil {
  1576  		err := dict.SetKey(starlark.String("env"), env)
  1577  		if err != nil {
  1578  			return nil, err
  1579  		}
  1580  	}
  1581  	var obj *KubernetesApplyCmd = &KubernetesApplyCmd{t: t}
  1582  	err = obj.Unpack(dict)
  1583  	if err != nil {
  1584  		return nil, err
  1585  	}
  1586  	return obj, nil
  1587  }
  1588  
  1589  func (o *KubernetesApplyCmd) Unpack(v starlark.Value) error {
  1590  	obj := v1alpha1.KubernetesApplyCmd{}
  1591  
  1592  	starlarkObj, ok := v.(*KubernetesApplyCmd)
  1593  	if ok {
  1594  		*o = *starlarkObj
  1595  		return nil
  1596  	}
  1597  
  1598  	mapObj, ok := v.(*starlark.Dict)
  1599  	if !ok {
  1600  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  1601  	}
  1602  
  1603  	for _, item := range mapObj.Items() {
  1604  		keyV, val := item[0], item[1]
  1605  		key, ok := starlark.AsString(keyV)
  1606  		if !ok {
  1607  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  1608  		}
  1609  
  1610  		if key == "args" {
  1611  			var v value.StringList
  1612  			err := v.Unpack(val)
  1613  			if err != nil {
  1614  				return fmt.Errorf("unpacking %s: %v", key, err)
  1615  			}
  1616  			obj.Args = v
  1617  			continue
  1618  		}
  1619  		if key == "dir" {
  1620  			v := value.NewLocalPathUnpacker(o.t)
  1621  			err := v.Unpack(val)
  1622  			if err != nil {
  1623  				return fmt.Errorf("unpacking %s: %v", key, err)
  1624  			}
  1625  			obj.Dir = v.Value
  1626  			continue
  1627  		}
  1628  		if key == "env" {
  1629  			var v value.StringList
  1630  			err := v.Unpack(val)
  1631  			if err != nil {
  1632  				return fmt.Errorf("unpacking %s: %v", key, err)
  1633  			}
  1634  			obj.Env = v
  1635  			continue
  1636  		}
  1637  		return fmt.Errorf("Unexpected attribute name: %s", key)
  1638  	}
  1639  
  1640  	mapObj.Freeze()
  1641  	o.Dict = mapObj
  1642  	o.Value = obj
  1643  	o.isUnpacked = true
  1644  
  1645  	return nil
  1646  }
  1647  
  1648  type KubernetesApplyCmdList struct {
  1649  	*starlark.List
  1650  	Value []v1alpha1.KubernetesApplyCmd
  1651  	t     *starlark.Thread
  1652  }
  1653  
  1654  func (o *KubernetesApplyCmdList) Unpack(v starlark.Value) error {
  1655  	items := []v1alpha1.KubernetesApplyCmd{}
  1656  
  1657  	listObj, ok := v.(*starlark.List)
  1658  	if !ok {
  1659  		return fmt.Errorf("expected list, actual: %v", v.Type())
  1660  	}
  1661  
  1662  	for i := 0; i < listObj.Len(); i++ {
  1663  		v := listObj.Index(i)
  1664  
  1665  		item := KubernetesApplyCmd{t: o.t}
  1666  		err := item.Unpack(v)
  1667  		if err != nil {
  1668  			return fmt.Errorf("at index %d: %v", i, err)
  1669  		}
  1670  		items = append(items, v1alpha1.KubernetesApplyCmd(item.Value))
  1671  	}
  1672  
  1673  	listObj.Freeze()
  1674  	o.List = listObj
  1675  	o.Value = items
  1676  
  1677  	return nil
  1678  }
  1679  
  1680  type KubernetesDiscoveryTemplateSpec struct {
  1681  	*starlark.Dict
  1682  	Value      v1alpha1.KubernetesDiscoveryTemplateSpec
  1683  	isUnpacked bool
  1684  	t          *starlark.Thread // instantiation thread for computing abspath
  1685  }
  1686  
  1687  func (p Plugin) kubernetesDiscoveryTemplateSpec(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  1688  	var extraSelectors starlark.Value
  1689  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  1690  		"extra_selectors?", &extraSelectors,
  1691  	)
  1692  	if err != nil {
  1693  		return nil, err
  1694  	}
  1695  
  1696  	dict := starlark.NewDict(1)
  1697  
  1698  	if extraSelectors != nil {
  1699  		err := dict.SetKey(starlark.String("extra_selectors"), extraSelectors)
  1700  		if err != nil {
  1701  			return nil, err
  1702  		}
  1703  	}
  1704  	var obj *KubernetesDiscoveryTemplateSpec = &KubernetesDiscoveryTemplateSpec{t: t}
  1705  	err = obj.Unpack(dict)
  1706  	if err != nil {
  1707  		return nil, err
  1708  	}
  1709  	return obj, nil
  1710  }
  1711  
  1712  func (o *KubernetesDiscoveryTemplateSpec) Unpack(v starlark.Value) error {
  1713  	obj := v1alpha1.KubernetesDiscoveryTemplateSpec{}
  1714  
  1715  	starlarkObj, ok := v.(*KubernetesDiscoveryTemplateSpec)
  1716  	if ok {
  1717  		*o = *starlarkObj
  1718  		return nil
  1719  	}
  1720  
  1721  	mapObj, ok := v.(*starlark.Dict)
  1722  	if !ok {
  1723  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  1724  	}
  1725  
  1726  	for _, item := range mapObj.Items() {
  1727  		keyV, val := item[0], item[1]
  1728  		key, ok := starlark.AsString(keyV)
  1729  		if !ok {
  1730  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  1731  		}
  1732  
  1733  		if key == "extra_selectors" {
  1734  			v := LabelSelectorList{t: o.t}
  1735  			err := v.Unpack(val)
  1736  			if err != nil {
  1737  				return fmt.Errorf("unpacking %s: %v", key, err)
  1738  			}
  1739  			obj.ExtraSelectors = v.Value
  1740  			continue
  1741  		}
  1742  		return fmt.Errorf("Unexpected attribute name: %s", key)
  1743  	}
  1744  
  1745  	mapObj.Freeze()
  1746  	o.Dict = mapObj
  1747  	o.Value = obj
  1748  	o.isUnpacked = true
  1749  
  1750  	return nil
  1751  }
  1752  
  1753  type KubernetesDiscoveryTemplateSpecList struct {
  1754  	*starlark.List
  1755  	Value []v1alpha1.KubernetesDiscoveryTemplateSpec
  1756  	t     *starlark.Thread
  1757  }
  1758  
  1759  func (o *KubernetesDiscoveryTemplateSpecList) Unpack(v starlark.Value) error {
  1760  	items := []v1alpha1.KubernetesDiscoveryTemplateSpec{}
  1761  
  1762  	listObj, ok := v.(*starlark.List)
  1763  	if !ok {
  1764  		return fmt.Errorf("expected list, actual: %v", v.Type())
  1765  	}
  1766  
  1767  	for i := 0; i < listObj.Len(); i++ {
  1768  		v := listObj.Index(i)
  1769  
  1770  		item := KubernetesDiscoveryTemplateSpec{t: o.t}
  1771  		err := item.Unpack(v)
  1772  		if err != nil {
  1773  			return fmt.Errorf("at index %d: %v", i, err)
  1774  		}
  1775  		items = append(items, v1alpha1.KubernetesDiscoveryTemplateSpec(item.Value))
  1776  	}
  1777  
  1778  	listObj.Freeze()
  1779  	o.List = listObj
  1780  	o.Value = items
  1781  
  1782  	return nil
  1783  }
  1784  
  1785  type KubernetesImageLocator struct {
  1786  	*starlark.Dict
  1787  	Value      v1alpha1.KubernetesImageLocator
  1788  	isUnpacked bool
  1789  	t          *starlark.Thread // instantiation thread for computing abspath
  1790  }
  1791  
  1792  func (p Plugin) kubernetesImageLocator(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  1793  	var objectSelector starlark.Value
  1794  	var path starlark.Value
  1795  	var object starlark.Value
  1796  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  1797  		"object_selector?", &objectSelector,
  1798  		"path?", &path,
  1799  		"object?", &object,
  1800  	)
  1801  	if err != nil {
  1802  		return nil, err
  1803  	}
  1804  
  1805  	dict := starlark.NewDict(3)
  1806  
  1807  	if objectSelector != nil {
  1808  		err := dict.SetKey(starlark.String("object_selector"), objectSelector)
  1809  		if err != nil {
  1810  			return nil, err
  1811  		}
  1812  	}
  1813  	if path != nil {
  1814  		err := dict.SetKey(starlark.String("path"), path)
  1815  		if err != nil {
  1816  			return nil, err
  1817  		}
  1818  	}
  1819  	if object != nil {
  1820  		err := dict.SetKey(starlark.String("object"), object)
  1821  		if err != nil {
  1822  			return nil, err
  1823  		}
  1824  	}
  1825  	var obj *KubernetesImageLocator = &KubernetesImageLocator{t: t}
  1826  	err = obj.Unpack(dict)
  1827  	if err != nil {
  1828  		return nil, err
  1829  	}
  1830  	return obj, nil
  1831  }
  1832  
  1833  func (o *KubernetesImageLocator) Unpack(v starlark.Value) error {
  1834  	obj := v1alpha1.KubernetesImageLocator{}
  1835  
  1836  	starlarkObj, ok := v.(*KubernetesImageLocator)
  1837  	if ok {
  1838  		*o = *starlarkObj
  1839  		return nil
  1840  	}
  1841  
  1842  	mapObj, ok := v.(*starlark.Dict)
  1843  	if !ok {
  1844  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  1845  	}
  1846  
  1847  	for _, item := range mapObj.Items() {
  1848  		keyV, val := item[0], item[1]
  1849  		key, ok := starlark.AsString(keyV)
  1850  		if !ok {
  1851  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  1852  		}
  1853  
  1854  		if key == "object_selector" {
  1855  			v := ObjectSelector{t: o.t}
  1856  			err := v.Unpack(val)
  1857  			if err != nil {
  1858  				return fmt.Errorf("unpacking %s: %v", key, err)
  1859  			}
  1860  			obj.ObjectSelector = v.Value
  1861  			continue
  1862  		}
  1863  		if key == "path" {
  1864  			v, ok := starlark.AsString(val)
  1865  			if !ok {
  1866  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  1867  			}
  1868  			obj.Path = string(v)
  1869  			continue
  1870  		}
  1871  		if key == "object" {
  1872  			v := KubernetesImageObjectDescriptor{t: o.t}
  1873  			err := v.Unpack(val)
  1874  			if err != nil {
  1875  				return fmt.Errorf("unpacking %s: %v", key, err)
  1876  			}
  1877  			obj.Object = (*v1alpha1.KubernetesImageObjectDescriptor)(&v.Value)
  1878  			continue
  1879  		}
  1880  		return fmt.Errorf("Unexpected attribute name: %s", key)
  1881  	}
  1882  
  1883  	mapObj.Freeze()
  1884  	o.Dict = mapObj
  1885  	o.Value = obj
  1886  	o.isUnpacked = true
  1887  
  1888  	return nil
  1889  }
  1890  
  1891  type KubernetesImageLocatorList struct {
  1892  	*starlark.List
  1893  	Value []v1alpha1.KubernetesImageLocator
  1894  	t     *starlark.Thread
  1895  }
  1896  
  1897  func (o *KubernetesImageLocatorList) Unpack(v starlark.Value) error {
  1898  	items := []v1alpha1.KubernetesImageLocator{}
  1899  
  1900  	listObj, ok := v.(*starlark.List)
  1901  	if !ok {
  1902  		return fmt.Errorf("expected list, actual: %v", v.Type())
  1903  	}
  1904  
  1905  	for i := 0; i < listObj.Len(); i++ {
  1906  		v := listObj.Index(i)
  1907  
  1908  		item := KubernetesImageLocator{t: o.t}
  1909  		err := item.Unpack(v)
  1910  		if err != nil {
  1911  			return fmt.Errorf("at index %d: %v", i, err)
  1912  		}
  1913  		items = append(items, v1alpha1.KubernetesImageLocator(item.Value))
  1914  	}
  1915  
  1916  	listObj.Freeze()
  1917  	o.List = listObj
  1918  	o.Value = items
  1919  
  1920  	return nil
  1921  }
  1922  
  1923  type KubernetesImageObjectDescriptor struct {
  1924  	*starlark.Dict
  1925  	Value      v1alpha1.KubernetesImageObjectDescriptor
  1926  	isUnpacked bool
  1927  	t          *starlark.Thread // instantiation thread for computing abspath
  1928  }
  1929  
  1930  func (p Plugin) kubernetesImageObjectDescriptor(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  1931  	var repoField starlark.Value
  1932  	var tagField starlark.Value
  1933  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  1934  		"repo_field?", &repoField,
  1935  		"tag_field?", &tagField,
  1936  	)
  1937  	if err != nil {
  1938  		return nil, err
  1939  	}
  1940  
  1941  	dict := starlark.NewDict(2)
  1942  
  1943  	if repoField != nil {
  1944  		err := dict.SetKey(starlark.String("repo_field"), repoField)
  1945  		if err != nil {
  1946  			return nil, err
  1947  		}
  1948  	}
  1949  	if tagField != nil {
  1950  		err := dict.SetKey(starlark.String("tag_field"), tagField)
  1951  		if err != nil {
  1952  			return nil, err
  1953  		}
  1954  	}
  1955  	var obj *KubernetesImageObjectDescriptor = &KubernetesImageObjectDescriptor{t: t}
  1956  	err = obj.Unpack(dict)
  1957  	if err != nil {
  1958  		return nil, err
  1959  	}
  1960  	return obj, nil
  1961  }
  1962  
  1963  func (o *KubernetesImageObjectDescriptor) Unpack(v starlark.Value) error {
  1964  	obj := v1alpha1.KubernetesImageObjectDescriptor{}
  1965  
  1966  	starlarkObj, ok := v.(*KubernetesImageObjectDescriptor)
  1967  	if ok {
  1968  		*o = *starlarkObj
  1969  		return nil
  1970  	}
  1971  
  1972  	mapObj, ok := v.(*starlark.Dict)
  1973  	if !ok {
  1974  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  1975  	}
  1976  
  1977  	for _, item := range mapObj.Items() {
  1978  		keyV, val := item[0], item[1]
  1979  		key, ok := starlark.AsString(keyV)
  1980  		if !ok {
  1981  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  1982  		}
  1983  
  1984  		if key == "repo_field" {
  1985  			v, ok := starlark.AsString(val)
  1986  			if !ok {
  1987  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  1988  			}
  1989  			obj.RepoField = string(v)
  1990  			continue
  1991  		}
  1992  		if key == "tag_field" {
  1993  			v, ok := starlark.AsString(val)
  1994  			if !ok {
  1995  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  1996  			}
  1997  			obj.TagField = string(v)
  1998  			continue
  1999  		}
  2000  		return fmt.Errorf("Unexpected attribute name: %s", key)
  2001  	}
  2002  
  2003  	mapObj.Freeze()
  2004  	o.Dict = mapObj
  2005  	o.Value = obj
  2006  	o.isUnpacked = true
  2007  
  2008  	return nil
  2009  }
  2010  
  2011  type KubernetesImageObjectDescriptorList struct {
  2012  	*starlark.List
  2013  	Value []v1alpha1.KubernetesImageObjectDescriptor
  2014  	t     *starlark.Thread
  2015  }
  2016  
  2017  func (o *KubernetesImageObjectDescriptorList) Unpack(v starlark.Value) error {
  2018  	items := []v1alpha1.KubernetesImageObjectDescriptor{}
  2019  
  2020  	listObj, ok := v.(*starlark.List)
  2021  	if !ok {
  2022  		return fmt.Errorf("expected list, actual: %v", v.Type())
  2023  	}
  2024  
  2025  	for i := 0; i < listObj.Len(); i++ {
  2026  		v := listObj.Index(i)
  2027  
  2028  		item := KubernetesImageObjectDescriptor{t: o.t}
  2029  		err := item.Unpack(v)
  2030  		if err != nil {
  2031  			return fmt.Errorf("at index %d: %v", i, err)
  2032  		}
  2033  		items = append(items, v1alpha1.KubernetesImageObjectDescriptor(item.Value))
  2034  	}
  2035  
  2036  	listObj.Freeze()
  2037  	o.List = listObj
  2038  	o.Value = items
  2039  
  2040  	return nil
  2041  }
  2042  
  2043  type KubernetesWatchRef struct {
  2044  	*starlark.Dict
  2045  	Value      v1alpha1.KubernetesWatchRef
  2046  	isUnpacked bool
  2047  	t          *starlark.Thread // instantiation thread for computing abspath
  2048  }
  2049  
  2050  func (p Plugin) kubernetesWatchRef(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  2051  	var uID starlark.Value
  2052  	var namespace starlark.Value
  2053  	var name starlark.Value
  2054  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  2055  		"uid?", &uID,
  2056  		"namespace?", &namespace,
  2057  		"name?", &name,
  2058  	)
  2059  	if err != nil {
  2060  		return nil, err
  2061  	}
  2062  
  2063  	dict := starlark.NewDict(3)
  2064  
  2065  	if uID != nil {
  2066  		err := dict.SetKey(starlark.String("uid"), uID)
  2067  		if err != nil {
  2068  			return nil, err
  2069  		}
  2070  	}
  2071  	if namespace != nil {
  2072  		err := dict.SetKey(starlark.String("namespace"), namespace)
  2073  		if err != nil {
  2074  			return nil, err
  2075  		}
  2076  	}
  2077  	if name != nil {
  2078  		err := dict.SetKey(starlark.String("name"), name)
  2079  		if err != nil {
  2080  			return nil, err
  2081  		}
  2082  	}
  2083  	var obj *KubernetesWatchRef = &KubernetesWatchRef{t: t}
  2084  	err = obj.Unpack(dict)
  2085  	if err != nil {
  2086  		return nil, err
  2087  	}
  2088  	return obj, nil
  2089  }
  2090  
  2091  func (o *KubernetesWatchRef) Unpack(v starlark.Value) error {
  2092  	obj := v1alpha1.KubernetesWatchRef{}
  2093  
  2094  	starlarkObj, ok := v.(*KubernetesWatchRef)
  2095  	if ok {
  2096  		*o = *starlarkObj
  2097  		return nil
  2098  	}
  2099  
  2100  	mapObj, ok := v.(*starlark.Dict)
  2101  	if !ok {
  2102  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  2103  	}
  2104  
  2105  	for _, item := range mapObj.Items() {
  2106  		keyV, val := item[0], item[1]
  2107  		key, ok := starlark.AsString(keyV)
  2108  		if !ok {
  2109  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  2110  		}
  2111  
  2112  		if key == "uid" {
  2113  			v, ok := starlark.AsString(val)
  2114  			if !ok {
  2115  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  2116  			}
  2117  			obj.UID = string(v)
  2118  			continue
  2119  		}
  2120  		if key == "namespace" {
  2121  			v, ok := starlark.AsString(val)
  2122  			if !ok {
  2123  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  2124  			}
  2125  			obj.Namespace = string(v)
  2126  			continue
  2127  		}
  2128  		if key == "name" {
  2129  			v, ok := starlark.AsString(val)
  2130  			if !ok {
  2131  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  2132  			}
  2133  			obj.Name = string(v)
  2134  			continue
  2135  		}
  2136  		return fmt.Errorf("Unexpected attribute name: %s", key)
  2137  	}
  2138  
  2139  	mapObj.Freeze()
  2140  	o.Dict = mapObj
  2141  	o.Value = obj
  2142  	o.isUnpacked = true
  2143  
  2144  	return nil
  2145  }
  2146  
  2147  type KubernetesWatchRefList struct {
  2148  	*starlark.List
  2149  	Value []v1alpha1.KubernetesWatchRef
  2150  	t     *starlark.Thread
  2151  }
  2152  
  2153  func (o *KubernetesWatchRefList) Unpack(v starlark.Value) error {
  2154  	items := []v1alpha1.KubernetesWatchRef{}
  2155  
  2156  	listObj, ok := v.(*starlark.List)
  2157  	if !ok {
  2158  		return fmt.Errorf("expected list, actual: %v", v.Type())
  2159  	}
  2160  
  2161  	for i := 0; i < listObj.Len(); i++ {
  2162  		v := listObj.Index(i)
  2163  
  2164  		item := KubernetesWatchRef{t: o.t}
  2165  		err := item.Unpack(v)
  2166  		if err != nil {
  2167  			return fmt.Errorf("at index %d: %v", i, err)
  2168  		}
  2169  		items = append(items, v1alpha1.KubernetesWatchRef(item.Value))
  2170  	}
  2171  
  2172  	listObj.Freeze()
  2173  	o.List = listObj
  2174  	o.Value = items
  2175  
  2176  	return nil
  2177  }
  2178  
  2179  type LabelSelector struct {
  2180  	*starlark.Dict
  2181  	Value      metav1.LabelSelector
  2182  	isUnpacked bool
  2183  	t          *starlark.Thread // instantiation thread for computing abspath
  2184  }
  2185  
  2186  func (p Plugin) labelSelector(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  2187  	var matchLabels starlark.Value
  2188  	var matchExpressions starlark.Value
  2189  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  2190  		"match_labels?", &matchLabels,
  2191  		"match_expressions?", &matchExpressions,
  2192  	)
  2193  	if err != nil {
  2194  		return nil, err
  2195  	}
  2196  
  2197  	dict := starlark.NewDict(2)
  2198  
  2199  	if matchLabels != nil {
  2200  		err := dict.SetKey(starlark.String("match_labels"), matchLabels)
  2201  		if err != nil {
  2202  			return nil, err
  2203  		}
  2204  	}
  2205  	if matchExpressions != nil {
  2206  		err := dict.SetKey(starlark.String("match_expressions"), matchExpressions)
  2207  		if err != nil {
  2208  			return nil, err
  2209  		}
  2210  	}
  2211  	var obj *LabelSelector = &LabelSelector{t: t}
  2212  	err = obj.Unpack(dict)
  2213  	if err != nil {
  2214  		return nil, err
  2215  	}
  2216  	return obj, nil
  2217  }
  2218  
  2219  func (o *LabelSelector) Unpack(v starlark.Value) error {
  2220  	obj := metav1.LabelSelector{}
  2221  
  2222  	starlarkObj, ok := v.(*LabelSelector)
  2223  	if ok {
  2224  		*o = *starlarkObj
  2225  		return nil
  2226  	}
  2227  
  2228  	mapObj, ok := v.(*starlark.Dict)
  2229  	if !ok {
  2230  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  2231  	}
  2232  
  2233  	for _, item := range mapObj.Items() {
  2234  		keyV, val := item[0], item[1]
  2235  		key, ok := starlark.AsString(keyV)
  2236  		if !ok {
  2237  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  2238  		}
  2239  
  2240  		if key == "match_labels" {
  2241  			var v value.StringStringMap
  2242  			err := v.Unpack(val)
  2243  			if err != nil {
  2244  				return fmt.Errorf("unpacking %s: %v", key, err)
  2245  			}
  2246  			obj.MatchLabels = (map[string]string)(v)
  2247  			continue
  2248  		}
  2249  		if key == "match_expressions" {
  2250  			v := LabelSelectorRequirementList{t: o.t}
  2251  			err := v.Unpack(val)
  2252  			if err != nil {
  2253  				return fmt.Errorf("unpacking %s: %v", key, err)
  2254  			}
  2255  			obj.MatchExpressions = v.Value
  2256  			continue
  2257  		}
  2258  		return fmt.Errorf("Unexpected attribute name: %s", key)
  2259  	}
  2260  
  2261  	mapObj.Freeze()
  2262  	o.Dict = mapObj
  2263  	o.Value = obj
  2264  	o.isUnpacked = true
  2265  
  2266  	return nil
  2267  }
  2268  
  2269  type LabelSelectorList struct {
  2270  	*starlark.List
  2271  	Value []metav1.LabelSelector
  2272  	t     *starlark.Thread
  2273  }
  2274  
  2275  func (o *LabelSelectorList) Unpack(v starlark.Value) error {
  2276  	items := []metav1.LabelSelector{}
  2277  
  2278  	listObj, ok := v.(*starlark.List)
  2279  	if !ok {
  2280  		return fmt.Errorf("expected list, actual: %v", v.Type())
  2281  	}
  2282  
  2283  	for i := 0; i < listObj.Len(); i++ {
  2284  		v := listObj.Index(i)
  2285  
  2286  		item := LabelSelector{t: o.t}
  2287  		err := item.Unpack(v)
  2288  		if err != nil {
  2289  			return fmt.Errorf("at index %d: %v", i, err)
  2290  		}
  2291  		items = append(items, metav1.LabelSelector(item.Value))
  2292  	}
  2293  
  2294  	listObj.Freeze()
  2295  	o.List = listObj
  2296  	o.Value = items
  2297  
  2298  	return nil
  2299  }
  2300  
  2301  type LabelSelectorRequirement struct {
  2302  	*starlark.Dict
  2303  	Value      metav1.LabelSelectorRequirement
  2304  	isUnpacked bool
  2305  	t          *starlark.Thread // instantiation thread for computing abspath
  2306  }
  2307  
  2308  func (p Plugin) labelSelectorRequirement(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  2309  	var key starlark.Value
  2310  	var operator starlark.Value
  2311  	var values starlark.Value
  2312  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  2313  		"key?", &key,
  2314  		"operator?", &operator,
  2315  		"values?", &values,
  2316  	)
  2317  	if err != nil {
  2318  		return nil, err
  2319  	}
  2320  
  2321  	dict := starlark.NewDict(3)
  2322  
  2323  	if key != nil {
  2324  		err := dict.SetKey(starlark.String("key"), key)
  2325  		if err != nil {
  2326  			return nil, err
  2327  		}
  2328  	}
  2329  	if operator != nil {
  2330  		err := dict.SetKey(starlark.String("operator"), operator)
  2331  		if err != nil {
  2332  			return nil, err
  2333  		}
  2334  	}
  2335  	if values != nil {
  2336  		err := dict.SetKey(starlark.String("values"), values)
  2337  		if err != nil {
  2338  			return nil, err
  2339  		}
  2340  	}
  2341  	var obj *LabelSelectorRequirement = &LabelSelectorRequirement{t: t}
  2342  	err = obj.Unpack(dict)
  2343  	if err != nil {
  2344  		return nil, err
  2345  	}
  2346  	return obj, nil
  2347  }
  2348  
  2349  func (o *LabelSelectorRequirement) Unpack(v starlark.Value) error {
  2350  	obj := metav1.LabelSelectorRequirement{}
  2351  
  2352  	starlarkObj, ok := v.(*LabelSelectorRequirement)
  2353  	if ok {
  2354  		*o = *starlarkObj
  2355  		return nil
  2356  	}
  2357  
  2358  	mapObj, ok := v.(*starlark.Dict)
  2359  	if !ok {
  2360  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  2361  	}
  2362  
  2363  	for _, item := range mapObj.Items() {
  2364  		keyV, val := item[0], item[1]
  2365  		key, ok := starlark.AsString(keyV)
  2366  		if !ok {
  2367  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  2368  		}
  2369  
  2370  		if key == "key" {
  2371  			v, ok := starlark.AsString(val)
  2372  			if !ok {
  2373  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  2374  			}
  2375  			obj.Key = string(v)
  2376  			continue
  2377  		}
  2378  		if key == "operator" {
  2379  			v, ok := starlark.AsString(val)
  2380  			if !ok {
  2381  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  2382  			}
  2383  			obj.Operator = metav1.LabelSelectorOperator(v)
  2384  			continue
  2385  		}
  2386  		if key == "values" {
  2387  			var v value.StringList
  2388  			err := v.Unpack(val)
  2389  			if err != nil {
  2390  				return fmt.Errorf("unpacking %s: %v", key, err)
  2391  			}
  2392  			obj.Values = v
  2393  			continue
  2394  		}
  2395  		return fmt.Errorf("Unexpected attribute name: %s", key)
  2396  	}
  2397  
  2398  	mapObj.Freeze()
  2399  	o.Dict = mapObj
  2400  	o.Value = obj
  2401  	o.isUnpacked = true
  2402  
  2403  	return nil
  2404  }
  2405  
  2406  type LabelSelectorRequirementList struct {
  2407  	*starlark.List
  2408  	Value []metav1.LabelSelectorRequirement
  2409  	t     *starlark.Thread
  2410  }
  2411  
  2412  func (o *LabelSelectorRequirementList) Unpack(v starlark.Value) error {
  2413  	items := []metav1.LabelSelectorRequirement{}
  2414  
  2415  	listObj, ok := v.(*starlark.List)
  2416  	if !ok {
  2417  		return fmt.Errorf("expected list, actual: %v", v.Type())
  2418  	}
  2419  
  2420  	for i := 0; i < listObj.Len(); i++ {
  2421  		v := listObj.Index(i)
  2422  
  2423  		item := LabelSelectorRequirement{t: o.t}
  2424  		err := item.Unpack(v)
  2425  		if err != nil {
  2426  			return fmt.Errorf("at index %d: %v", i, err)
  2427  		}
  2428  		items = append(items, metav1.LabelSelectorRequirement(item.Value))
  2429  	}
  2430  
  2431  	listObj.Freeze()
  2432  	o.List = listObj
  2433  	o.Value = items
  2434  
  2435  	return nil
  2436  }
  2437  
  2438  type ObjectSelector struct {
  2439  	*starlark.Dict
  2440  	Value      v1alpha1.ObjectSelector
  2441  	isUnpacked bool
  2442  	t          *starlark.Thread // instantiation thread for computing abspath
  2443  }
  2444  
  2445  func (p Plugin) objectSelector(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  2446  	var aPIVersionRegexp starlark.Value
  2447  	var kindRegexp starlark.Value
  2448  	var nameRegexp starlark.Value
  2449  	var namespaceRegexp starlark.Value
  2450  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  2451  		"api_version_regexp?", &aPIVersionRegexp,
  2452  		"kind_regexp?", &kindRegexp,
  2453  		"name_regexp?", &nameRegexp,
  2454  		"namespace_regexp?", &namespaceRegexp,
  2455  	)
  2456  	if err != nil {
  2457  		return nil, err
  2458  	}
  2459  
  2460  	dict := starlark.NewDict(4)
  2461  
  2462  	if aPIVersionRegexp != nil {
  2463  		err := dict.SetKey(starlark.String("api_version_regexp"), aPIVersionRegexp)
  2464  		if err != nil {
  2465  			return nil, err
  2466  		}
  2467  	}
  2468  	if kindRegexp != nil {
  2469  		err := dict.SetKey(starlark.String("kind_regexp"), kindRegexp)
  2470  		if err != nil {
  2471  			return nil, err
  2472  		}
  2473  	}
  2474  	if nameRegexp != nil {
  2475  		err := dict.SetKey(starlark.String("name_regexp"), nameRegexp)
  2476  		if err != nil {
  2477  			return nil, err
  2478  		}
  2479  	}
  2480  	if namespaceRegexp != nil {
  2481  		err := dict.SetKey(starlark.String("namespace_regexp"), namespaceRegexp)
  2482  		if err != nil {
  2483  			return nil, err
  2484  		}
  2485  	}
  2486  	var obj *ObjectSelector = &ObjectSelector{t: t}
  2487  	err = obj.Unpack(dict)
  2488  	if err != nil {
  2489  		return nil, err
  2490  	}
  2491  	return obj, nil
  2492  }
  2493  
  2494  func (o *ObjectSelector) Unpack(v starlark.Value) error {
  2495  	obj := v1alpha1.ObjectSelector{}
  2496  
  2497  	starlarkObj, ok := v.(*ObjectSelector)
  2498  	if ok {
  2499  		*o = *starlarkObj
  2500  		return nil
  2501  	}
  2502  
  2503  	mapObj, ok := v.(*starlark.Dict)
  2504  	if !ok {
  2505  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  2506  	}
  2507  
  2508  	for _, item := range mapObj.Items() {
  2509  		keyV, val := item[0], item[1]
  2510  		key, ok := starlark.AsString(keyV)
  2511  		if !ok {
  2512  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  2513  		}
  2514  
  2515  		if key == "api_version_regexp" {
  2516  			v, ok := starlark.AsString(val)
  2517  			if !ok {
  2518  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  2519  			}
  2520  			obj.APIVersionRegexp = string(v)
  2521  			continue
  2522  		}
  2523  		if key == "kind_regexp" {
  2524  			v, ok := starlark.AsString(val)
  2525  			if !ok {
  2526  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  2527  			}
  2528  			obj.KindRegexp = string(v)
  2529  			continue
  2530  		}
  2531  		if key == "name_regexp" {
  2532  			v, ok := starlark.AsString(val)
  2533  			if !ok {
  2534  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  2535  			}
  2536  			obj.NameRegexp = string(v)
  2537  			continue
  2538  		}
  2539  		if key == "namespace_regexp" {
  2540  			v, ok := starlark.AsString(val)
  2541  			if !ok {
  2542  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  2543  			}
  2544  			obj.NamespaceRegexp = string(v)
  2545  			continue
  2546  		}
  2547  		return fmt.Errorf("Unexpected attribute name: %s", key)
  2548  	}
  2549  
  2550  	mapObj.Freeze()
  2551  	o.Dict = mapObj
  2552  	o.Value = obj
  2553  	o.isUnpacked = true
  2554  
  2555  	return nil
  2556  }
  2557  
  2558  type ObjectSelectorList struct {
  2559  	*starlark.List
  2560  	Value []v1alpha1.ObjectSelector
  2561  	t     *starlark.Thread
  2562  }
  2563  
  2564  func (o *ObjectSelectorList) Unpack(v starlark.Value) error {
  2565  	items := []v1alpha1.ObjectSelector{}
  2566  
  2567  	listObj, ok := v.(*starlark.List)
  2568  	if !ok {
  2569  		return fmt.Errorf("expected list, actual: %v", v.Type())
  2570  	}
  2571  
  2572  	for i := 0; i < listObj.Len(); i++ {
  2573  		v := listObj.Index(i)
  2574  
  2575  		item := ObjectSelector{t: o.t}
  2576  		err := item.Unpack(v)
  2577  		if err != nil {
  2578  			return fmt.Errorf("at index %d: %v", i, err)
  2579  		}
  2580  		items = append(items, v1alpha1.ObjectSelector(item.Value))
  2581  	}
  2582  
  2583  	listObj.Freeze()
  2584  	o.List = listObj
  2585  	o.Value = items
  2586  
  2587  	return nil
  2588  }
  2589  
  2590  type PodLogStreamTemplateSpec struct {
  2591  	*starlark.Dict
  2592  	Value      v1alpha1.PodLogStreamTemplateSpec
  2593  	isUnpacked bool
  2594  	t          *starlark.Thread // instantiation thread for computing abspath
  2595  }
  2596  
  2597  func (p Plugin) podLogStreamTemplateSpec(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  2598  	var sinceTime starlark.Value
  2599  	var onlyContainers starlark.Value
  2600  	var ignoreContainers starlark.Value
  2601  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  2602  		"since_time?", &sinceTime,
  2603  		"only_containers?", &onlyContainers,
  2604  		"ignore_containers?", &ignoreContainers,
  2605  	)
  2606  	if err != nil {
  2607  		return nil, err
  2608  	}
  2609  
  2610  	dict := starlark.NewDict(3)
  2611  
  2612  	if sinceTime != nil {
  2613  		err := dict.SetKey(starlark.String("since_time"), sinceTime)
  2614  		if err != nil {
  2615  			return nil, err
  2616  		}
  2617  	}
  2618  	if onlyContainers != nil {
  2619  		err := dict.SetKey(starlark.String("only_containers"), onlyContainers)
  2620  		if err != nil {
  2621  			return nil, err
  2622  		}
  2623  	}
  2624  	if ignoreContainers != nil {
  2625  		err := dict.SetKey(starlark.String("ignore_containers"), ignoreContainers)
  2626  		if err != nil {
  2627  			return nil, err
  2628  		}
  2629  	}
  2630  	var obj *PodLogStreamTemplateSpec = &PodLogStreamTemplateSpec{t: t}
  2631  	err = obj.Unpack(dict)
  2632  	if err != nil {
  2633  		return nil, err
  2634  	}
  2635  	return obj, nil
  2636  }
  2637  
  2638  func (o *PodLogStreamTemplateSpec) Unpack(v starlark.Value) error {
  2639  	obj := v1alpha1.PodLogStreamTemplateSpec{}
  2640  
  2641  	starlarkObj, ok := v.(*PodLogStreamTemplateSpec)
  2642  	if ok {
  2643  		*o = *starlarkObj
  2644  		return nil
  2645  	}
  2646  
  2647  	mapObj, ok := v.(*starlark.Dict)
  2648  	if !ok {
  2649  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  2650  	}
  2651  
  2652  	for _, item := range mapObj.Items() {
  2653  		keyV, val := item[0], item[1]
  2654  		key, ok := starlark.AsString(keyV)
  2655  		if !ok {
  2656  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  2657  		}
  2658  
  2659  		if key == "only_containers" {
  2660  			var v value.StringList
  2661  			err := v.Unpack(val)
  2662  			if err != nil {
  2663  				return fmt.Errorf("unpacking %s: %v", key, err)
  2664  			}
  2665  			obj.OnlyContainers = v
  2666  			continue
  2667  		}
  2668  		if key == "ignore_containers" {
  2669  			var v value.StringList
  2670  			err := v.Unpack(val)
  2671  			if err != nil {
  2672  				return fmt.Errorf("unpacking %s: %v", key, err)
  2673  			}
  2674  			obj.IgnoreContainers = v
  2675  			continue
  2676  		}
  2677  		return fmt.Errorf("Unexpected attribute name: %s", key)
  2678  	}
  2679  
  2680  	mapObj.Freeze()
  2681  	o.Dict = mapObj
  2682  	o.Value = obj
  2683  	o.isUnpacked = true
  2684  
  2685  	return nil
  2686  }
  2687  
  2688  type PodLogStreamTemplateSpecList struct {
  2689  	*starlark.List
  2690  	Value []v1alpha1.PodLogStreamTemplateSpec
  2691  	t     *starlark.Thread
  2692  }
  2693  
  2694  func (o *PodLogStreamTemplateSpecList) Unpack(v starlark.Value) error {
  2695  	items := []v1alpha1.PodLogStreamTemplateSpec{}
  2696  
  2697  	listObj, ok := v.(*starlark.List)
  2698  	if !ok {
  2699  		return fmt.Errorf("expected list, actual: %v", v.Type())
  2700  	}
  2701  
  2702  	for i := 0; i < listObj.Len(); i++ {
  2703  		v := listObj.Index(i)
  2704  
  2705  		item := PodLogStreamTemplateSpec{t: o.t}
  2706  		err := item.Unpack(v)
  2707  		if err != nil {
  2708  			return fmt.Errorf("at index %d: %v", i, err)
  2709  		}
  2710  		items = append(items, v1alpha1.PodLogStreamTemplateSpec(item.Value))
  2711  	}
  2712  
  2713  	listObj.Freeze()
  2714  	o.List = listObj
  2715  	o.Value = items
  2716  
  2717  	return nil
  2718  }
  2719  
  2720  type PortForwardTemplateSpec struct {
  2721  	*starlark.Dict
  2722  	Value      v1alpha1.PortForwardTemplateSpec
  2723  	isUnpacked bool
  2724  	t          *starlark.Thread // instantiation thread for computing abspath
  2725  }
  2726  
  2727  func (p Plugin) portForwardTemplateSpec(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  2728  	var forwards starlark.Value
  2729  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  2730  		"forwards?", &forwards,
  2731  	)
  2732  	if err != nil {
  2733  		return nil, err
  2734  	}
  2735  
  2736  	dict := starlark.NewDict(1)
  2737  
  2738  	if forwards != nil {
  2739  		err := dict.SetKey(starlark.String("forwards"), forwards)
  2740  		if err != nil {
  2741  			return nil, err
  2742  		}
  2743  	}
  2744  	var obj *PortForwardTemplateSpec = &PortForwardTemplateSpec{t: t}
  2745  	err = obj.Unpack(dict)
  2746  	if err != nil {
  2747  		return nil, err
  2748  	}
  2749  	return obj, nil
  2750  }
  2751  
  2752  func (o *PortForwardTemplateSpec) Unpack(v starlark.Value) error {
  2753  	obj := v1alpha1.PortForwardTemplateSpec{}
  2754  
  2755  	starlarkObj, ok := v.(*PortForwardTemplateSpec)
  2756  	if ok {
  2757  		*o = *starlarkObj
  2758  		return nil
  2759  	}
  2760  
  2761  	mapObj, ok := v.(*starlark.Dict)
  2762  	if !ok {
  2763  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  2764  	}
  2765  
  2766  	for _, item := range mapObj.Items() {
  2767  		keyV, val := item[0], item[1]
  2768  		key, ok := starlark.AsString(keyV)
  2769  		if !ok {
  2770  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  2771  		}
  2772  
  2773  		if key == "forwards" {
  2774  			v := ForwardList{t: o.t}
  2775  			err := v.Unpack(val)
  2776  			if err != nil {
  2777  				return fmt.Errorf("unpacking %s: %v", key, err)
  2778  			}
  2779  			obj.Forwards = v.Value
  2780  			continue
  2781  		}
  2782  		return fmt.Errorf("Unexpected attribute name: %s", key)
  2783  	}
  2784  
  2785  	mapObj.Freeze()
  2786  	o.Dict = mapObj
  2787  	o.Value = obj
  2788  	o.isUnpacked = true
  2789  
  2790  	return nil
  2791  }
  2792  
  2793  type PortForwardTemplateSpecList struct {
  2794  	*starlark.List
  2795  	Value []v1alpha1.PortForwardTemplateSpec
  2796  	t     *starlark.Thread
  2797  }
  2798  
  2799  func (o *PortForwardTemplateSpecList) Unpack(v starlark.Value) error {
  2800  	items := []v1alpha1.PortForwardTemplateSpec{}
  2801  
  2802  	listObj, ok := v.(*starlark.List)
  2803  	if !ok {
  2804  		return fmt.Errorf("expected list, actual: %v", v.Type())
  2805  	}
  2806  
  2807  	for i := 0; i < listObj.Len(); i++ {
  2808  		v := listObj.Index(i)
  2809  
  2810  		item := PortForwardTemplateSpec{t: o.t}
  2811  		err := item.Unpack(v)
  2812  		if err != nil {
  2813  			return fmt.Errorf("at index %d: %v", i, err)
  2814  		}
  2815  		items = append(items, v1alpha1.PortForwardTemplateSpec(item.Value))
  2816  	}
  2817  
  2818  	listObj.Freeze()
  2819  	o.List = listObj
  2820  	o.Value = items
  2821  
  2822  	return nil
  2823  }
  2824  
  2825  type Probe struct {
  2826  	*starlark.Dict
  2827  	Value      v1alpha1.Probe
  2828  	isUnpacked bool
  2829  	t          *starlark.Thread // instantiation thread for computing abspath
  2830  }
  2831  
  2832  func (p Plugin) probe(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  2833  	var handler starlark.Value
  2834  	var initialDelaySeconds starlark.Value
  2835  	var timeoutSeconds starlark.Value
  2836  	var periodSeconds starlark.Value
  2837  	var successThreshold starlark.Value
  2838  	var failureThreshold starlark.Value
  2839  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  2840  		"handler?", &handler,
  2841  		"initial_delay_seconds?", &initialDelaySeconds,
  2842  		"timeout_seconds?", &timeoutSeconds,
  2843  		"period_seconds?", &periodSeconds,
  2844  		"success_threshold?", &successThreshold,
  2845  		"failure_threshold?", &failureThreshold,
  2846  	)
  2847  	if err != nil {
  2848  		return nil, err
  2849  	}
  2850  
  2851  	dict := starlark.NewDict(6)
  2852  
  2853  	if handler != nil {
  2854  		err := dict.SetKey(starlark.String("handler"), handler)
  2855  		if err != nil {
  2856  			return nil, err
  2857  		}
  2858  	}
  2859  	if initialDelaySeconds != nil {
  2860  		err := dict.SetKey(starlark.String("initial_delay_seconds"), initialDelaySeconds)
  2861  		if err != nil {
  2862  			return nil, err
  2863  		}
  2864  	}
  2865  	if timeoutSeconds != nil {
  2866  		err := dict.SetKey(starlark.String("timeout_seconds"), timeoutSeconds)
  2867  		if err != nil {
  2868  			return nil, err
  2869  		}
  2870  	}
  2871  	if periodSeconds != nil {
  2872  		err := dict.SetKey(starlark.String("period_seconds"), periodSeconds)
  2873  		if err != nil {
  2874  			return nil, err
  2875  		}
  2876  	}
  2877  	if successThreshold != nil {
  2878  		err := dict.SetKey(starlark.String("success_threshold"), successThreshold)
  2879  		if err != nil {
  2880  			return nil, err
  2881  		}
  2882  	}
  2883  	if failureThreshold != nil {
  2884  		err := dict.SetKey(starlark.String("failure_threshold"), failureThreshold)
  2885  		if err != nil {
  2886  			return nil, err
  2887  		}
  2888  	}
  2889  	var obj *Probe = &Probe{t: t}
  2890  	err = obj.Unpack(dict)
  2891  	if err != nil {
  2892  		return nil, err
  2893  	}
  2894  	return obj, nil
  2895  }
  2896  
  2897  func (o *Probe) Unpack(v starlark.Value) error {
  2898  	obj := v1alpha1.Probe{}
  2899  
  2900  	starlarkObj, ok := v.(*Probe)
  2901  	if ok {
  2902  		*o = *starlarkObj
  2903  		return nil
  2904  	}
  2905  
  2906  	mapObj, ok := v.(*starlark.Dict)
  2907  	if !ok {
  2908  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  2909  	}
  2910  
  2911  	for _, item := range mapObj.Items() {
  2912  		keyV, val := item[0], item[1]
  2913  		key, ok := starlark.AsString(keyV)
  2914  		if !ok {
  2915  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  2916  		}
  2917  
  2918  		if key == "exec" {
  2919  			v := ExecAction{t: o.t}
  2920  			err := v.Unpack(val)
  2921  			if err != nil {
  2922  				return fmt.Errorf("unpacking %s: %v", key, err)
  2923  			}
  2924  			obj.Exec = (*v1alpha1.ExecAction)(&v.Value)
  2925  			continue
  2926  		}
  2927  		if key == "http_get" {
  2928  			v := HTTPGetAction{t: o.t}
  2929  			err := v.Unpack(val)
  2930  			if err != nil {
  2931  				return fmt.Errorf("unpacking %s: %v", key, err)
  2932  			}
  2933  			obj.HTTPGet = (*v1alpha1.HTTPGetAction)(&v.Value)
  2934  			continue
  2935  		}
  2936  		if key == "tcp_socket" {
  2937  			v := TCPSocketAction{t: o.t}
  2938  			err := v.Unpack(val)
  2939  			if err != nil {
  2940  				return fmt.Errorf("unpacking %s: %v", key, err)
  2941  			}
  2942  			obj.TCPSocket = (*v1alpha1.TCPSocketAction)(&v.Value)
  2943  			continue
  2944  		}
  2945  		if key == "initial_delay_seconds" {
  2946  			v, err := starlark.AsInt32(val)
  2947  			if err != nil {
  2948  				return fmt.Errorf("Expected int, got: %v", err)
  2949  			}
  2950  			obj.InitialDelaySeconds = int32(v)
  2951  			continue
  2952  		}
  2953  		if key == "timeout_seconds" {
  2954  			v, err := starlark.AsInt32(val)
  2955  			if err != nil {
  2956  				return fmt.Errorf("Expected int, got: %v", err)
  2957  			}
  2958  			obj.TimeoutSeconds = int32(v)
  2959  			continue
  2960  		}
  2961  		if key == "period_seconds" {
  2962  			v, err := starlark.AsInt32(val)
  2963  			if err != nil {
  2964  				return fmt.Errorf("Expected int, got: %v", err)
  2965  			}
  2966  			obj.PeriodSeconds = int32(v)
  2967  			continue
  2968  		}
  2969  		if key == "success_threshold" {
  2970  			v, err := starlark.AsInt32(val)
  2971  			if err != nil {
  2972  				return fmt.Errorf("Expected int, got: %v", err)
  2973  			}
  2974  			obj.SuccessThreshold = int32(v)
  2975  			continue
  2976  		}
  2977  		if key == "failure_threshold" {
  2978  			v, err := starlark.AsInt32(val)
  2979  			if err != nil {
  2980  				return fmt.Errorf("Expected int, got: %v", err)
  2981  			}
  2982  			obj.FailureThreshold = int32(v)
  2983  			continue
  2984  		}
  2985  		return fmt.Errorf("Unexpected attribute name: %s", key)
  2986  	}
  2987  
  2988  	mapObj.Freeze()
  2989  	o.Dict = mapObj
  2990  	o.Value = obj
  2991  	o.isUnpacked = true
  2992  
  2993  	return nil
  2994  }
  2995  
  2996  type ProbeList struct {
  2997  	*starlark.List
  2998  	Value []v1alpha1.Probe
  2999  	t     *starlark.Thread
  3000  }
  3001  
  3002  func (o *ProbeList) Unpack(v starlark.Value) error {
  3003  	items := []v1alpha1.Probe{}
  3004  
  3005  	listObj, ok := v.(*starlark.List)
  3006  	if !ok {
  3007  		return fmt.Errorf("expected list, actual: %v", v.Type())
  3008  	}
  3009  
  3010  	for i := 0; i < listObj.Len(); i++ {
  3011  		v := listObj.Index(i)
  3012  
  3013  		item := Probe{t: o.t}
  3014  		err := item.Unpack(v)
  3015  		if err != nil {
  3016  			return fmt.Errorf("at index %d: %v", i, err)
  3017  		}
  3018  		items = append(items, v1alpha1.Probe(item.Value))
  3019  	}
  3020  
  3021  	listObj.Freeze()
  3022  	o.List = listObj
  3023  	o.Value = items
  3024  
  3025  	return nil
  3026  }
  3027  
  3028  type RestartOnSpec struct {
  3029  	*starlark.Dict
  3030  	Value      v1alpha1.RestartOnSpec
  3031  	isUnpacked bool
  3032  	t          *starlark.Thread // instantiation thread for computing abspath
  3033  }
  3034  
  3035  func (p Plugin) restartOnSpec(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  3036  	var fileWatches starlark.Value
  3037  	var uiButtons starlark.Value
  3038  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  3039  		"file_watches?", &fileWatches,
  3040  		"ui_buttons?", &uiButtons,
  3041  	)
  3042  	if err != nil {
  3043  		return nil, err
  3044  	}
  3045  
  3046  	dict := starlark.NewDict(2)
  3047  
  3048  	if fileWatches != nil {
  3049  		err := dict.SetKey(starlark.String("file_watches"), fileWatches)
  3050  		if err != nil {
  3051  			return nil, err
  3052  		}
  3053  	}
  3054  	if uiButtons != nil {
  3055  		err := dict.SetKey(starlark.String("ui_buttons"), uiButtons)
  3056  		if err != nil {
  3057  			return nil, err
  3058  		}
  3059  	}
  3060  	var obj *RestartOnSpec = &RestartOnSpec{t: t}
  3061  	err = obj.Unpack(dict)
  3062  	if err != nil {
  3063  		return nil, err
  3064  	}
  3065  	return obj, nil
  3066  }
  3067  
  3068  func (o *RestartOnSpec) Unpack(v starlark.Value) error {
  3069  	obj := v1alpha1.RestartOnSpec{}
  3070  
  3071  	starlarkObj, ok := v.(*RestartOnSpec)
  3072  	if ok {
  3073  		*o = *starlarkObj
  3074  		return nil
  3075  	}
  3076  
  3077  	mapObj, ok := v.(*starlark.Dict)
  3078  	if !ok {
  3079  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  3080  	}
  3081  
  3082  	for _, item := range mapObj.Items() {
  3083  		keyV, val := item[0], item[1]
  3084  		key, ok := starlark.AsString(keyV)
  3085  		if !ok {
  3086  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  3087  		}
  3088  
  3089  		if key == "file_watches" {
  3090  			var v value.StringList
  3091  			err := v.Unpack(val)
  3092  			if err != nil {
  3093  				return fmt.Errorf("unpacking %s: %v", key, err)
  3094  			}
  3095  			obj.FileWatches = v
  3096  			continue
  3097  		}
  3098  		if key == "ui_buttons" {
  3099  			var v value.StringList
  3100  			err := v.Unpack(val)
  3101  			if err != nil {
  3102  				return fmt.Errorf("unpacking %s: %v", key, err)
  3103  			}
  3104  			obj.UIButtons = v
  3105  			continue
  3106  		}
  3107  		return fmt.Errorf("Unexpected attribute name: %s", key)
  3108  	}
  3109  
  3110  	mapObj.Freeze()
  3111  	o.Dict = mapObj
  3112  	o.Value = obj
  3113  	o.isUnpacked = true
  3114  
  3115  	return nil
  3116  }
  3117  
  3118  type RestartOnSpecList struct {
  3119  	*starlark.List
  3120  	Value []v1alpha1.RestartOnSpec
  3121  	t     *starlark.Thread
  3122  }
  3123  
  3124  func (o *RestartOnSpecList) Unpack(v starlark.Value) error {
  3125  	items := []v1alpha1.RestartOnSpec{}
  3126  
  3127  	listObj, ok := v.(*starlark.List)
  3128  	if !ok {
  3129  		return fmt.Errorf("expected list, actual: %v", v.Type())
  3130  	}
  3131  
  3132  	for i := 0; i < listObj.Len(); i++ {
  3133  		v := listObj.Index(i)
  3134  
  3135  		item := RestartOnSpec{t: o.t}
  3136  		err := item.Unpack(v)
  3137  		if err != nil {
  3138  			return fmt.Errorf("at index %d: %v", i, err)
  3139  		}
  3140  		items = append(items, v1alpha1.RestartOnSpec(item.Value))
  3141  	}
  3142  
  3143  	listObj.Freeze()
  3144  	o.List = listObj
  3145  	o.Value = items
  3146  
  3147  	return nil
  3148  }
  3149  
  3150  type StartOnSpec struct {
  3151  	*starlark.Dict
  3152  	Value      v1alpha1.StartOnSpec
  3153  	isUnpacked bool
  3154  	t          *starlark.Thread // instantiation thread for computing abspath
  3155  }
  3156  
  3157  func (p Plugin) startOnSpec(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  3158  	var startAfter starlark.Value
  3159  	var uiButtons starlark.Value
  3160  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  3161  		"start_after?", &startAfter,
  3162  		"ui_buttons?", &uiButtons,
  3163  	)
  3164  	if err != nil {
  3165  		return nil, err
  3166  	}
  3167  
  3168  	dict := starlark.NewDict(2)
  3169  
  3170  	if startAfter != nil {
  3171  		err := dict.SetKey(starlark.String("start_after"), startAfter)
  3172  		if err != nil {
  3173  			return nil, err
  3174  		}
  3175  	}
  3176  	if uiButtons != nil {
  3177  		err := dict.SetKey(starlark.String("ui_buttons"), uiButtons)
  3178  		if err != nil {
  3179  			return nil, err
  3180  		}
  3181  	}
  3182  	var obj *StartOnSpec = &StartOnSpec{t: t}
  3183  	err = obj.Unpack(dict)
  3184  	if err != nil {
  3185  		return nil, err
  3186  	}
  3187  	return obj, nil
  3188  }
  3189  
  3190  func (o *StartOnSpec) Unpack(v starlark.Value) error {
  3191  	obj := v1alpha1.StartOnSpec{}
  3192  
  3193  	starlarkObj, ok := v.(*StartOnSpec)
  3194  	if ok {
  3195  		*o = *starlarkObj
  3196  		return nil
  3197  	}
  3198  
  3199  	mapObj, ok := v.(*starlark.Dict)
  3200  	if !ok {
  3201  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  3202  	}
  3203  
  3204  	for _, item := range mapObj.Items() {
  3205  		keyV, val := item[0], item[1]
  3206  		key, ok := starlark.AsString(keyV)
  3207  		if !ok {
  3208  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  3209  		}
  3210  
  3211  		if key == "ui_buttons" {
  3212  			var v value.StringList
  3213  			err := v.Unpack(val)
  3214  			if err != nil {
  3215  				return fmt.Errorf("unpacking %s: %v", key, err)
  3216  			}
  3217  			obj.UIButtons = v
  3218  			continue
  3219  		}
  3220  		return fmt.Errorf("Unexpected attribute name: %s", key)
  3221  	}
  3222  
  3223  	mapObj.Freeze()
  3224  	o.Dict = mapObj
  3225  	o.Value = obj
  3226  	o.isUnpacked = true
  3227  
  3228  	return nil
  3229  }
  3230  
  3231  type StartOnSpecList struct {
  3232  	*starlark.List
  3233  	Value []v1alpha1.StartOnSpec
  3234  	t     *starlark.Thread
  3235  }
  3236  
  3237  func (o *StartOnSpecList) Unpack(v starlark.Value) error {
  3238  	items := []v1alpha1.StartOnSpec{}
  3239  
  3240  	listObj, ok := v.(*starlark.List)
  3241  	if !ok {
  3242  		return fmt.Errorf("expected list, actual: %v", v.Type())
  3243  	}
  3244  
  3245  	for i := 0; i < listObj.Len(); i++ {
  3246  		v := listObj.Index(i)
  3247  
  3248  		item := StartOnSpec{t: o.t}
  3249  		err := item.Unpack(v)
  3250  		if err != nil {
  3251  			return fmt.Errorf("at index %d: %v", i, err)
  3252  		}
  3253  		items = append(items, v1alpha1.StartOnSpec(item.Value))
  3254  	}
  3255  
  3256  	listObj.Freeze()
  3257  	o.List = listObj
  3258  	o.Value = items
  3259  
  3260  	return nil
  3261  }
  3262  
  3263  type TCPSocketAction struct {
  3264  	*starlark.Dict
  3265  	Value      v1alpha1.TCPSocketAction
  3266  	isUnpacked bool
  3267  	t          *starlark.Thread // instantiation thread for computing abspath
  3268  }
  3269  
  3270  func (p Plugin) tCPSocketAction(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  3271  	var port starlark.Value
  3272  	var host starlark.Value
  3273  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  3274  		"port?", &port,
  3275  		"host?", &host,
  3276  	)
  3277  	if err != nil {
  3278  		return nil, err
  3279  	}
  3280  
  3281  	dict := starlark.NewDict(2)
  3282  
  3283  	if port != nil {
  3284  		err := dict.SetKey(starlark.String("port"), port)
  3285  		if err != nil {
  3286  			return nil, err
  3287  		}
  3288  	}
  3289  	if host != nil {
  3290  		err := dict.SetKey(starlark.String("host"), host)
  3291  		if err != nil {
  3292  			return nil, err
  3293  		}
  3294  	}
  3295  	var obj *TCPSocketAction = &TCPSocketAction{t: t}
  3296  	err = obj.Unpack(dict)
  3297  	if err != nil {
  3298  		return nil, err
  3299  	}
  3300  	return obj, nil
  3301  }
  3302  
  3303  func (o *TCPSocketAction) Unpack(v starlark.Value) error {
  3304  	obj := v1alpha1.TCPSocketAction{}
  3305  
  3306  	starlarkObj, ok := v.(*TCPSocketAction)
  3307  	if ok {
  3308  		*o = *starlarkObj
  3309  		return nil
  3310  	}
  3311  
  3312  	mapObj, ok := v.(*starlark.Dict)
  3313  	if !ok {
  3314  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  3315  	}
  3316  
  3317  	for _, item := range mapObj.Items() {
  3318  		keyV, val := item[0], item[1]
  3319  		key, ok := starlark.AsString(keyV)
  3320  		if !ok {
  3321  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  3322  		}
  3323  
  3324  		if key == "port" {
  3325  			v, err := starlark.AsInt32(val)
  3326  			if err != nil {
  3327  				return fmt.Errorf("Expected int, got: %v", err)
  3328  			}
  3329  			obj.Port = int32(v)
  3330  			continue
  3331  		}
  3332  		if key == "host" {
  3333  			v, ok := starlark.AsString(val)
  3334  			if !ok {
  3335  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  3336  			}
  3337  			obj.Host = string(v)
  3338  			continue
  3339  		}
  3340  		return fmt.Errorf("Unexpected attribute name: %s", key)
  3341  	}
  3342  
  3343  	mapObj.Freeze()
  3344  	o.Dict = mapObj
  3345  	o.Value = obj
  3346  	o.isUnpacked = true
  3347  
  3348  	return nil
  3349  }
  3350  
  3351  type TCPSocketActionList struct {
  3352  	*starlark.List
  3353  	Value []v1alpha1.TCPSocketAction
  3354  	t     *starlark.Thread
  3355  }
  3356  
  3357  func (o *TCPSocketActionList) Unpack(v starlark.Value) error {
  3358  	items := []v1alpha1.TCPSocketAction{}
  3359  
  3360  	listObj, ok := v.(*starlark.List)
  3361  	if !ok {
  3362  		return fmt.Errorf("expected list, actual: %v", v.Type())
  3363  	}
  3364  
  3365  	for i := 0; i < listObj.Len(); i++ {
  3366  		v := listObj.Index(i)
  3367  
  3368  		item := TCPSocketAction{t: o.t}
  3369  		err := item.Unpack(v)
  3370  		if err != nil {
  3371  			return fmt.Errorf("at index %d: %v", i, err)
  3372  		}
  3373  		items = append(items, v1alpha1.TCPSocketAction(item.Value))
  3374  	}
  3375  
  3376  	listObj.Freeze()
  3377  	o.List = listObj
  3378  	o.Value = items
  3379  
  3380  	return nil
  3381  }
  3382  
  3383  type UIBoolInputSpec struct {
  3384  	*starlark.Dict
  3385  	Value      v1alpha1.UIBoolInputSpec
  3386  	isUnpacked bool
  3387  	t          *starlark.Thread // instantiation thread for computing abspath
  3388  }
  3389  
  3390  func (p Plugin) uIBoolInputSpec(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  3391  	var defaultValue starlark.Value
  3392  	var trueString starlark.Value
  3393  	var falseString starlark.Value
  3394  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  3395  		"default_value?", &defaultValue,
  3396  		"true_string?", &trueString,
  3397  		"false_string?", &falseString,
  3398  	)
  3399  	if err != nil {
  3400  		return nil, err
  3401  	}
  3402  
  3403  	dict := starlark.NewDict(3)
  3404  
  3405  	if defaultValue != nil {
  3406  		err := dict.SetKey(starlark.String("default_value"), defaultValue)
  3407  		if err != nil {
  3408  			return nil, err
  3409  		}
  3410  	}
  3411  	if trueString != nil {
  3412  		err := dict.SetKey(starlark.String("true_string"), trueString)
  3413  		if err != nil {
  3414  			return nil, err
  3415  		}
  3416  	}
  3417  	if falseString != nil {
  3418  		err := dict.SetKey(starlark.String("false_string"), falseString)
  3419  		if err != nil {
  3420  			return nil, err
  3421  		}
  3422  	}
  3423  	var obj *UIBoolInputSpec = &UIBoolInputSpec{t: t}
  3424  	err = obj.Unpack(dict)
  3425  	if err != nil {
  3426  		return nil, err
  3427  	}
  3428  	return obj, nil
  3429  }
  3430  
  3431  func (o *UIBoolInputSpec) Unpack(v starlark.Value) error {
  3432  	obj := v1alpha1.UIBoolInputSpec{}
  3433  
  3434  	starlarkObj, ok := v.(*UIBoolInputSpec)
  3435  	if ok {
  3436  		*o = *starlarkObj
  3437  		return nil
  3438  	}
  3439  
  3440  	mapObj, ok := v.(*starlark.Dict)
  3441  	if !ok {
  3442  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  3443  	}
  3444  
  3445  	for _, item := range mapObj.Items() {
  3446  		keyV, val := item[0], item[1]
  3447  		key, ok := starlark.AsString(keyV)
  3448  		if !ok {
  3449  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  3450  		}
  3451  
  3452  		if key == "default_value" {
  3453  			v, ok := val.(starlark.Bool)
  3454  			if !ok {
  3455  				return fmt.Errorf("Expected bool, got: %v", val.Type())
  3456  			}
  3457  			obj.DefaultValue = bool(v)
  3458  			continue
  3459  		}
  3460  		if key == "true_string" {
  3461  			v, ok := starlark.AsString(val)
  3462  			if !ok {
  3463  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  3464  			}
  3465  			obj.TrueString = (*string)(&v)
  3466  			continue
  3467  		}
  3468  		if key == "false_string" {
  3469  			v, ok := starlark.AsString(val)
  3470  			if !ok {
  3471  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  3472  			}
  3473  			obj.FalseString = (*string)(&v)
  3474  			continue
  3475  		}
  3476  		return fmt.Errorf("Unexpected attribute name: %s", key)
  3477  	}
  3478  
  3479  	mapObj.Freeze()
  3480  	o.Dict = mapObj
  3481  	o.Value = obj
  3482  	o.isUnpacked = true
  3483  
  3484  	return nil
  3485  }
  3486  
  3487  type UIBoolInputSpecList struct {
  3488  	*starlark.List
  3489  	Value []v1alpha1.UIBoolInputSpec
  3490  	t     *starlark.Thread
  3491  }
  3492  
  3493  func (o *UIBoolInputSpecList) Unpack(v starlark.Value) error {
  3494  	items := []v1alpha1.UIBoolInputSpec{}
  3495  
  3496  	listObj, ok := v.(*starlark.List)
  3497  	if !ok {
  3498  		return fmt.Errorf("expected list, actual: %v", v.Type())
  3499  	}
  3500  
  3501  	for i := 0; i < listObj.Len(); i++ {
  3502  		v := listObj.Index(i)
  3503  
  3504  		item := UIBoolInputSpec{t: o.t}
  3505  		err := item.Unpack(v)
  3506  		if err != nil {
  3507  			return fmt.Errorf("at index %d: %v", i, err)
  3508  		}
  3509  		items = append(items, v1alpha1.UIBoolInputSpec(item.Value))
  3510  	}
  3511  
  3512  	listObj.Freeze()
  3513  	o.List = listObj
  3514  	o.Value = items
  3515  
  3516  	return nil
  3517  }
  3518  
  3519  type UIChoiceInputSpec struct {
  3520  	*starlark.Dict
  3521  	Value      v1alpha1.UIChoiceInputSpec
  3522  	isUnpacked bool
  3523  	t          *starlark.Thread // instantiation thread for computing abspath
  3524  }
  3525  
  3526  func (p Plugin) uIChoiceInputSpec(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  3527  	var choices starlark.Value
  3528  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  3529  		"choices?", &choices,
  3530  	)
  3531  	if err != nil {
  3532  		return nil, err
  3533  	}
  3534  
  3535  	dict := starlark.NewDict(1)
  3536  
  3537  	if choices != nil {
  3538  		err := dict.SetKey(starlark.String("choices"), choices)
  3539  		if err != nil {
  3540  			return nil, err
  3541  		}
  3542  	}
  3543  	var obj *UIChoiceInputSpec = &UIChoiceInputSpec{t: t}
  3544  	err = obj.Unpack(dict)
  3545  	if err != nil {
  3546  		return nil, err
  3547  	}
  3548  	return obj, nil
  3549  }
  3550  
  3551  func (o *UIChoiceInputSpec) Unpack(v starlark.Value) error {
  3552  	obj := v1alpha1.UIChoiceInputSpec{}
  3553  
  3554  	starlarkObj, ok := v.(*UIChoiceInputSpec)
  3555  	if ok {
  3556  		*o = *starlarkObj
  3557  		return nil
  3558  	}
  3559  
  3560  	mapObj, ok := v.(*starlark.Dict)
  3561  	if !ok {
  3562  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  3563  	}
  3564  
  3565  	for _, item := range mapObj.Items() {
  3566  		keyV, val := item[0], item[1]
  3567  		key, ok := starlark.AsString(keyV)
  3568  		if !ok {
  3569  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  3570  		}
  3571  
  3572  		if key == "choices" {
  3573  			var v value.StringList
  3574  			err := v.Unpack(val)
  3575  			if err != nil {
  3576  				return fmt.Errorf("unpacking %s: %v", key, err)
  3577  			}
  3578  			obj.Choices = v
  3579  			continue
  3580  		}
  3581  		return fmt.Errorf("Unexpected attribute name: %s", key)
  3582  	}
  3583  
  3584  	mapObj.Freeze()
  3585  	o.Dict = mapObj
  3586  	o.Value = obj
  3587  	o.isUnpacked = true
  3588  
  3589  	return nil
  3590  }
  3591  
  3592  type UIChoiceInputSpecList struct {
  3593  	*starlark.List
  3594  	Value []v1alpha1.UIChoiceInputSpec
  3595  	t     *starlark.Thread
  3596  }
  3597  
  3598  func (o *UIChoiceInputSpecList) Unpack(v starlark.Value) error {
  3599  	items := []v1alpha1.UIChoiceInputSpec{}
  3600  
  3601  	listObj, ok := v.(*starlark.List)
  3602  	if !ok {
  3603  		return fmt.Errorf("expected list, actual: %v", v.Type())
  3604  	}
  3605  
  3606  	for i := 0; i < listObj.Len(); i++ {
  3607  		v := listObj.Index(i)
  3608  
  3609  		item := UIChoiceInputSpec{t: o.t}
  3610  		err := item.Unpack(v)
  3611  		if err != nil {
  3612  			return fmt.Errorf("at index %d: %v", i, err)
  3613  		}
  3614  		items = append(items, v1alpha1.UIChoiceInputSpec(item.Value))
  3615  	}
  3616  
  3617  	listObj.Freeze()
  3618  	o.List = listObj
  3619  	o.Value = items
  3620  
  3621  	return nil
  3622  }
  3623  
  3624  type UIComponentLocation struct {
  3625  	*starlark.Dict
  3626  	Value      v1alpha1.UIComponentLocation
  3627  	isUnpacked bool
  3628  	t          *starlark.Thread // instantiation thread for computing abspath
  3629  }
  3630  
  3631  func (p Plugin) uIComponentLocation(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  3632  	var componentID starlark.Value
  3633  	var componentType starlark.Value
  3634  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  3635  		"component_id?", &componentID,
  3636  		"component_type?", &componentType,
  3637  	)
  3638  	if err != nil {
  3639  		return nil, err
  3640  	}
  3641  
  3642  	dict := starlark.NewDict(2)
  3643  
  3644  	if componentID != nil {
  3645  		err := dict.SetKey(starlark.String("component_id"), componentID)
  3646  		if err != nil {
  3647  			return nil, err
  3648  		}
  3649  	}
  3650  	if componentType != nil {
  3651  		err := dict.SetKey(starlark.String("component_type"), componentType)
  3652  		if err != nil {
  3653  			return nil, err
  3654  		}
  3655  	}
  3656  	var obj *UIComponentLocation = &UIComponentLocation{t: t}
  3657  	err = obj.Unpack(dict)
  3658  	if err != nil {
  3659  		return nil, err
  3660  	}
  3661  	return obj, nil
  3662  }
  3663  
  3664  func (o *UIComponentLocation) Unpack(v starlark.Value) error {
  3665  	obj := v1alpha1.UIComponentLocation{}
  3666  
  3667  	starlarkObj, ok := v.(*UIComponentLocation)
  3668  	if ok {
  3669  		*o = *starlarkObj
  3670  		return nil
  3671  	}
  3672  
  3673  	mapObj, ok := v.(*starlark.Dict)
  3674  	if !ok {
  3675  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  3676  	}
  3677  
  3678  	for _, item := range mapObj.Items() {
  3679  		keyV, val := item[0], item[1]
  3680  		key, ok := starlark.AsString(keyV)
  3681  		if !ok {
  3682  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  3683  		}
  3684  
  3685  		if key == "component_id" {
  3686  			v, ok := starlark.AsString(val)
  3687  			if !ok {
  3688  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  3689  			}
  3690  			obj.ComponentID = string(v)
  3691  			continue
  3692  		}
  3693  		if key == "component_type" {
  3694  			v, ok := starlark.AsString(val)
  3695  			if !ok {
  3696  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  3697  			}
  3698  			obj.ComponentType = v1alpha1.ComponentType(v)
  3699  			continue
  3700  		}
  3701  		return fmt.Errorf("Unexpected attribute name: %s", key)
  3702  	}
  3703  
  3704  	mapObj.Freeze()
  3705  	o.Dict = mapObj
  3706  	o.Value = obj
  3707  	o.isUnpacked = true
  3708  
  3709  	return nil
  3710  }
  3711  
  3712  type UIComponentLocationList struct {
  3713  	*starlark.List
  3714  	Value []v1alpha1.UIComponentLocation
  3715  	t     *starlark.Thread
  3716  }
  3717  
  3718  func (o *UIComponentLocationList) Unpack(v starlark.Value) error {
  3719  	items := []v1alpha1.UIComponentLocation{}
  3720  
  3721  	listObj, ok := v.(*starlark.List)
  3722  	if !ok {
  3723  		return fmt.Errorf("expected list, actual: %v", v.Type())
  3724  	}
  3725  
  3726  	for i := 0; i < listObj.Len(); i++ {
  3727  		v := listObj.Index(i)
  3728  
  3729  		item := UIComponentLocation{t: o.t}
  3730  		err := item.Unpack(v)
  3731  		if err != nil {
  3732  			return fmt.Errorf("at index %d: %v", i, err)
  3733  		}
  3734  		items = append(items, v1alpha1.UIComponentLocation(item.Value))
  3735  	}
  3736  
  3737  	listObj.Freeze()
  3738  	o.List = listObj
  3739  	o.Value = items
  3740  
  3741  	return nil
  3742  }
  3743  
  3744  type UIHiddenInputSpec struct {
  3745  	*starlark.Dict
  3746  	Value      v1alpha1.UIHiddenInputSpec
  3747  	isUnpacked bool
  3748  	t          *starlark.Thread // instantiation thread for computing abspath
  3749  }
  3750  
  3751  func (p Plugin) uIHiddenInputSpec(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  3752  	var value starlark.Value
  3753  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  3754  		"value?", &value,
  3755  	)
  3756  	if err != nil {
  3757  		return nil, err
  3758  	}
  3759  
  3760  	dict := starlark.NewDict(1)
  3761  
  3762  	if value != nil {
  3763  		err := dict.SetKey(starlark.String("value"), value)
  3764  		if err != nil {
  3765  			return nil, err
  3766  		}
  3767  	}
  3768  	var obj *UIHiddenInputSpec = &UIHiddenInputSpec{t: t}
  3769  	err = obj.Unpack(dict)
  3770  	if err != nil {
  3771  		return nil, err
  3772  	}
  3773  	return obj, nil
  3774  }
  3775  
  3776  func (o *UIHiddenInputSpec) Unpack(v starlark.Value) error {
  3777  	obj := v1alpha1.UIHiddenInputSpec{}
  3778  
  3779  	starlarkObj, ok := v.(*UIHiddenInputSpec)
  3780  	if ok {
  3781  		*o = *starlarkObj
  3782  		return nil
  3783  	}
  3784  
  3785  	mapObj, ok := v.(*starlark.Dict)
  3786  	if !ok {
  3787  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  3788  	}
  3789  
  3790  	for _, item := range mapObj.Items() {
  3791  		keyV, val := item[0], item[1]
  3792  		key, ok := starlark.AsString(keyV)
  3793  		if !ok {
  3794  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  3795  		}
  3796  
  3797  		if key == "value" {
  3798  			v, ok := starlark.AsString(val)
  3799  			if !ok {
  3800  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  3801  			}
  3802  			obj.Value = string(v)
  3803  			continue
  3804  		}
  3805  		return fmt.Errorf("Unexpected attribute name: %s", key)
  3806  	}
  3807  
  3808  	mapObj.Freeze()
  3809  	o.Dict = mapObj
  3810  	o.Value = obj
  3811  	o.isUnpacked = true
  3812  
  3813  	return nil
  3814  }
  3815  
  3816  type UIHiddenInputSpecList struct {
  3817  	*starlark.List
  3818  	Value []v1alpha1.UIHiddenInputSpec
  3819  	t     *starlark.Thread
  3820  }
  3821  
  3822  func (o *UIHiddenInputSpecList) Unpack(v starlark.Value) error {
  3823  	items := []v1alpha1.UIHiddenInputSpec{}
  3824  
  3825  	listObj, ok := v.(*starlark.List)
  3826  	if !ok {
  3827  		return fmt.Errorf("expected list, actual: %v", v.Type())
  3828  	}
  3829  
  3830  	for i := 0; i < listObj.Len(); i++ {
  3831  		v := listObj.Index(i)
  3832  
  3833  		item := UIHiddenInputSpec{t: o.t}
  3834  		err := item.Unpack(v)
  3835  		if err != nil {
  3836  			return fmt.Errorf("at index %d: %v", i, err)
  3837  		}
  3838  		items = append(items, v1alpha1.UIHiddenInputSpec(item.Value))
  3839  	}
  3840  
  3841  	listObj.Freeze()
  3842  	o.List = listObj
  3843  	o.Value = items
  3844  
  3845  	return nil
  3846  }
  3847  
  3848  type UIInputSpec struct {
  3849  	*starlark.Dict
  3850  	Value      v1alpha1.UIInputSpec
  3851  	isUnpacked bool
  3852  	t          *starlark.Thread // instantiation thread for computing abspath
  3853  }
  3854  
  3855  func (p Plugin) uIInputSpec(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  3856  	var name starlark.Value
  3857  	var label starlark.Value
  3858  	var text starlark.Value
  3859  	var bool starlark.Value
  3860  	var hidden starlark.Value
  3861  	var choice starlark.Value
  3862  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  3863  		"name?", &name,
  3864  		"label?", &label,
  3865  		"text?", &text,
  3866  		"bool?", &bool,
  3867  		"hidden?", &hidden,
  3868  		"choice?", &choice,
  3869  	)
  3870  	if err != nil {
  3871  		return nil, err
  3872  	}
  3873  
  3874  	dict := starlark.NewDict(6)
  3875  
  3876  	if name != nil {
  3877  		err := dict.SetKey(starlark.String("name"), name)
  3878  		if err != nil {
  3879  			return nil, err
  3880  		}
  3881  	}
  3882  	if label != nil {
  3883  		err := dict.SetKey(starlark.String("label"), label)
  3884  		if err != nil {
  3885  			return nil, err
  3886  		}
  3887  	}
  3888  	if text != nil {
  3889  		err := dict.SetKey(starlark.String("text"), text)
  3890  		if err != nil {
  3891  			return nil, err
  3892  		}
  3893  	}
  3894  	if bool != nil {
  3895  		err := dict.SetKey(starlark.String("bool"), bool)
  3896  		if err != nil {
  3897  			return nil, err
  3898  		}
  3899  	}
  3900  	if hidden != nil {
  3901  		err := dict.SetKey(starlark.String("hidden"), hidden)
  3902  		if err != nil {
  3903  			return nil, err
  3904  		}
  3905  	}
  3906  	if choice != nil {
  3907  		err := dict.SetKey(starlark.String("choice"), choice)
  3908  		if err != nil {
  3909  			return nil, err
  3910  		}
  3911  	}
  3912  	var obj *UIInputSpec = &UIInputSpec{t: t}
  3913  	err = obj.Unpack(dict)
  3914  	if err != nil {
  3915  		return nil, err
  3916  	}
  3917  	return obj, nil
  3918  }
  3919  
  3920  func (o *UIInputSpec) Unpack(v starlark.Value) error {
  3921  	obj := v1alpha1.UIInputSpec{}
  3922  
  3923  	starlarkObj, ok := v.(*UIInputSpec)
  3924  	if ok {
  3925  		*o = *starlarkObj
  3926  		return nil
  3927  	}
  3928  
  3929  	mapObj, ok := v.(*starlark.Dict)
  3930  	if !ok {
  3931  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  3932  	}
  3933  
  3934  	for _, item := range mapObj.Items() {
  3935  		keyV, val := item[0], item[1]
  3936  		key, ok := starlark.AsString(keyV)
  3937  		if !ok {
  3938  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  3939  		}
  3940  
  3941  		if key == "name" {
  3942  			v, ok := starlark.AsString(val)
  3943  			if !ok {
  3944  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  3945  			}
  3946  			obj.Name = string(v)
  3947  			continue
  3948  		}
  3949  		if key == "label" {
  3950  			v, ok := starlark.AsString(val)
  3951  			if !ok {
  3952  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  3953  			}
  3954  			obj.Label = string(v)
  3955  			continue
  3956  		}
  3957  		if key == "text" {
  3958  			v := UITextInputSpec{t: o.t}
  3959  			err := v.Unpack(val)
  3960  			if err != nil {
  3961  				return fmt.Errorf("unpacking %s: %v", key, err)
  3962  			}
  3963  			obj.Text = (*v1alpha1.UITextInputSpec)(&v.Value)
  3964  			continue
  3965  		}
  3966  		if key == "bool" {
  3967  			v := UIBoolInputSpec{t: o.t}
  3968  			err := v.Unpack(val)
  3969  			if err != nil {
  3970  				return fmt.Errorf("unpacking %s: %v", key, err)
  3971  			}
  3972  			obj.Bool = (*v1alpha1.UIBoolInputSpec)(&v.Value)
  3973  			continue
  3974  		}
  3975  		if key == "hidden" {
  3976  			v := UIHiddenInputSpec{t: o.t}
  3977  			err := v.Unpack(val)
  3978  			if err != nil {
  3979  				return fmt.Errorf("unpacking %s: %v", key, err)
  3980  			}
  3981  			obj.Hidden = (*v1alpha1.UIHiddenInputSpec)(&v.Value)
  3982  			continue
  3983  		}
  3984  		if key == "choice" {
  3985  			v := UIChoiceInputSpec{t: o.t}
  3986  			err := v.Unpack(val)
  3987  			if err != nil {
  3988  				return fmt.Errorf("unpacking %s: %v", key, err)
  3989  			}
  3990  			obj.Choice = (*v1alpha1.UIChoiceInputSpec)(&v.Value)
  3991  			continue
  3992  		}
  3993  		return fmt.Errorf("Unexpected attribute name: %s", key)
  3994  	}
  3995  
  3996  	mapObj.Freeze()
  3997  	o.Dict = mapObj
  3998  	o.Value = obj
  3999  	o.isUnpacked = true
  4000  
  4001  	return nil
  4002  }
  4003  
  4004  type UIInputSpecList struct {
  4005  	*starlark.List
  4006  	Value []v1alpha1.UIInputSpec
  4007  	t     *starlark.Thread
  4008  }
  4009  
  4010  func (o *UIInputSpecList) Unpack(v starlark.Value) error {
  4011  	items := []v1alpha1.UIInputSpec{}
  4012  
  4013  	listObj, ok := v.(*starlark.List)
  4014  	if !ok {
  4015  		return fmt.Errorf("expected list, actual: %v", v.Type())
  4016  	}
  4017  
  4018  	for i := 0; i < listObj.Len(); i++ {
  4019  		v := listObj.Index(i)
  4020  
  4021  		item := UIInputSpec{t: o.t}
  4022  		err := item.Unpack(v)
  4023  		if err != nil {
  4024  			return fmt.Errorf("at index %d: %v", i, err)
  4025  		}
  4026  		items = append(items, v1alpha1.UIInputSpec(item.Value))
  4027  	}
  4028  
  4029  	listObj.Freeze()
  4030  	o.List = listObj
  4031  	o.Value = items
  4032  
  4033  	return nil
  4034  }
  4035  
  4036  type UITextInputSpec struct {
  4037  	*starlark.Dict
  4038  	Value      v1alpha1.UITextInputSpec
  4039  	isUnpacked bool
  4040  	t          *starlark.Thread // instantiation thread for computing abspath
  4041  }
  4042  
  4043  func (p Plugin) uITextInputSpec(t *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
  4044  	var defaultValue starlark.Value
  4045  	var placeholder starlark.Value
  4046  	err := starkit.UnpackArgs(t, fn.Name(), args, kwargs,
  4047  		"default_value?", &defaultValue,
  4048  		"placeholder?", &placeholder,
  4049  	)
  4050  	if err != nil {
  4051  		return nil, err
  4052  	}
  4053  
  4054  	dict := starlark.NewDict(2)
  4055  
  4056  	if defaultValue != nil {
  4057  		err := dict.SetKey(starlark.String("default_value"), defaultValue)
  4058  		if err != nil {
  4059  			return nil, err
  4060  		}
  4061  	}
  4062  	if placeholder != nil {
  4063  		err := dict.SetKey(starlark.String("placeholder"), placeholder)
  4064  		if err != nil {
  4065  			return nil, err
  4066  		}
  4067  	}
  4068  	var obj *UITextInputSpec = &UITextInputSpec{t: t}
  4069  	err = obj.Unpack(dict)
  4070  	if err != nil {
  4071  		return nil, err
  4072  	}
  4073  	return obj, nil
  4074  }
  4075  
  4076  func (o *UITextInputSpec) Unpack(v starlark.Value) error {
  4077  	obj := v1alpha1.UITextInputSpec{}
  4078  
  4079  	starlarkObj, ok := v.(*UITextInputSpec)
  4080  	if ok {
  4081  		*o = *starlarkObj
  4082  		return nil
  4083  	}
  4084  
  4085  	mapObj, ok := v.(*starlark.Dict)
  4086  	if !ok {
  4087  		return fmt.Errorf("expected dict, actual: %v", v.Type())
  4088  	}
  4089  
  4090  	for _, item := range mapObj.Items() {
  4091  		keyV, val := item[0], item[1]
  4092  		key, ok := starlark.AsString(keyV)
  4093  		if !ok {
  4094  			return fmt.Errorf("key must be string. Got: %s", keyV.Type())
  4095  		}
  4096  
  4097  		if key == "default_value" {
  4098  			v, ok := starlark.AsString(val)
  4099  			if !ok {
  4100  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  4101  			}
  4102  			obj.DefaultValue = string(v)
  4103  			continue
  4104  		}
  4105  		if key == "placeholder" {
  4106  			v, ok := starlark.AsString(val)
  4107  			if !ok {
  4108  				return fmt.Errorf("Expected string, actual: %s", val.Type())
  4109  			}
  4110  			obj.Placeholder = string(v)
  4111  			continue
  4112  		}
  4113  		return fmt.Errorf("Unexpected attribute name: %s", key)
  4114  	}
  4115  
  4116  	mapObj.Freeze()
  4117  	o.Dict = mapObj
  4118  	o.Value = obj
  4119  	o.isUnpacked = true
  4120  
  4121  	return nil
  4122  }
  4123  
  4124  type UITextInputSpecList struct {
  4125  	*starlark.List
  4126  	Value []v1alpha1.UITextInputSpec
  4127  	t     *starlark.Thread
  4128  }
  4129  
  4130  func (o *UITextInputSpecList) Unpack(v starlark.Value) error {
  4131  	items := []v1alpha1.UITextInputSpec{}
  4132  
  4133  	listObj, ok := v.(*starlark.List)
  4134  	if !ok {
  4135  		return fmt.Errorf("expected list, actual: %v", v.Type())
  4136  	}
  4137  
  4138  	for i := 0; i < listObj.Len(); i++ {
  4139  		v := listObj.Index(i)
  4140  
  4141  		item := UITextInputSpec{t: o.t}
  4142  		err := item.Unpack(v)
  4143  		if err != nil {
  4144  			return fmt.Errorf("at index %d: %v", i, err)
  4145  		}
  4146  		items = append(items, v1alpha1.UITextInputSpec(item.Value))
  4147  	}
  4148  
  4149  	listObj.Freeze()
  4150  	o.List = listObj
  4151  	o.Value = items
  4152  
  4153  	return nil
  4154  }