mirror of
https://github.com/mcuadros/ascode
synced 2024-11-22 17:02:03 +01:00
starlark/types: Provider, set_prefix
This commit is contained in:
parent
4225bbc35f
commit
19afe30fd2
@ -97,9 +97,20 @@ func MakeProvider(
|
|||||||
// Blocks defined by the provider schema, thus are nested resources,
|
// Blocks defined by the provider schema, thus are nested resources,
|
||||||
// containing other arguments and/or blocks.
|
// containing other arguments and/or blocks.
|
||||||
//
|
//
|
||||||
|
// methods:
|
||||||
|
// set_prefix(enable, prefix="")
|
||||||
|
// If enabled, all the resource names belonging to this provider
|
||||||
|
// are prefixed, with the given prefix or by default the alias name.
|
||||||
|
// params:
|
||||||
|
// enable bool
|
||||||
|
// if True enables the the prefix of resources.
|
||||||
|
// prefix string
|
||||||
|
// string to be used as prefix of the resources, if None, the
|
||||||
|
// provider name it's used as prefix.
|
||||||
type Provider struct {
|
type Provider struct {
|
||||||
provider *plugin.GRPCProvider
|
provider *plugin.GRPCProvider
|
||||||
meta discovery.PluginMeta
|
meta discovery.PluginMeta
|
||||||
|
prefix string
|
||||||
|
|
||||||
dataSources *ResourceCollectionGroup
|
dataSources *ResourceCollectionGroup
|
||||||
resources *ResourceCollectionGroup
|
resources *ResourceCollectionGroup
|
||||||
@ -190,6 +201,8 @@ func (p *Provider) Type() string {
|
|||||||
// Attr honors the starlark.Attr interface.
|
// Attr honors the starlark.Attr interface.
|
||||||
func (p *Provider) Attr(name string) (starlark.Value, error) {
|
func (p *Provider) Attr(name string) (starlark.Value, error) {
|
||||||
switch name {
|
switch name {
|
||||||
|
case "set_prefix":
|
||||||
|
return starlark.NewBuiltin("set_prefix", p.setPrefix), nil
|
||||||
case "__version__":
|
case "__version__":
|
||||||
return starlark.String(p.meta.Version), nil
|
return starlark.String(p.meta.Version), nil
|
||||||
case "data":
|
case "data":
|
||||||
@ -201,6 +214,28 @@ func (p *Provider) Attr(name string) (starlark.Value, error) {
|
|||||||
return p.Resource.Attr(name)
|
return p.Resource.Attr(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Provider) setPrefix(_ *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
|
||||||
|
|
||||||
|
var enable bool
|
||||||
|
var prefix string
|
||||||
|
err := starlark.UnpackArgs("set_prefix", args, kwargs, "enable", &enable, "prefix?", &prefix)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if enable == false {
|
||||||
|
p.prefix = ""
|
||||||
|
return starlark.Bool(enable), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
p.prefix = p.name
|
||||||
|
if prefix != "" {
|
||||||
|
p.prefix = prefix
|
||||||
|
}
|
||||||
|
|
||||||
|
return starlark.Bool(enable), nil
|
||||||
|
}
|
||||||
|
|
||||||
// AttrNames honors the starlark.HasAttrs interface.
|
// AttrNames honors the starlark.HasAttrs interface.
|
||||||
func (p *Provider) AttrNames() []string {
|
func (p *Provider) AttrNames() []string {
|
||||||
return append(p.Resource.AttrNames(), "data", "resource", "__version__")
|
return append(p.Resource.AttrNames(), "data", "resource", "__version__")
|
||||||
|
@ -286,8 +286,12 @@ func (r *Resource) Truth() starlark.Bool {
|
|||||||
// Freeze honors the starlark.Value interface.
|
// Freeze honors the starlark.Value interface.
|
||||||
func (r *Resource) Freeze() {}
|
func (r *Resource) Freeze() {}
|
||||||
|
|
||||||
// Name returns the resource name based on the hash.
|
// Name returns the resource name based.
|
||||||
func (r *Resource) Name() string {
|
func (r *Resource) Name() string {
|
||||||
|
if r.kind == ResourceKind && r.provider.prefix != "" {
|
||||||
|
return fmt.Sprintf("%s-%s", r.provider.prefix, r.name)
|
||||||
|
}
|
||||||
|
|
||||||
return r.name
|
return r.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
17
starlark/types/testdata/hcl.star
vendored
17
starlark/types/testdata/hcl.star
vendored
@ -51,4 +51,21 @@ assert.eq(hcl(google), "" +
|
|||||||
' bucket = "main-storage"\n' + \
|
' bucket = "main-storage"\n' + \
|
||||||
' member = "serviceAccount:${google_service_account.sa.email}"\n' + \
|
' member = "serviceAccount:${google_service_account.sa.email}"\n' + \
|
||||||
' role = "roles/storage.objectAdmin"\n' + \
|
' role = "roles/storage.objectAdmin"\n' + \
|
||||||
|
'}\n\n')
|
||||||
|
|
||||||
|
# hcl with prefixed provider
|
||||||
|
google = tf.provider("google", "3.16.0", "alias")
|
||||||
|
google.set_prefix(True)
|
||||||
|
|
||||||
|
sa = google.resource.service_account("sa")
|
||||||
|
sa.account_id = "service-account"
|
||||||
|
assert.eq(hcl(google), "" +
|
||||||
|
'provider "google" {\n' + \
|
||||||
|
' alias = "alias"\n' + \
|
||||||
|
' version = "3.16.0"\n' + \
|
||||||
|
'}\n' + \
|
||||||
|
'\n' + \
|
||||||
|
'resource "google_service_account" "alias-sa" {\n' + \
|
||||||
|
' provider = google.alias\n' + \
|
||||||
|
' account_id = "service-account"\n' + \
|
||||||
'}\n\n')
|
'}\n\n')
|
Loading…
Reference in New Issue
Block a user