add Provider interface generation
Signed-off-by: Muvaffak Onus <onus.muvaffak@gmail.com>
This commit is contained in:
parent
61fa1eff2a
commit
212d1ec090
Binary file not shown.
|
|
@ -57,12 +57,13 @@ func main() {
|
|||
var (
|
||||
app = kingpin.New(filepath.Base(os.Args[0]), "Generates Crossplane API type methods.").DefaultEnvars()
|
||||
|
||||
methodsets = app.Command("generate-methodsets", "Generate a Crossplane method sets.")
|
||||
headerFile = methodsets.Flag("header-file", "The contents of this file will be added to the top of all generated files.").ExistingFile()
|
||||
filenameManaged = methodsets.Flag("filename-managed", "The filename of generated managed resource files.").Default("zz_generated.managed.go").String()
|
||||
filenameClaim = methodsets.Flag("filename-claim", "The filename of generated resource claim files.").Default("zz_generated.claim.go").String()
|
||||
filenameClass = methodsets.Flag("filename-class", "The filename of generated resource class files.").Default("zz_generated.class.go").String()
|
||||
pattern = methodsets.Arg("packages", "Package(s) for which to generate methods, for example github.com/crossplaneio/crossplane/apis/...").String()
|
||||
methodsets = app.Command("generate-methodsets", "Generate a Crossplane method sets.")
|
||||
headerFile = methodsets.Flag("header-file", "The contents of this file will be added to the top of all generated files.").ExistingFile()
|
||||
filenameManaged = methodsets.Flag("filename-managed", "The filename of generated managed resource files.").Default("zz_generated.managed.go").String()
|
||||
filenameClaim = methodsets.Flag("filename-claim", "The filename of generated resource claim files.").Default("zz_generated.claim.go").String()
|
||||
filenameClass = methodsets.Flag("filename-class", "The filename of generated resource class files.").Default("zz_generated.class.go").String()
|
||||
filenameProvider = methodsets.Flag("filename-provider", "The filename of generated provider files.").Default("zz_generated.provider.go").String()
|
||||
pattern = methodsets.Arg("packages", "Package(s) for which to generate methods, for example github.com/crossplaneio/crossplane/apis/...").String()
|
||||
)
|
||||
kingpin.MustParse(app.Parse(os.Args[1:]))
|
||||
|
||||
|
|
@ -83,6 +84,7 @@ func main() {
|
|||
kingpin.FatalIfError(GenerateManaged(*filenameManaged, header, p), "cannot write managed resource method set for package %s", p.PkgPath)
|
||||
kingpin.FatalIfError(GenerateClaim(*filenameClaim, header, p), "cannot write resource claim method set for package %s", p.PkgPath)
|
||||
kingpin.FatalIfError(GenerateClass(*filenameClass, header, p), "cannot write resource class method set for package %s", p.PkgPath)
|
||||
kingpin.FatalIfError(GenerateProvider(*filenameProvider, header, p), "cannot write provider method set for package %s", p.PkgPath)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -175,3 +177,24 @@ func GenerateClass(filename, header string, p *packages.Package) error {
|
|||
|
||||
return errors.Wrap(err, "cannot write resource class methods")
|
||||
}
|
||||
|
||||
// GenerateProvider generates the resource.Provider method set.
|
||||
func GenerateProvider(filename, header string, p *packages.Package) error {
|
||||
receiver := "p"
|
||||
|
||||
methods := method.Set{
|
||||
"SetCredentialsSecretReference": method.NewSetCredentialsSecretReference(receiver, RuntimeImport),
|
||||
"GetCredentialsSecretReference": method.NewGetCredentialsSecretReference(receiver, RuntimeImport),
|
||||
}
|
||||
|
||||
err := generate.WriteMethods(p, methods, filepath.Join(filepath.Dir(p.GoFiles[0]), filename),
|
||||
generate.WithHeaders(header),
|
||||
generate.WithImportAliases(map[string]string{RuntimeImport: RuntimeAlias}),
|
||||
generate.WithMatcher(match.AllOf(
|
||||
match.Provider(),
|
||||
match.DoesNotHaveMarker(comments.In(p), DisableMarker, "false")),
|
||||
),
|
||||
)
|
||||
|
||||
return errors.Wrap(err, "cannot write provider methods")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ const (
|
|||
NameResourceStatus = "ResourceStatus"
|
||||
NameResourceClaimSpec = "ResourceClaimSpec"
|
||||
NameClassSpecTemplate = "ClassSpecTemplate"
|
||||
NameProviderSpec = "ProviderSpec"
|
||||
NameItems = "Items"
|
||||
)
|
||||
|
||||
|
|
@ -50,6 +51,7 @@ const (
|
|||
TypeSuffixResourceClaimSpec = "github.com/crossplaneio/crossplane-runtime/apis/core/v1alpha1.ResourceClaimSpec"
|
||||
TypeSuffixResourceClaimStatus = "github.com/crossplaneio/crossplane-runtime/apis/core/v1alpha1.ResourceClaimStatus"
|
||||
TypeSuffixClassSpecTemplate = "github.com/crossplaneio/crossplane-runtime/apis/core/v1alpha1.ClassSpecTemplate"
|
||||
TypeSuffixProviderSpec = "github.com/crossplaneio/crossplane-runtime/apis/core/v1alpha1.ProviderSpec"
|
||||
)
|
||||
|
||||
func matches(s *types.Struct, m Matcher) bool {
|
||||
|
|
@ -203,6 +205,12 @@ func IsClassSpecTemplate() Matcher {
|
|||
return IsTypeNamed(TypeSuffixClassSpecTemplate, NameClassSpecTemplate)
|
||||
}
|
||||
|
||||
// IsProviderSpec returns a Matcher that returns true if the supplied field
|
||||
// appears to be a Crossplane provider spec.
|
||||
func IsProviderSpec() Matcher {
|
||||
return IsTypeNamed(TypeSuffixProviderSpec, NameProviderSpec)
|
||||
}
|
||||
|
||||
// IsItems returns a Matcher that returns true if the supplied field appears to
|
||||
// be the Items of a Kubernetes list.
|
||||
func IsItems() Matcher {
|
||||
|
|
|
|||
|
|
@ -74,6 +74,20 @@ func Claim() Object {
|
|||
}
|
||||
}
|
||||
|
||||
// Provider returns an Object matcher that returns true if the supplied Object is a
|
||||
// Crossplane Provider.
|
||||
func Provider() Object {
|
||||
return func(o types.Object) bool {
|
||||
return fields.Has(o,
|
||||
fields.IsTypeMeta().And(fields.IsEmbedded()),
|
||||
fields.IsObjectMeta().And(fields.IsEmbedded()),
|
||||
fields.IsSpec().And(fields.HasFieldThat(
|
||||
fields.IsProviderSpec().And(fields.IsEmbedded()),
|
||||
)),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// HasMarker returns an Object matcher that returns true if the supplied Object
|
||||
// has a comment marker k with the value v. Comment markers are read from the
|
||||
// supplied Comments.
|
||||
|
|
|
|||
|
|
@ -279,3 +279,25 @@ func NewGetReclaimPolicy(receiver, runtime, field string) New {
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
// NewGetCredentialsSecretReference returns a NewMethod that writes a
|
||||
// GetCredentialsSecretReference method for the supplied Object to the supplied file.
|
||||
func NewGetCredentialsSecretReference(receiver, runtime string) New {
|
||||
return func(f *jen.File, o types.Object) {
|
||||
f.Commentf("GetCredentialsSecretReference of this %s.", o.Name())
|
||||
f.Func().Params(jen.Id(receiver).Op("*").Id(o.Name())).Id("GetCredentialsSecretReference").Params().Qual(runtime, "SecretKeySelector").Block(
|
||||
jen.Return(jen.Id(receiver).Dot(fields.NameSpec).Dot("CredentialsSecretRef")),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// NewSetCredentialsSecretReference returns a NewMethod that writes a
|
||||
// SetCredentialsSecretReference method for the supplied Object to the supplied file.
|
||||
func NewSetCredentialsSecretReference(receiver, runtime string) New {
|
||||
return func(f *jen.File, o types.Object) {
|
||||
f.Commentf("SetCredentialsSecretReference of this %s.", o.Name())
|
||||
f.Func().Params(jen.Id(receiver).Op("*").Id(o.Name())).Id("SetCredentialsSecretReference").Params(jen.Id("r").Qual(runtime, "SecretKeySelector")).Block(
|
||||
jen.Id(receiver).Dot(fields.NameSpec).Dot("CredentialsSecretRef").Op("=").Id("r"),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue