Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Schema-based python codegen #1160

Merged
merged 25 commits into from
Jun 26, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

- Fix prometheus-operator test to wait for the CRD to be ready before use (https://github.com/pulumi/pulumi-kubernetes/pull/1172)
- Set supported environment variables in SDK Provider classes (https://github.com/pulumi/pulumi-kubernetes/pull/1166)
- Python SDK updated to align with other Pulumi Python SDKs. (https://github.com/pulumi/pulumi-kubernetes/pull/1160)

## 2.3.1 (June 17, 2020)

Expand Down
78 changes: 25 additions & 53 deletions provider/cmd/pulumi-gen-kubernetes/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
dotnetgen "github.com/pulumi/pulumi/pkg/v2/codegen/dotnet"
gogen "github.com/pulumi/pulumi/pkg/v2/codegen/go"
nodejsgen "github.com/pulumi/pulumi/pkg/v2/codegen/nodejs"
pythongen "github.com/pulumi/pulumi/pkg/v2/codegen/python"
"github.com/pulumi/pulumi/pkg/v2/codegen/schema"
"github.com/pulumi/pulumi/sdk/v2/go/common/util/contract"
)
Expand Down Expand Up @@ -111,7 +112,7 @@ func main() {
writeNodeJSClient(pkg, outdir, templateDir)
case Python:
templateDir := path.Join(TemplateDir, "python-templates")
writePythonClient(data, outdir, templateDir)
writePythonClient(pkg, outdir, templateDir)
case DotNet:
templateDir := path.Join(TemplateDir, "dotnet-templates")
writeDotnetClient(pkg, data, outdir, templateDir)
Expand Down Expand Up @@ -173,67 +174,38 @@ func writeNodeJSClient(pkg *schema.Package, outdir, templateDir string) {
mustWriteFiles(outdir, files)
}

func writePythonClient(data map[string]interface{}, outdir, templateDir string) {
sdkDir := filepath.Join(outdir, "pulumi_kubernetes")

err := gen.PythonClient(data, templateDir,
func(initPy string) error {
return ioutil.WriteFile(filepath.Join(sdkDir, "__init__.py"), []byte(initPy), 0777)
},
func(group, initPy string) error {
destDir := filepath.Join(sdkDir, group)

err := os.MkdirAll(destDir, 0700)
if err != nil {
return err
}
return ioutil.WriteFile(filepath.Join(destDir, "__init__.py"), []byte(initPy), 0777)
},
func(crBytes string) error {
destDir := filepath.Join(sdkDir, "apiextensions")

err := os.MkdirAll(destDir, 0700)
if err != nil {
return err
}

return ioutil.WriteFile(filepath.Join(destDir, "CustomResource.py"), []byte(crBytes), 0777)
},
func(group, version, initPy string) error {
destDir := filepath.Join(sdkDir, group, version)

err := os.MkdirAll(destDir, 0700)
if err != nil {
return err
}

return ioutil.WriteFile(filepath.Join(destDir, "__init__.py"), []byte(initPy), 0777)
},
func(group, version, kind, kindPy string) error {
destDir := filepath.Join(sdkDir, group, version, fmt.Sprintf("%s.py", kind))
return ioutil.WriteFile(destDir, []byte(kindPy), 0777)
},
func(casingPy string) error {
destDir := filepath.Join(sdkDir, "tables.py")
return ioutil.WriteFile(destDir, []byte(casingPy), 0777)
},
func(yamlPy string) error {
destDir := filepath.Join(sdkDir, "yaml.py")
return ioutil.WriteFile(destDir, []byte(yamlPy), 0777)
})
func writePythonClient(pkg *schema.Package, outdir string, templateDir string) {
resources, err := pythongen.LanguageResources("pulumigen", pkg)
if err != nil {
panic(err)
}

err = CopyDir(filepath.Join(templateDir, "helm"), filepath.Join(sdkDir, "helm"))
if err != nil {
panic(err)
templateResources := gen.TemplateResources{}
for _, resource := range resources {
r := gen.TemplateResource{
Name: resource.Name,
Package: resource.Package,
Token: resource.Token,
}
templateResources.Resources = append(templateResources.Resources, r)
}
sort.Slice(templateResources.Resources, func(i, j int) bool {
return templateResources.Resources[i].Token < templateResources.Resources[j].Token
})

overlays := map[string][]byte{
"apiextensions/CustomResource.py": mustLoadFile(filepath.Join(templateDir, "apiextensions", "CustomResource.py")),
"helm/v2/helm.py": mustLoadFile(filepath.Join(templateDir, "helm", "v2", "helm.py")),
"helm/v3/helm.py": mustLoadFile(filepath.Join(templateDir, "helm", "v2", "helm.py")), // v3 support is currently identical to v2
"yaml.py": mustRenderTemplate(filepath.Join(templateDir, "yaml", "yaml.tmpl"), templateResources),
}

err = CopyFile(filepath.Join(templateDir, "README.md"), filepath.Join(sdkDir, "README.md"))
files, err := pythongen.GeneratePackage("pulumigen", pkg, overlays)
if err != nil {
panic(err)
}

mustWriteFiles(outdir, files)
}

func writeDotnetClient(pkg *schema.Package, data map[string]interface{}, outdir, templateDir string) {
Expand Down
4 changes: 2 additions & 2 deletions provider/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ require (
github.com/imdario/mergo v0.3.8
github.com/mitchellh/go-wordwrap v1.0.0
github.com/pkg/errors v0.9.1
github.com/pulumi/pulumi/pkg/v2 v2.4.1-0.20200622153820-282c95ee402d
github.com/pulumi/pulumi/sdk/v2 v2.3.0
github.com/pulumi/pulumi/pkg/v2 v2.5.1-0.20200626160536-3eacf8bf90c0
github.com/pulumi/pulumi/sdk/v2 v2.4.0
github.com/stretchr/testify v1.6.1
google.golang.org/grpc v1.28.0
k8s.io/api v0.18.0
Expand Down
8 changes: 4 additions & 4 deletions provider/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -450,11 +450,11 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/pulumi/pulumi/pkg/v2 v2.4.1-0.20200622153820-282c95ee402d h1:a7+mvsLerdMp/tz1MKYYsAKTtjWPGz9sNzD+UscQRuU=
github.com/pulumi/pulumi/pkg/v2 v2.4.1-0.20200622153820-282c95ee402d/go.mod h1:zfUm4/GH2dVRlHZ3Yeb9bRweCQM7icVBdplu6MUDRrQ=
github.com/pulumi/pulumi/pkg/v2 v2.5.1-0.20200626160536-3eacf8bf90c0 h1:TgfCBRjAOpkKBplKbdevj0Sj6uAI7imjC0xqai5DS9A=
github.com/pulumi/pulumi/pkg/v2 v2.5.1-0.20200626160536-3eacf8bf90c0/go.mod h1:zfUm4/GH2dVRlHZ3Yeb9bRweCQM7icVBdplu6MUDRrQ=
github.com/pulumi/pulumi/sdk/v2 v2.0.0/go.mod h1:W7k1UDYerc5o97mHnlHHp5iQZKEby+oQrQefWt+2RF4=
github.com/pulumi/pulumi/sdk/v2 v2.3.0 h1:uvRYCmoHILKlyyIbXa5CcLSKKt9n2s8j+GKTffpXQf4=
github.com/pulumi/pulumi/sdk/v2 v2.3.0/go.mod h1:cvivzHVRA5Xu3NSE/obmHzO3L693IJSd5QccQuBOMUE=
github.com/pulumi/pulumi/sdk/v2 v2.4.0 h1:1ef6JbCWG3RWCKNpeeFBezzI6HBdMPpdeZQAd+IGKvw=
github.com/pulumi/pulumi/sdk/v2 v2.4.0/go.mod h1:llk6tmXss8kJrt3vEXAkwiwgZOuINEFmKIfMveVIwO8=
github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M=
github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
Expand Down
14 changes: 0 additions & 14 deletions provider/pkg/gen/python-templates/README.md

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
import pulumi.runtime
from pulumi import ResourceOptions

from .. import tables, version
from .. import tables
from ..utilities import get_version


class CustomResource(pulumi.CustomResource):
Expand Down Expand Up @@ -53,7 +54,7 @@ def __init__(self, resource_name, api_version, kind, spec=None, metadata=None, o
__props__['spec'] = spec
__props__['metadata'] = metadata

opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(version=version.get_version()))
opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(version=get_version()))

super(CustomResource, self).__init__(
f"kubernetes:{api_version}:{kind}",
Expand Down Expand Up @@ -86,7 +87,7 @@ def get(resource_name, api_version, kind, id, opts=None):
return CustomResource(resource_name=resource_name, api_version=api_version, kind=kind, opts=opts)

def translate_output_property(self, prop: str) -> str:
return tables._CASING_FORWARD_TABLE.get(prop) or prop
return tables._CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop

def translate_input_property(self, prop: str) -> str:
return tables._CASING_BACKWARD_TABLE.get(prop) or prop
return tables._SNAKE_TO_CAMEL_CASE_TABLE.get(prop) or prop
13 changes: 0 additions & 13 deletions provider/pkg/gen/python-templates/casing.py.mustache

This file was deleted.

10 changes: 0 additions & 10 deletions provider/pkg/gen/python-templates/group__init__.py.mustache

This file was deleted.

9 changes: 0 additions & 9 deletions provider/pkg/gen/python-templates/helm/__init__.py

This file was deleted.

6 changes: 0 additions & 6 deletions provider/pkg/gen/python-templates/helm/v2/__init__.py

This file was deleted.

4 changes: 2 additions & 2 deletions provider/pkg/gen/python-templates/helm/v2/helm.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from typing import Any, Callable, List, Optional, TextIO, Tuple, Union

import pulumi.runtime
from ...version import get_version
from ...utilities import get_version
from pulumi_kubernetes.yaml import _parse_yaml_document


Expand Down Expand Up @@ -283,7 +283,7 @@ def _run_helm_cmd(all_config: Tuple[List[Union[str, bytes]], Any]) -> str:
def _is_helm_v3() -> bool:

cmd: List[str] = ['helm', 'version', '--short']

"""
Helm v2 returns version like this:
Client: v2.16.7+g5f2584f
Expand Down
6 changes: 0 additions & 6 deletions provider/pkg/gen/python-templates/helm/v3/__init__.py

This file was deleted.

132 changes: 0 additions & 132 deletions provider/pkg/gen/python-templates/kind.py.mustache

This file was deleted.

Loading