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

Issue importing generated crd with python 3.11 #113

Closed
jaxxstorm opened this issue May 16, 2023 · 4 comments · Fixed by #143
Closed

Issue importing generated crd with python 3.11 #113

jaxxstorm opened this issue May 16, 2023 · 4 comments · Fixed by #143
Assignees
Labels
area/codegen Affects quality or correctness of generated code impact/usability Something that impacts users' ability to use the product easily and intuitively kind/bug Some behavior is incorrect or out of spec resolution/fixed This issue was fixed

Comments

@jaxxstorm
Copy link

What happened?

I have previously been able to get this to work, but on python 3.11 I get the following error:

Diagnostics:
  pulumi:pulumi:Stack (varnish_crd-dev):
    error: Program failed with an unhandled exception:
    Traceback (most recent call last):
      File "/Users/lbriggs/src/github/jaxxstorm/pulumi-examples/python/kubernetes/varnish_crd/__main__.py", line 5, in <module>
        import crds.python.pulumi_crds as varnish
      File "/Users/lbriggs/src/github/jaxxstorm/pulumi-examples/python/kubernetes/varnish_crd/crds/python/pulumi_crds/__init__.py", line 5, in <module>
        from . import _utilities
      File "/Users/lbriggs/src/github/jaxxstorm/pulumi-examples/python/kubernetes/varnish_crd/crds/python/pulumi_crds/_utilities.py", line 94, in <module>
        _version = _get_semver_version()
                   ^^^^^^^^^^^^^^^^^^^^^
      File "/Users/lbriggs/src/github/jaxxstorm/pulumi-examples/python/kubernetes/varnish_crd/crds/python/pulumi_crds/_utilities.py", line 73, in _get_semver_version
        pep440_version_string = pkg_resources.require(root_package)[0].version
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/lbriggs/src/github/jaxxstorm/pulumi-examples/python/kubernetes/varnish_crd/venv/lib/python3.11/site-packages/pkg_resources/__init__.py", line 966, in require
        needed = self.resolve(parse_requirements(requirements))
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/Users/lbriggs/src/github/jaxxstorm/pulumi-examples/python/kubernetes/varnish_crd/venv/lib/python3.11/site-packages/pkg_resources/__init__.py", line 827, in resolve
        dist = self._resolve_dist(
               ^^^^^^^^^^^^^^^^^^^
      File "/Users/lbriggs/src/github/jaxxstorm/pulumi-examples/python/kubernetes/varnish_crd/venv/lib/python3.11/site-packages/pkg_resources/__init__.py", line 868, in _resolve_dist
        raise DistributionNotFound(req, requirers)
    pkg_resources.DistributionNotFound: The 'crds' distribution was not found and is required by the application

Expected Behavior

I can provision a custom resource

Steps to reproduce

Download a CRD:

wget https://raw.githubusercontent.com/IBM/varnish-operator/main/varnish-operator/crds/varnishcluster.yaml

Generate the default types

crd2pulumi -p varnishcluster.yaml

Import and use:

import crds.python.pulumi_crds as varnish


varnish_cluster = varnish.caching.v1alpha1.VarnishCluster(
    "example",
    spec=varnish.caching.v1alpha1.VarnishClusterSpecArgs(
        vcl=varnish.caching.v1alpha1.VarnishClusterSpecVclArgs(
            config_map_name="example-vcl",
            entrypoint="entrypoint.vcl",
        ),
        backend=varnish.caching.v1alpha1.VarnishClusterSpecBackendArgs(
            port=8080,
        )
    )
)

Output of pulumi about

CLI
Version      3.67.0
Go Version   go1.20.4
Go Compiler  gc

Plugins
NAME        VERSION
kubernetes  3.27.1
python      3.11.3

Host
OS       darwin
Version  13.3.1
Arch     arm64

This project is written in python: executable='/opt/homebrew/bin/python3' version='3.11.3
'

Current Stack: lbrlabs58/varnish_crd/dev

Found no resources associated with dev

Found no pending operations associated with dev

Backend
Name           pulumi.com
URL            https://app.pulumi.com/lbrlabs58
User           jaxxstorm
Organizations  jaxxstorm, lbrlabs, demo

Dependencies:
NAME               VERSION
pip                23.1.2
pulumi-kubernetes  3.27.1
setuptools         67.7.2
wheel              0.40.0

Pulumi locates its logs in /var/folders/rk/2c715ngd14jc4c7d3659m7pm0000gn/T/ by default

Additional context

No response

Contributing

Vote on this issue by adding a 👍 reaction.
To contribute a fix for this issue, leave a comment (and link to your pull request, if you've opened one already).

@jaxxstorm jaxxstorm added kind/bug Some behavior is incorrect or out of spec needs-triage Needs attention from the triage team labels May 16, 2023
@t0yv0
Copy link
Member

t0yv0 commented May 16, 2023

Hi @jaxxstorm thanks for reporting the issue here. I took a quick look. It seems that _get_semver_version() makes certain assumptions about how the package is installed and it's coming from pulumi/pulumi SDK Python generator, it's optimized for providers and is not working quite as expected here. I'm testing on Python 3.9 but I think it applies to all versions.

I found that there is a workaround though. If you create a python Project pulumi new python then you can reference crd2pulumi generated code into the Pulumi project's venv like so:

./venv/bin/python -m pip install -e ../crds/python/pulumi_crds                                         

Then you can import this code as follows:

import pulumi_crds as varnish

varnish_cluster = varnish.caching.v1alpha1.VarnishCluster(
    "example",
    spec=varnish.caching.v1alpha1.VarnishClusterSpecArgs(
        service=None,
        vcl=varnish.caching.v1alpha1.VarnishClusterSpecVclArgs(
            config_map_name="example-vcl",
            entrypoint_file_name="entrypoint.vcl",
        ),
        backend=varnish.caching.v1alpha1.VarnishClusterSpecBackendArgs(
            port=8080,
            selector={}
        )
    )
)

I had to correct some arguments - I didn't get through all the errors unfortunately but it got me to the following:

    error: Could not automatically download and install resource plugin 'pulumi-resource-kubernetes' at version v0.0.0, install the plugin using `pulumi plugin install resource kubernetes v0.0.0`: error downloading provider kubernetes to file: failed to download plugin: kubernetes-0.0.0: 403 HTTP error fetching plugin from https://get.pulumi.com/releases/plugins/pulumi-resource-kubernetes-v0.0.0-darwin-amd64.tar.gz

@t0yv0 t0yv0 removed the needs-triage Needs attention from the triage team label May 16, 2023
@kpitzen kpitzen added impact/usability Something that impacts users' ability to use the product easily and intuitively area/codegen Affects quality or correctness of generated code labels May 16, 2023
@danmur
Copy link

danmur commented Mar 10, 2024

A workaround seems to be to give the generated package a version. Definitely seems like a bug though.

@cleverguy25
Copy link

Added to epic https://github.com/pulumi/home/issues/3431

@pulumi-bot
Copy link

This issue has been addressed in PR #143 and shipped in release v1.5.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/codegen Affects quality or correctness of generated code impact/usability Something that impacts users' ability to use the product easily and intuitively kind/bug Some behavior is incorrect or out of spec resolution/fixed This issue was fixed
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants