diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ebd4c00..0a02376 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -118,9 +118,10 @@ jobs: # dotnet nuget push ${{github.workspace}}/sdk/dotnet/bin/Debug/*.nupkg -s ${{ env.NUGET_FEED_URL }} -k ${{ env.NUGET_PUBLISH_KEY }} # echo "done publishing packages" - name: Publish SDKs + if: ${{ matrix.language }} != 'go' uses: pulumi/pulumi-package-publisher@v0.0.14 with: - sdk: all,!dotnet + sdk: ${{ matrix.language }} strategy: fail-fast: true matrix: diff --git a/examples/instance/go/go.mod b/examples/instance/go/go.mod index 510d944..3c35808 100644 --- a/examples/instance/go/go.mod +++ b/examples/instance/go/go.mod @@ -1,7 +1,91 @@ -module go +module github.com/genesiscloud/pulumi-genesiscloud/examples/instance/go go 1.20 +require github.com/pulumi/pulumi/sdk/v3 v3.108.1 + +require github.com/genesiscloud/pulumi-genesiscloud/sdk/go v0.0.1 + require ( - github.com/pulumi/pulumi/sdk/v3 v3.108.1 + dario.cat/mergo v1.0.0 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect + github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect + github.com/agext/levenshtein v1.2.3 // indirect + github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect + github.com/atotto/clipboard v0.1.4 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/charmbracelet/bubbles v0.16.1 // indirect + github.com/charmbracelet/bubbletea v0.24.2 // indirect + github.com/charmbracelet/lipgloss v0.7.1 // indirect + github.com/cheggaaa/pb v1.0.29 // indirect + github.com/cloudflare/circl v1.3.7 // indirect + github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/djherbis/times v1.5.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-git/go-billy/v5 v5.5.0 // indirect + github.com/go-git/go-git/v5 v5.11.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/glog v1.1.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/hcl/v2 v2.17.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-localereader v0.0.1 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect + github.com/muesli/cancelreader v0.2.2 // indirect + github.com/muesli/reflow v0.3.0 // indirect + github.com/muesli/termenv v0.15.2 // indirect + github.com/opentracing/basictracer-go v1.1.0 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pgavlin/fx v0.1.6 // indirect + github.com/pjbgf/sha1cd v0.3.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pkg/term v1.1.0 // indirect + github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect + github.com/pulumi/esc v0.6.2 // indirect + github.com/rivo/uniseg v0.4.4 // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect + github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 // indirect + github.com/sergi/go-diff v1.3.1 // indirect + github.com/skeema/knownhosts v1.2.1 // indirect + github.com/spf13/cobra v1.7.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/texttheater/golang-levenshtein v1.0.1 // indirect + github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 // indirect + github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect + github.com/uber/jaeger-lib v2.4.1+incompatible // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect + github.com/zclconf/go-cty v1.13.2 // indirect + go.uber.org/atomic v1.9.0 // indirect + golang.org/x/crypto v0.17.0 // indirect + golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect + golang.org/x/mod v0.14.0 // indirect + golang.org/x/net v0.19.0 // indirect + golang.org/x/sync v0.5.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/term v0.15.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/tools v0.15.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130 // indirect + google.golang.org/grpc v1.57.1 // indirect + google.golang.org/protobuf v1.31.0 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + lukechampine.com/frand v1.4.2 // indirect ) diff --git a/examples/instance/go/go.sum b/examples/instance/go/go.sum new file mode 100644 index 0000000..84fce6d --- /dev/null +++ b/examples/instance/go/go.sum @@ -0,0 +1,300 @@ +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= +github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= +github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= +github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= +github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/charmbracelet/bubbles v0.16.1 h1:6uzpAAaT9ZqKssntbvZMlksWHruQLNxg49H5WdeuYSY= +github.com/charmbracelet/bubbles v0.16.1/go.mod h1:2QCp9LFlEsBQMvIYERr7Ww2H2bA7xen1idUDIzm/+Xc= +github.com/charmbracelet/bubbletea v0.24.2 h1:uaQIKx9Ai6Gdh5zpTbGiWpytMU+CfsPp06RaW2cx/SY= +github.com/charmbracelet/bubbletea v0.24.2/go.mod h1:XdrNrV4J8GiyshTtx3DNuYkR1FDaJmO3l2nejekbsgg= +github.com/charmbracelet/lipgloss v0.7.1 h1:17WMwi7N1b1rVWOjMT+rCh7sQkvDU75B2hbZpc5Kc1E= +github.com/charmbracelet/lipgloss v0.7.1/go.mod h1:yG0k3giv8Qj8edTCbbg6AlQ5e8KNWpFujkNawKNhE2c= +github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= +github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= +github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= +github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= +github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY= +github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/djherbis/times v1.5.0 h1:79myA211VwPhFTqUk8xehWrsEO+zcIZj0zT8mXPVARU= +github.com/djherbis/times v1.5.0/go.mod h1:5q7FDLvbNg1L/KaBmPcWlVR9NmoKo3+ucqUA3ijQhA0= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= +github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= +github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= +github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= +github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/hcl/v2 v2.17.0 h1:z1XvSUyXd1HP10U4lrLg5e0JMVz6CPaJvAgxM0KNZVY= +github.com/hashicorp/hcl/v2 v2.17.0/go.mod h1:gJyW2PTShkJqQBKpAmPO3yxMxIuoXkOF2TpqXzrQyx4= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= +github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= +github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= +github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= +github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= +github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= +github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= +github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pgavlin/fx v0.1.6 h1:r9jEg69DhNoCd3Xh0+5mIbdbS3PqWrVWujkY76MFRTU= +github.com/pgavlin/fx v0.1.6/go.mod h1:KWZJ6fqBBSh8GxHYqwYCf3rYE7Gp2p0N8tJp8xv9u9M= +github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= +github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= +github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435cARxCW6q9gc0S/Yxz7Mkd38pOb0= +github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE= +github.com/pulumi/esc v0.6.2 h1:+z+l8cuwIauLSwXQS0uoI3rqB+YG4SzsZYtHfNoXBvw= +github.com/pulumi/esc v0.6.2/go.mod h1:jNnYNjzsOgVTjCp0LL24NsCk8ZJxq4IoLQdCT0X7l8k= +github.com/pulumi/pulumi/sdk/v3 v3.108.1 h1:5idjc3JmzToYVizRPbFyjJ5UU4AbExd04pcSP9AhPEc= +github.com/pulumi/pulumi/sdk/v3 v3.108.1/go.mod h1:5A6GHUwAJlRY1SSLZh84aDIbsBShcrfcmHzI50ecSBg= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= +github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= +github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 h1:TToq11gyfNlrMFZiYujSekIsPd9AmsA2Bj/iv+s4JHE= +github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ= +github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= +github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 h1:X9dsIWPuuEJlPX//UmRKophhOKCGXc46RVIGuttks68= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7/go.mod h1:UxoP3EypF8JfGEjAII8jx1q8rQyDnX8qdTCs/UQBVIE= +github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zclconf/go-cty v1.13.2 h1:4GvrUxe/QUDYuJKAav4EYqdM47/kZa672LwmXFmEKT0= +github.com/zclconf/go-cty v1.13.2/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= +golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130 h1:2FZP5XuJY9zQyGM5N0rtovnoXjiMUEIUMvw0m9wlpLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= +google.golang.org/grpc v1.57.1 h1:upNTNqv0ES+2ZOOqACwVtS3Il8M12/+Hz41RCPzAjQg= +google.golang.org/grpc v1.57.1/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +lukechampine.com/frand v1.4.2 h1:RzFIpOvkMXuPMBb9maa4ND4wjBn71E1Jpf8BzJHMaVw= +lukechampine.com/frand v1.4.2/go.mod h1:4S/TM2ZgrKejMcKMbeLjISpJMO+/eZ1zu3vYX9dtj3s= +pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= diff --git a/examples/instance/py/__main__.py b/examples/instance/py/__main__.py index 709b4f2..8391a4d 100644 --- a/examples/instance/py/__main__.py +++ b/examples/instance/py/__main__.py @@ -1,4 +1,85 @@ """A Python Pulumi program""" import pulumi -import pulumi_genesiscloud +import pulumi_genesiscloud as gc + +region = "ARC-IS-HAF-1" + +# const sshKey = new SSHKey("philip", { +# name: "philip", +# publicKey: +# "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG0EyNBL6fu1IPhWLvO6njP6/cEWYCMCv/uTBQgdSM7Q barista@roastery", +# }); + +ssh_key = gc.SSHKey( + "philip", + name="philip", + public_key="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG0EyNBL6fu1IPhWLvO6njP6/cEWYCMCv/uTBQgdSM7Q barista@roastery", +) + +floating_ip = gc.FloatingIp( + resource_name="my-pulumi-floating-ip", + name="my-pulumi-floating-ip", + description="My pulumi floating IP", + region=region, + version="ipv4", +) + + +allow_ssh = gc.SecurityGroup( + "allow-ssh", + name="allow-ssh", + description="Allow SSH", + region=region, + rules=[ + gc.SecurityGroupRuleArgs( + direction="ingress", + protocol="tcp", + port_range_min=22, + port_range_max=22, + ) + ], +) + +allow_http = gc.SecurityGroup( + "allow-http", + name="allow-http", + description="Allow HTTP", + region=region, + rules=[ + gc.SecurityGroupRuleArgs( + direction="ingress", + protocol="tcp", + port_range_min=80, + port_range_max=80, + ) + ], +) + +startup_script = """ +<=3.0.0,<4.0.0 +pulumi-genesiscloud>=0.0.1,<0.0.2 diff --git a/examples/instance/ts/index.ts b/examples/instance/ts/index.ts index 8faaf10..6eb3773 100644 --- a/examples/instance/ts/index.ts +++ b/examples/instance/ts/index.ts @@ -1,11 +1,9 @@ -import * as pulumi from "@pulumi/pulumi"; - import { SecurityGroup, SSHKey, Instance, FloatingIp, -} from "@pulumi/genesiscloud"; +} from "@genesiscloud/pulumi-genesiscloud"; const region = "ARC-IS-HAF-1"; @@ -15,9 +13,9 @@ const sshKey = new SSHKey("philip", { "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG0EyNBL6fu1IPhWLvO6njP6/cEWYCMCv/uTBQgdSM7Q barista@roastery", }); -const floatingIP = new FloatingIp("floating-ip", { - name: "floating-ip", - description: "floating-ip", +const floatingIP = new FloatingIp("my-pulumi-floating-ip", { + name: "my-pulumi-floating-ip", + description: "my-pulumi-floating-ip", region, version: "ipv4", }); @@ -75,5 +73,3 @@ const firstPulumiInstance = new Instance("first-pulumi-instance", { }, floatingIpId: floatingIP.id, }); - -// TODO: create output using the ssh as output to connect to the instance diff --git a/examples/instance/ts/package.json b/examples/instance/ts/package.json index 0228f7a..f85d647 100644 --- a/examples/instance/ts/package.json +++ b/examples/instance/ts/package.json @@ -5,6 +5,7 @@ "@types/node": "^18" }, "dependencies": { - "@pulumi/pulumi": "^3.0.0" + "@pulumi/pulumi": "^3.0.0", + "@genesiscloud/pulumi-genesiscloud": "^0.0.2" } } diff --git a/provider/cmd/pulumi-resource-genesiscloud/schema.json b/provider/cmd/pulumi-resource-genesiscloud/schema.json index 45b1c82..61580f6 100644 --- a/provider/cmd/pulumi-resource-genesiscloud/schema.json +++ b/provider/cmd/pulumi-resource-genesiscloud/schema.json @@ -1 +1 @@ -{"name":"genesiscloud","version":"0.0.1","description":"A Pulumi package for creating and managing genesiscloud cloud resources.","keywords":["pulumi","genesiscloud","category/cloud"],"homepage":"https://www.genesiscloud.com","license":"Apache-2.0","attribution":"This Pulumi package is based on the [`genesiscloud` Terraform Provider](https://github.com/genesiscloud/terraform-provider-genesiscloud).","repository":"https://github.com/genesiscloud/pulumi-genesiscloud","publisher":"Genesis Cloud","meta":{"moduleFormat":"(.*)(?:/[^/]*)"},"language":{"csharp":{"packageReferences":{"Pulumi":"3.*"},"namespaces":{"genesiscloud":"GenesisCloud"},"compatibility":"tfbridge20"},"go":{"importBasePath":"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud","generateResourceContainerTypes":true,"generateExtraInputTypes":true},"nodejs":{"packageDescription":"A Pulumi package for creating and managing genesiscloud cloud resources.","readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/genesiscloud/terraform-provider-genesiscloud)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-genesiscloud` repo](https://github.com/genesiscloud/pulumi-genesiscloud/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-genesiscloud` repo](https://github.com/genesiscloud/terraform-provider-genesiscloud/issues).","dependencies":{"@pulumi/pulumi":"^3.0.0"},"devDependencies":{"@types/node":"^10.0.0"},"compatibility":"tfbridge20","disableUnionOutputTypes":true},"python":{"requires":{"pulumi":"\u003e=3.0.0,\u003c4.0.0"},"readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/genesiscloud/terraform-provider-genesiscloud)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-genesiscloud` repo](https://github.com/genesiscloud/pulumi-genesiscloud/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-genesiscloud` repo](https://github.com/genesiscloud/terraform-provider-genesiscloud/issues).","compatibility":"tfbridge20","pyproject":{}}},"config":{"variables":{"endpoint":{"type":"string","description":"Genesis Cloud API endpoint. May also be provided via `GENESISCLOUD_ENDPOINT` environment variable. If neither is\nprovided, defaults to `https://api.genesiscloud.com/compute/v1`.\n"},"pollingInterval":{"type":"string","description":"The polling interval. - The string must be a positive [time duration](https://pkg.go.dev/time#ParseDuration), for\nexample \"10s\".\n"},"token":{"type":"string","description":"Genesis Cloud API token. May also be provided via `GENESISCLOUD_TOKEN` environment variable.\n","secret":true}}},"types":{"genesiscloud:index/FilesystemTimeouts:FilesystemTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/FloatingIpTimeouts:FloatingIpTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/ImagesFilter:ImagesFilter":{"properties":{"region":{"type":"string","description":"Filter by the region identifier.\n - The value must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"type":{"type":"string","description":"Filter by the kind of image.\n - The value must be one of: [\"base-os\" \"cloud-image\" \"preconfigured\" \"snapshot\"].\n"}},"type":"object","required":["type"]},"genesiscloud:index/ImagesImage:ImagesImage":{"properties":{"createdAt":{"type":"string","description":"The timestamp when this image was created in RFC 3339.\n"},"id":{"type":"string","description":"A unique number that can be used to identify and reference a specific image.\n"},"name":{"type":"string","description":"The display name that has been given to an image.\n"},"regions":{"type":"array","items":{"type":"string"},"description":"The list of regions in which this image can be used in.\n"},"slug":{"type":"string","description":"The image slug.\n"},"type":{"type":"string","description":"Describes the kind of image.\n"},"versions":{"type":"array","items":{"type":"string"},"description":"The list of versions if this is a cloud-image otherwise empty.\n"}},"type":"object","required":["createdAt","id","name","regions","slug","type","versions"],"language":{"nodejs":{"requiredInputs":[]}}},"genesiscloud:index/ImagesTimeouts:ImagesTimeouts":{"properties":{"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/InstanceMetadata:InstanceMetadata":{"properties":{"startupScript":{"type":"string"}},"type":"object"},"genesiscloud:index/InstanceTimeouts:InstanceTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/SSHKeyTimeouts:SSHKeyTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/SecurityGroupRule:SecurityGroupRule":{"properties":{"direction":{"type":"string","description":"The direction of the rule.\n - The value must be one of: [\"egress\" \"ingress\"].\n"},"portRangeMax":{"type":"integer","description":"The maximum port number of the rule.\n - The value must be between 1 and 65535.\n"},"portRangeMin":{"type":"integer","description":"The minimum port number of the rule.\n - The value must be between 1 and 65535.\n"},"protocol":{"type":"string","description":"The protocol of the rule.\n - The value must be one of: [\"all\" \"icmp\" \"tcp\" \"udp\"].\n"}},"type":"object","required":["direction","protocol"]},"genesiscloud:index/SecurityGroupTimeouts:SecurityGroupTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/SnapshotTimeouts:SnapshotTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/VolumeTimeouts:VolumeTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"}},"provider":{"description":"The provider type for the genesiscloud package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n","properties":{"endpoint":{"type":"string","description":"Genesis Cloud API endpoint. May also be provided via `GENESISCLOUD_ENDPOINT` environment variable. If neither is\nprovided, defaults to `https://api.genesiscloud.com/compute/v1`.\n"},"pollingInterval":{"type":"string","description":"The polling interval. - The string must be a positive [time duration](https://pkg.go.dev/time#ParseDuration), for\nexample \"10s\".\n"},"token":{"type":"string","description":"Genesis Cloud API token. May also be provided via `GENESISCLOUD_TOKEN` environment variable.\n","secret":true}},"inputProperties":{"endpoint":{"type":"string","description":"Genesis Cloud API endpoint. May also be provided via `GENESISCLOUD_ENDPOINT` environment variable. If neither is\nprovided, defaults to `https://api.genesiscloud.com/compute/v1`.\n"},"pollingInterval":{"type":"string","description":"The polling interval. - The string must be a positive [time duration](https://pkg.go.dev/time#ParseDuration), for\nexample \"10s\".\n"},"token":{"type":"string","description":"Genesis Cloud API token. May also be provided via `GENESISCLOUD_TOKEN` environment variable.\n","secret":true}}},"resources":{"genesiscloud:index/filesystem:Filesystem":{"description":"Filesystem resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst example = new genesiscloud.Filesystem(\"example\", {\n description: \"Example filesystem\",\n region: \"NORD-NO-KRS-1\",\n size: 50,\n type: \"vast\",\n});\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\nexample = genesiscloud.Filesystem(\"example\",\n description=\"Example filesystem\",\n region=\"NORD-NO-KRS-1\",\n size=50,\n type=\"vast\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new GenesisCloud.Filesystem(\"example\", new()\n {\n Description = \"Example filesystem\",\n Region = \"NORD-NO-KRS-1\",\n Size = 50,\n Type = \"vast\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := genesiscloud.NewFilesystem(ctx, \"example\", \u0026genesiscloud.FilesystemArgs{\n\t\t\tDescription: pulumi.String(\"Example filesystem\"),\n\t\t\tRegion: pulumi.String(\"NORD-NO-KRS-1\"),\n\t\t\tSize: pulumi.Int(50),\n\t\t\tType: pulumi.String(\"vast\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.Filesystem;\nimport com.pulumi.genesiscloud.FilesystemArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Filesystem(\"example\", FilesystemArgs.builder() \n .description(\"Example filesystem\")\n .region(\"NORD-NO-KRS-1\")\n .size(50)\n .type(\"vast\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: genesiscloud:Filesystem\n properties:\n description: Example filesystem\n region: NORD-NO-KRS-1\n size: 50\n type: vast\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/filesystem:Filesystem example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this filesystem was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description for the filesystem. - Sets the default value \"\" if the attribute is not set.\n"},"mountBasePath":{"type":"string","description":"The base path on the server under which the mount point can be accessed.\n"},"mountEndpointRanges":{"type":"array","items":{"type":"string"},"description":"The start and end IP of the mount endpoint range. Expressed as a array with two entries.\n"},"name":{"type":"string","description":"The human-readable name for the filesystem.\n"},"region":{"type":"string","description":"The identifier for the region this filesystem exists in. - If the value of this attribute changes, Terraform will\ndestroy and recreate the resource. - The value must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the filesystem when the resource is deleted - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this filesystem given in GiB. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource. - The value must be at least 1.\n"},"status":{"type":"string","description":"The filesystem status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/FilesystemTimeouts:FilesystemTimeouts"},"type":{"type":"string","description":"The storage type of the filesystem. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"vast\"].\n"}},"required":["createdAt","description","mountBasePath","mountEndpointRanges","name","region","retainOnDelete","size","status","type"],"inputProperties":{"description":{"type":"string","description":"The human-readable description for the filesystem. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the filesystem.\n"},"region":{"type":"string","description":"The identifier for the region this filesystem exists in. - If the value of this attribute changes, Terraform will\ndestroy and recreate the resource. - The value must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the filesystem when the resource is deleted - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this filesystem given in GiB. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource. - The value must be at least 1.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/FilesystemTimeouts:FilesystemTimeouts"},"type":{"type":"string","description":"The storage type of the filesystem. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"vast\"].\n"}},"requiredInputs":["region","size","type"],"stateInputs":{"description":"Input properties used for looking up and filtering Filesystem resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this filesystem was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description for the filesystem. - Sets the default value \"\" if the attribute is not set.\n"},"mountBasePath":{"type":"string","description":"The base path on the server under which the mount point can be accessed.\n"},"mountEndpointRanges":{"type":"array","items":{"type":"string"},"description":"The start and end IP of the mount endpoint range. Expressed as a array with two entries.\n"},"name":{"type":"string","description":"The human-readable name for the filesystem.\n"},"region":{"type":"string","description":"The identifier for the region this filesystem exists in. - If the value of this attribute changes, Terraform will\ndestroy and recreate the resource. - The value must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the filesystem when the resource is deleted - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this filesystem given in GiB. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource. - The value must be at least 1.\n"},"status":{"type":"string","description":"The filesystem status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/FilesystemTimeouts:FilesystemTimeouts"},"type":{"type":"string","description":"The storage type of the filesystem. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"vast\"].\n"}},"type":"object"}},"genesiscloud:index/floatingIp:FloatingIp":{"description":"floating IP resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst floatingIp = new genesiscloud.FloatingIp(\"floatingIp\", {\n description: \"The description for you terraform floating IP.\",\n region: \"ARC-IS-HAF-1\",\n version: \"ipv4\",\n});\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\nfloating_ip = genesiscloud.FloatingIp(\"floatingIp\",\n description=\"The description for you terraform floating IP.\",\n region=\"ARC-IS-HAF-1\",\n version=\"ipv4\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var floatingIp = new GenesisCloud.FloatingIp(\"floatingIp\", new()\n {\n Description = \"The description for you terraform floating IP.\",\n Region = \"ARC-IS-HAF-1\",\n Version = \"ipv4\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := genesiscloud.NewFloatingIp(ctx, \"floatingIp\", \u0026genesiscloud.FloatingIpArgs{\n\t\t\tDescription: pulumi.String(\"The description for you terraform floating IP.\"),\n\t\t\tRegion: pulumi.String(\"ARC-IS-HAF-1\"),\n\t\t\tVersion: pulumi.String(\"ipv4\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.FloatingIp;\nimport com.pulumi.genesiscloud.FloatingIpArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var floatingIp = new FloatingIp(\"floatingIp\", FloatingIpArgs.builder() \n .description(\"The description for you terraform floating IP.\")\n .region(\"ARC-IS-HAF-1\")\n .version(\"ipv4\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n floatingIp:\n type: genesiscloud:FloatingIp\n properties:\n description: The description for you terraform floating IP.\n region: ARC-IS-HAF-1\n version: ipv4\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/floatingIp:FloatingIp example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this floating IP was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description set for the floating IP.\n"},"ipAddress":{"type":"string","description":"The IP address of the floating IP.\n"},"isPublic":{"type":"boolean","description":"Whether the floating IP is public or private. - Sets the default value \"true\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the floating IP.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"status":{"type":"string","description":"The floating IP status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/FloatingIpTimeouts:FloatingIpTimeouts"},"updatedAt":{"type":"string","description":"The timestamp when this image was last updated in RFC 3339.\n"},"version":{"type":"string","description":"The version of the floating IP. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"ipv4\"].\n"}},"required":["createdAt","ipAddress","isPublic","name","region","status","updatedAt","version"],"inputProperties":{"description":{"type":"string","description":"The human-readable description set for the floating IP.\n"},"name":{"type":"string","description":"The human-readable name for the floating IP.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/FloatingIpTimeouts:FloatingIpTimeouts"},"version":{"type":"string","description":"The version of the floating IP. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"ipv4\"].\n"}},"requiredInputs":["region","version"],"stateInputs":{"description":"Input properties used for looking up and filtering FloatingIp resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this floating IP was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description set for the floating IP.\n"},"ipAddress":{"type":"string","description":"The IP address of the floating IP.\n"},"isPublic":{"type":"boolean","description":"Whether the floating IP is public or private. - Sets the default value \"true\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the floating IP.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"status":{"type":"string","description":"The floating IP status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/FloatingIpTimeouts:FloatingIpTimeouts"},"updatedAt":{"type":"string","description":"The timestamp when this image was last updated in RFC 3339.\n"},"version":{"type":"string","description":"The version of the floating IP. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"ipv4\"].\n"}},"type":"object"}},"genesiscloud:index/instance:Instance":{"description":"Instance resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst example = new genesiscloud.Instance(\"example\", {\n image: \"my-image-id\",\n region: \"ARC-IS-HAF-1\",\n sshKeyIds: [\"my-ssh-key-id\"],\n type: \"vcpu-2_memory-4g_disk-80g\",\n});\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\nexample = genesiscloud.Instance(\"example\",\n image=\"my-image-id\",\n region=\"ARC-IS-HAF-1\",\n ssh_key_ids=[\"my-ssh-key-id\"],\n type=\"vcpu-2_memory-4g_disk-80g\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new GenesisCloud.Instance(\"example\", new()\n {\n Image = \"my-image-id\",\n Region = \"ARC-IS-HAF-1\",\n SshKeyIds = new[]\n {\n \"my-ssh-key-id\",\n },\n Type = \"vcpu-2_memory-4g_disk-80g\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := genesiscloud.NewInstance(ctx, \"example\", \u0026genesiscloud.InstanceArgs{\n\t\t\tImage: pulumi.String(\"my-image-id\"),\n\t\t\tRegion: pulumi.String(\"ARC-IS-HAF-1\"),\n\t\t\tSshKeyIds: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"my-ssh-key-id\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"vcpu-2_memory-4g_disk-80g\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.Instance;\nimport com.pulumi.genesiscloud.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Instance(\"example\", InstanceArgs.builder() \n .image(\"my-image-id\")\n .region(\"ARC-IS-HAF-1\")\n .sshKeyIds(\"my-ssh-key-id\")\n .type(\"vcpu-2_memory-4g_disk-80g\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: genesiscloud:Instance\n properties:\n image: my-image-id\n region: ARC-IS-HAF-1\n sshKeyIds:\n - my-ssh-key-id\n type: vcpu-2_memory-4g_disk-80g\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/instance:Instance example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this image was created in RFC 3339.\n"},"floatingIpId":{"type":"string","description":"The floating IP attached to the instance.\n"},"hostname":{"type":"string","description":"The hostname of your instance. If not provided will be initially set to the `name` attribute. - If the value of this\nattribute is configured and changes, Terraform will destroy and recreate the resource.\n"},"image":{"type":"string","description":"The source image or snapshot of the instance. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource.\n"},"imageId":{"type":"string","description":"The resulting image ID of the instance.\n"},"metadata":{"$ref":"#/types/genesiscloud:index/InstanceMetadata:InstanceMetadata","description":"Option to provide metadata. Currently supported is `startup_script`.\n"},"name":{"type":"string","description":"The human-readable name for the instance.\n"},"password":{"type":"string","description":"The password to access the instance. Your password must have upper and lower chars, digits and length between 8-72.\n**Please Note**: Only one of `ssh_keys` or `password` can be provided. Password is less secure - we recommend you use an\nSSH key-pair. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The string\nlength must be at least 16.\n","secret":true},"placementOption":{"type":"string","description":"The placement option identifier in which instances are physically located relative to each other within a zone. For\nexample A or B. - If the value of this attribute changes, Terraform will destroy and recreate the resource.\n"},"privateIp":{"type":"string","description":"The private IPv4 IP-Address (IPv4 address).\n"},"publicIp":{"type":"string","description":"The public IPv4 IP-Address (IPv4 address).\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"securityGroupIds":{"type":"array","items":{"type":"string"},"description":"The security groups of the instance. If not provided will be set to the default security group.\n"},"sshKeyIds":{"type":"array","items":{"type":"string"},"description":"The ssh keys of the instance. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource.\n"},"status":{"type":"string","description":"The instance status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/InstanceTimeouts:InstanceTimeouts"},"type":{"type":"string","description":"The instance type identifier. Learn more about instance types\n[here](https://developers.genesiscloud.com/instances#instance-types). - If the value of this attribute changes,\nTerraform will destroy and recreate the resource.\n"},"updatedAt":{"type":"string","description":"The timestamp when this image was last updated in RFC 3339.\n"},"volumeIds":{"type":"array","items":{"type":"string"},"description":"The volumes of the instance.\n"}},"required":["createdAt","hostname","image","imageId","name","placementOption","privateIp","publicIp","region","securityGroupIds","status","type","updatedAt","volumeIds"],"inputProperties":{"floatingIpId":{"type":"string","description":"The floating IP attached to the instance.\n"},"hostname":{"type":"string","description":"The hostname of your instance. If not provided will be initially set to the `name` attribute. - If the value of this\nattribute is configured and changes, Terraform will destroy and recreate the resource.\n"},"image":{"type":"string","description":"The source image or snapshot of the instance. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource.\n"},"metadata":{"$ref":"#/types/genesiscloud:index/InstanceMetadata:InstanceMetadata","description":"Option to provide metadata. Currently supported is `startup_script`.\n"},"name":{"type":"string","description":"The human-readable name for the instance.\n"},"password":{"type":"string","description":"The password to access the instance. Your password must have upper and lower chars, digits and length between 8-72.\n**Please Note**: Only one of `ssh_keys` or `password` can be provided. Password is less secure - we recommend you use an\nSSH key-pair. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The string\nlength must be at least 16.\n","secret":true},"placementOption":{"type":"string","description":"The placement option identifier in which instances are physically located relative to each other within a zone. For\nexample A or B. - If the value of this attribute changes, Terraform will destroy and recreate the resource.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"securityGroupIds":{"type":"array","items":{"type":"string"},"description":"The security groups of the instance. If not provided will be set to the default security group.\n"},"sshKeyIds":{"type":"array","items":{"type":"string"},"description":"The ssh keys of the instance. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/InstanceTimeouts:InstanceTimeouts"},"type":{"type":"string","description":"The instance type identifier. Learn more about instance types\n[here](https://developers.genesiscloud.com/instances#instance-types). - If the value of this attribute changes,\nTerraform will destroy and recreate the resource.\n"},"volumeIds":{"type":"array","items":{"type":"string"},"description":"The volumes of the instance.\n"}},"requiredInputs":["image","region","type"],"stateInputs":{"description":"Input properties used for looking up and filtering Instance resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this image was created in RFC 3339.\n"},"floatingIpId":{"type":"string","description":"The floating IP attached to the instance.\n"},"hostname":{"type":"string","description":"The hostname of your instance. If not provided will be initially set to the `name` attribute. - If the value of this\nattribute is configured and changes, Terraform will destroy and recreate the resource.\n"},"image":{"type":"string","description":"The source image or snapshot of the instance. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource.\n"},"imageId":{"type":"string","description":"The resulting image ID of the instance.\n"},"metadata":{"$ref":"#/types/genesiscloud:index/InstanceMetadata:InstanceMetadata","description":"Option to provide metadata. Currently supported is `startup_script`.\n"},"name":{"type":"string","description":"The human-readable name for the instance.\n"},"password":{"type":"string","description":"The password to access the instance. Your password must have upper and lower chars, digits and length between 8-72.\n**Please Note**: Only one of `ssh_keys` or `password` can be provided. Password is less secure - we recommend you use an\nSSH key-pair. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The string\nlength must be at least 16.\n","secret":true},"placementOption":{"type":"string","description":"The placement option identifier in which instances are physically located relative to each other within a zone. For\nexample A or B. - If the value of this attribute changes, Terraform will destroy and recreate the resource.\n"},"privateIp":{"type":"string","description":"The private IPv4 IP-Address (IPv4 address).\n"},"publicIp":{"type":"string","description":"The public IPv4 IP-Address (IPv4 address).\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"securityGroupIds":{"type":"array","items":{"type":"string"},"description":"The security groups of the instance. If not provided will be set to the default security group.\n"},"sshKeyIds":{"type":"array","items":{"type":"string"},"description":"The ssh keys of the instance. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource.\n"},"status":{"type":"string","description":"The instance status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/InstanceTimeouts:InstanceTimeouts"},"type":{"type":"string","description":"The instance type identifier. Learn more about instance types\n[here](https://developers.genesiscloud.com/instances#instance-types). - If the value of this attribute changes,\nTerraform will destroy and recreate the resource.\n"},"updatedAt":{"type":"string","description":"The timestamp when this image was last updated in RFC 3339.\n"},"volumeIds":{"type":"array","items":{"type":"string"},"description":"The volumes of the instance.\n"}},"type":"object"}},"genesiscloud:index/sSHKey:SSHKey":{"description":"SSH key resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst example = new genesiscloud.SSHKey(\"example\", {publicKey: \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBOpdKM8wSI07+PO4xLDL7zW/kNWGbdFXeHyBU1TRlBn alice@example.com\"});\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\nexample = genesiscloud.SSHKey(\"example\", public_key=\"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBOpdKM8wSI07+PO4xLDL7zW/kNWGbdFXeHyBU1TRlBn alice@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new GenesisCloud.SSHKey(\"example\", new()\n {\n PublicKey = \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBOpdKM8wSI07+PO4xLDL7zW/kNWGbdFXeHyBU1TRlBn alice@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := genesiscloud.NewSSHKey(ctx, \"example\", \u0026genesiscloud.SSHKeyArgs{\n\t\t\tPublicKey: pulumi.String(\"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBOpdKM8wSI07+PO4xLDL7zW/kNWGbdFXeHyBU1TRlBn alice@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.SSHKey;\nimport com.pulumi.genesiscloud.SSHKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new SSHKey(\"example\", SSHKeyArgs.builder() \n .publicKey(\"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBOpdKM8wSI07+PO4xLDL7zW/kNWGbdFXeHyBU1TRlBn alice@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: genesiscloud:SSHKey\n properties:\n publicKey: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBOpdKM8wSI07+PO4xLDL7zW/kNWGbdFXeHyBU1TRlBn alice@example.com\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/sSHKey:SSHKey example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this SSH key was created in RFC 3339.\n"},"fingerprint":{"type":"string","description":"The fingerprint of the SSH key.\n"},"name":{"type":"string","description":"The human-readable name for the SSH key.\n"},"publicKey":{"type":"string","description":"SSH public key. - If the value of this attribute changes, Terraform will destroy and recreate the resource.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SSHKeyTimeouts:SSHKeyTimeouts"}},"required":["createdAt","fingerprint","name","publicKey"],"inputProperties":{"name":{"type":"string","description":"The human-readable name for the SSH key.\n"},"publicKey":{"type":"string","description":"SSH public key. - If the value of this attribute changes, Terraform will destroy and recreate the resource.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SSHKeyTimeouts:SSHKeyTimeouts"}},"requiredInputs":["publicKey"],"stateInputs":{"description":"Input properties used for looking up and filtering SSHKey resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this SSH key was created in RFC 3339.\n"},"fingerprint":{"type":"string","description":"The fingerprint of the SSH key.\n"},"name":{"type":"string","description":"The human-readable name for the SSH key.\n"},"publicKey":{"type":"string","description":"SSH public key. - If the value of this attribute changes, Terraform will destroy and recreate the resource.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SSHKeyTimeouts:SSHKeyTimeouts"}},"type":"object"}},"genesiscloud:index/securityGroup:SecurityGroup":{"description":"Security group resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.SecurityGroup;\nimport com.pulumi.genesiscloud.SecurityGroupArgs;\nimport com.pulumi.genesiscloud.inputs.SecurityGroupRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var allow_https = new SecurityGroup(\"allow-https\", SecurityGroupArgs.builder() \n .region(\"ARC-IS-HAF-1\")\n .rules(SecurityGroupRuleArgs.builder()\n .direction(\"ingress\")\n .port_range_max(443)\n .port_range_min(443)\n .protocol(\"tcp\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n allow-https:\n type: genesiscloud:SecurityGroup\n properties:\n region: ARC-IS-HAF-1\n rules:\n - direction: ingress\n port_range_max: 443\n port_range_min: 443\n protocol: tcp\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/securityGroup:SecurityGroup example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this security group was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description for the security group. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the security group.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"rules":{"type":"array","items":{"$ref":"#/types/genesiscloud:index/SecurityGroupRule:SecurityGroupRule"}},"status":{"type":"string","description":"The security group status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SecurityGroupTimeouts:SecurityGroupTimeouts"}},"required":["createdAt","description","name","region","rules","status"],"inputProperties":{"description":{"type":"string","description":"The human-readable description for the security group. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the security group.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"rules":{"type":"array","items":{"$ref":"#/types/genesiscloud:index/SecurityGroupRule:SecurityGroupRule"}},"timeouts":{"$ref":"#/types/genesiscloud:index/SecurityGroupTimeouts:SecurityGroupTimeouts"}},"requiredInputs":["region","rules"],"stateInputs":{"description":"Input properties used for looking up and filtering SecurityGroup resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this security group was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description for the security group. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the security group.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"rules":{"type":"array","items":{"$ref":"#/types/genesiscloud:index/SecurityGroupRule:SecurityGroupRule"}},"status":{"type":"string","description":"The security group status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SecurityGroupTimeouts:SecurityGroupTimeouts"}},"type":"object"}},"genesiscloud:index/snapshot:Snapshot":{"description":"Snapshot resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst target = new genesiscloud.Instance(\"target\", {});\n// ...\nconst example = new genesiscloud.Snapshot(\"example\", {\n instanceId: target.id,\n retainOnDelete: true,\n});\n// optional\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\ntarget = genesiscloud.Instance(\"target\")\n# ...\nexample = genesiscloud.Snapshot(\"example\",\n instance_id=target.id,\n retain_on_delete=True)\n# optional\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var target = new GenesisCloud.Instance(\"target\");\n\n // ...\n var example = new GenesisCloud.Snapshot(\"example\", new()\n {\n InstanceId = target.Id,\n RetainOnDelete = true,\n });\n\n // optional\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttarget, err := genesiscloud.NewInstance(ctx, \"target\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = genesiscloud.NewSnapshot(ctx, \"example\", \u0026genesiscloud.SnapshotArgs{\n\t\t\tInstanceId: target.ID(),\n\t\t\tRetainOnDelete: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.Instance;\nimport com.pulumi.genesiscloud.Snapshot;\nimport com.pulumi.genesiscloud.SnapshotArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var target = new Instance(\"target\");\n\n var example = new Snapshot(\"example\", SnapshotArgs.builder() \n .instanceId(target.id())\n .retainOnDelete(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n target:\n type: genesiscloud:Instance\n example:\n type: genesiscloud:Snapshot\n properties:\n instanceId: ${target.id}\n retainOnDelete: true\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/snapshot:Snapshot example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this snapshot was created in RFC 3339.\n"},"instanceId":{"type":"string","description":"The id of the instance to snapshot. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource.\n"},"name":{"type":"string","description":"The human-readable name for the snapshot.\n"},"region":{"type":"string","description":"The region identifier.\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the snapshot when the resource is deleted. - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this snapshot given in bytes.\n"},"status":{"type":"string","description":"The snapshot status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SnapshotTimeouts:SnapshotTimeouts"}},"required":["createdAt","instanceId","name","region","retainOnDelete","size","status"],"inputProperties":{"instanceId":{"type":"string","description":"The id of the instance to snapshot. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource.\n"},"name":{"type":"string","description":"The human-readable name for the snapshot.\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the snapshot when the resource is deleted. - Sets the default value \"false\" if the attribute is not set.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SnapshotTimeouts:SnapshotTimeouts"}},"requiredInputs":["instanceId"],"stateInputs":{"description":"Input properties used for looking up and filtering Snapshot resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this snapshot was created in RFC 3339.\n"},"instanceId":{"type":"string","description":"The id of the instance to snapshot. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource.\n"},"name":{"type":"string","description":"The human-readable name for the snapshot.\n"},"region":{"type":"string","description":"The region identifier.\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the snapshot when the resource is deleted. - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this snapshot given in bytes.\n"},"status":{"type":"string","description":"The snapshot status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SnapshotTimeouts:SnapshotTimeouts"}},"type":"object"}},"genesiscloud:index/volume:Volume":{"description":"Volume resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst example = new genesiscloud.Volume(\"example\", {\n region: \"ARC-IS-HAF-1\",\n size: 50,\n type: \"hdd\",\n});\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\nexample = genesiscloud.Volume(\"example\",\n region=\"ARC-IS-HAF-1\",\n size=50,\n type=\"hdd\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new GenesisCloud.Volume(\"example\", new()\n {\n Region = \"ARC-IS-HAF-1\",\n Size = 50,\n Type = \"hdd\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := genesiscloud.NewVolume(ctx, \"example\", \u0026genesiscloud.VolumeArgs{\n\t\t\tRegion: pulumi.String(\"ARC-IS-HAF-1\"),\n\t\t\tSize: pulumi.Int(50),\n\t\t\tType: pulumi.String(\"hdd\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.Volume;\nimport com.pulumi.genesiscloud.VolumeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Volume(\"example\", VolumeArgs.builder() \n .region(\"ARC-IS-HAF-1\")\n .size(50)\n .type(\"hdd\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: genesiscloud:Volume\n properties:\n region: ARC-IS-HAF-1\n size: 50\n type: hdd\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/volume:Volume example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this volume was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description for the volume. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the volume.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the volume when the resource is deleted - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this volume given in GiB. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource. - The value must be at least 1.\n"},"status":{"type":"string","description":"The volume status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/VolumeTimeouts:VolumeTimeouts"},"type":{"type":"string","description":"The storage type of the volume. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"hdd\" \"ssd\"].\n"}},"required":["createdAt","description","name","region","retainOnDelete","size","status","type"],"inputProperties":{"description":{"type":"string","description":"The human-readable description for the volume. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the volume.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the volume when the resource is deleted - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this volume given in GiB. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource. - The value must be at least 1.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/VolumeTimeouts:VolumeTimeouts"},"type":{"type":"string","description":"The storage type of the volume. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"hdd\" \"ssd\"].\n"}},"requiredInputs":["region","size","type"],"stateInputs":{"description":"Input properties used for looking up and filtering Volume resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this volume was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description for the volume. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the volume.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the volume when the resource is deleted - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this volume given in GiB. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource. - The value must be at least 1.\n"},"status":{"type":"string","description":"The volume status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/VolumeTimeouts:VolumeTimeouts"},"type":{"type":"string","description":"The storage type of the volume. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"hdd\" \"ssd\"].\n"}},"type":"object"}}},"functions":{"genesiscloud:index/images:Images":{"description":"Images data source\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst base-os-images = genesiscloud.Images({\n filter: {\n type: \"base-os\",\n },\n});\nconst snapshots = genesiscloud.Images({\n filter: {\n region: \"ARC-IS-HAF-1\",\n type: \"snapshot\",\n },\n});\nconst preconfigured-images = genesiscloud.Images({\n filter: {\n type: \"preconfigured\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\nbase_os_images = genesiscloud.images(filter=genesiscloud.ImagesFilterArgs(\n type=\"base-os\",\n))\nsnapshots = genesiscloud.images(filter=genesiscloud.ImagesFilterArgs(\n region=\"ARC-IS-HAF-1\",\n type=\"snapshot\",\n))\npreconfigured_images = genesiscloud.images(filter=genesiscloud.ImagesFilterArgs(\n type=\"preconfigured\",\n))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var base_os_images = GenesisCloud.Images.Invoke(new()\n {\n Filter = new GenesisCloud.Inputs.ImagesFilterInputArgs\n {\n Type = \"base-os\",\n },\n });\n\n var snapshots = GenesisCloud.Images.Invoke(new()\n {\n Filter = new GenesisCloud.Inputs.ImagesFilterInputArgs\n {\n Region = \"ARC-IS-HAF-1\",\n Type = \"snapshot\",\n },\n });\n\n var preconfigured_images = GenesisCloud.Images.Invoke(new()\n {\n Filter = new GenesisCloud.Inputs.ImagesFilterInputArgs\n {\n Type = \"preconfigured\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := genesiscloud.Images(ctx, \u0026genesiscloud.ImagesArgs{\n\t\t\tFilter: genesiscloud.ImagesFilter{\n\t\t\t\tType: \"base-os\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = genesiscloud.Images(ctx, \u0026genesiscloud.ImagesArgs{\n\t\t\tFilter: genesiscloud.ImagesFilter{\n\t\t\t\tRegion: pulumi.StringRef(\"ARC-IS-HAF-1\"),\n\t\t\t\tType: \"snapshot\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = genesiscloud.Images(ctx, \u0026genesiscloud.ImagesArgs{\n\t\t\tFilter: genesiscloud.ImagesFilter{\n\t\t\t\tType: \"preconfigured\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.GenesiscloudFunctions;\nimport com.pulumi.genesiscloud.inputs.ImagesArgs;\nimport com.pulumi.genesiscloud.inputs.ImagesFilterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var base-os-images = GenesiscloudFunctions.Images(ImagesArgs.builder()\n .filter(ImagesFilterArgs.builder()\n .type(\"base-os\")\n .build())\n .build());\n\n final var snapshots = GenesiscloudFunctions.Images(ImagesArgs.builder()\n .filter(ImagesFilterArgs.builder()\n .region(\"ARC-IS-HAF-1\")\n .type(\"snapshot\")\n .build())\n .build());\n\n final var preconfigured-images = GenesiscloudFunctions.Images(ImagesArgs.builder()\n .filter(ImagesFilterArgs.builder()\n .type(\"preconfigured\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n base-os-images:\n fn::invoke:\n Function: genesiscloud:Images\n Arguments:\n filter:\n type: base-os\n snapshots:\n fn::invoke:\n Function: genesiscloud:Images\n Arguments:\n filter:\n region: ARC-IS-HAF-1\n type: snapshot\n preconfigured-images:\n fn::invoke:\n Function: genesiscloud:Images\n Arguments:\n filter:\n type: preconfigured\n```\n{{% /example %}}\n{{% /examples %}}","inputs":{"description":"A collection of arguments for invoking Images.\n","properties":{"filter":{"$ref":"#/types/genesiscloud:index/ImagesFilter:ImagesFilter"},"timeouts":{"$ref":"#/types/genesiscloud:index/ImagesTimeouts:ImagesTimeouts"}},"type":"object","required":["filter"]},"outputs":{"description":"A collection of values returned by Images.\n","properties":{"filter":{"$ref":"#/types/genesiscloud:index/ImagesFilter:ImagesFilter"},"id":{"type":"string"},"images":{"items":{"$ref":"#/types/genesiscloud:index/ImagesImage:ImagesImage"},"type":"array"},"timeouts":{"$ref":"#/types/genesiscloud:index/ImagesTimeouts:ImagesTimeouts"}},"required":["filter","id","images"],"type":"object"}}}} \ No newline at end of file +{"name":"genesiscloud","version":"0.0.1-alpha.1710402773+ee677a54.dirty","description":"A Pulumi package for creating and managing genesiscloud cloud resources.","keywords":["pulumi","genesiscloud","category/cloud"],"homepage":"https://www.genesiscloud.com","license":"Apache-2.0","attribution":"This Pulumi package is based on the [`genesiscloud` Terraform Provider](https://github.com/genesiscloud/terraform-provider-genesiscloud).","repository":"https://github.com/genesiscloud/pulumi-genesiscloud","pluginDownloadURL":"https://github.com/genesiscloud/pulumi-genesiscloud/releases/","publisher":"Genesis Cloud","meta":{"moduleFormat":"(.*)(?:/[^/]*)"},"language":{"csharp":{"packageReferences":{"Pulumi":"3.*"},"namespaces":{"genesiscloud":"GenesisCloud"},"compatibility":"tfbridge20"},"go":{"importBasePath":"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud","generateResourceContainerTypes":true,"generateExtraInputTypes":true},"nodejs":{"packageDescription":"A Pulumi package for creating and managing genesiscloud cloud resources.","readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/genesiscloud/terraform-provider-genesiscloud)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-genesiscloud` repo](https://github.com/genesiscloud/pulumi-genesiscloud/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-genesiscloud` repo](https://github.com/genesiscloud/terraform-provider-genesiscloud/issues).","dependencies":{"@pulumi/pulumi":"^3.0.0"},"devDependencies":{"@types/node":"^10.0.0"},"compatibility":"tfbridge20","disableUnionOutputTypes":true},"python":{"requires":{"pulumi":"\u003e=3.0.0,\u003c4.0.0"},"readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/genesiscloud/terraform-provider-genesiscloud)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-genesiscloud` repo](https://github.com/genesiscloud/pulumi-genesiscloud/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-genesiscloud` repo](https://github.com/genesiscloud/terraform-provider-genesiscloud/issues).","compatibility":"tfbridge20","pyproject":{}}},"config":{"variables":{"endpoint":{"type":"string","description":"Genesis Cloud API endpoint. May also be provided via `GENESISCLOUD_ENDPOINT` environment variable. If neither is\nprovided, defaults to `https://api.genesiscloud.com/compute/v1`.\n"},"pollingInterval":{"type":"string","description":"The polling interval. - The string must be a positive [time duration](https://pkg.go.dev/time#ParseDuration), for\nexample \"10s\".\n"},"token":{"type":"string","description":"Genesis Cloud API token. May also be provided via `GENESISCLOUD_TOKEN` environment variable.\n","secret":true}}},"types":{"genesiscloud:index/FilesystemTimeouts:FilesystemTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/FloatingIpTimeouts:FloatingIpTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/ImagesFilter:ImagesFilter":{"properties":{"region":{"type":"string","description":"Filter by the region identifier.\n - The value must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"type":{"type":"string","description":"Filter by the kind of image.\n - The value must be one of: [\"base-os\" \"cloud-image\" \"preconfigured\" \"snapshot\"].\n"}},"type":"object","required":["type"]},"genesiscloud:index/ImagesImage:ImagesImage":{"properties":{"createdAt":{"type":"string","description":"The timestamp when this image was created in RFC 3339.\n"},"id":{"type":"string","description":"A unique number that can be used to identify and reference a specific image.\n"},"name":{"type":"string","description":"The display name that has been given to an image.\n"},"regions":{"type":"array","items":{"type":"string"},"description":"The list of regions in which this image can be used in.\n"},"slug":{"type":"string","description":"The image slug.\n"},"type":{"type":"string","description":"Describes the kind of image.\n"},"versions":{"type":"array","items":{"type":"string"},"description":"The list of versions if this is a cloud-image otherwise empty.\n"}},"type":"object","required":["createdAt","id","name","regions","slug","type","versions"],"language":{"nodejs":{"requiredInputs":[]}}},"genesiscloud:index/ImagesTimeouts:ImagesTimeouts":{"properties":{"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/InstanceMetadata:InstanceMetadata":{"properties":{"startupScript":{"type":"string"}},"type":"object"},"genesiscloud:index/InstanceTimeouts:InstanceTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/SSHKeyTimeouts:SSHKeyTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/SecurityGroupRule:SecurityGroupRule":{"properties":{"direction":{"type":"string","description":"The direction of the rule.\n - The value must be one of: [\"egress\" \"ingress\"].\n"},"portRangeMax":{"type":"integer","description":"The maximum port number of the rule.\n - The value must be between 1 and 65535.\n"},"portRangeMin":{"type":"integer","description":"The minimum port number of the rule.\n - The value must be between 1 and 65535.\n"},"protocol":{"type":"string","description":"The protocol of the rule.\n - The value must be one of: [\"all\" \"icmp\" \"tcp\" \"udp\"].\n"}},"type":"object","required":["direction","protocol"]},"genesiscloud:index/SecurityGroupTimeouts:SecurityGroupTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/SnapshotTimeouts:SnapshotTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"genesiscloud:index/VolumeTimeouts:VolumeTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"}},"provider":{"description":"The provider type for the genesiscloud package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n","properties":{"endpoint":{"type":"string","description":"Genesis Cloud API endpoint. May also be provided via `GENESISCLOUD_ENDPOINT` environment variable. If neither is\nprovided, defaults to `https://api.genesiscloud.com/compute/v1`.\n"},"pollingInterval":{"type":"string","description":"The polling interval. - The string must be a positive [time duration](https://pkg.go.dev/time#ParseDuration), for\nexample \"10s\".\n"},"token":{"type":"string","description":"Genesis Cloud API token. May also be provided via `GENESISCLOUD_TOKEN` environment variable.\n","secret":true}},"inputProperties":{"endpoint":{"type":"string","description":"Genesis Cloud API endpoint. May also be provided via `GENESISCLOUD_ENDPOINT` environment variable. If neither is\nprovided, defaults to `https://api.genesiscloud.com/compute/v1`.\n"},"pollingInterval":{"type":"string","description":"The polling interval. - The string must be a positive [time duration](https://pkg.go.dev/time#ParseDuration), for\nexample \"10s\".\n"},"token":{"type":"string","description":"Genesis Cloud API token. May also be provided via `GENESISCLOUD_TOKEN` environment variable.\n","secret":true}}},"resources":{"genesiscloud:index/filesystem:Filesystem":{"description":"Filesystem resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst example = new genesiscloud.Filesystem(\"example\", {\n description: \"Example filesystem\",\n region: \"NORD-NO-KRS-1\",\n size: 50,\n type: \"vast\",\n});\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\nexample = genesiscloud.Filesystem(\"example\",\n description=\"Example filesystem\",\n region=\"NORD-NO-KRS-1\",\n size=50,\n type=\"vast\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new GenesisCloud.Filesystem(\"example\", new()\n {\n Description = \"Example filesystem\",\n Region = \"NORD-NO-KRS-1\",\n Size = 50,\n Type = \"vast\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := genesiscloud.NewFilesystem(ctx, \"example\", \u0026genesiscloud.FilesystemArgs{\n\t\t\tDescription: pulumi.String(\"Example filesystem\"),\n\t\t\tRegion: pulumi.String(\"NORD-NO-KRS-1\"),\n\t\t\tSize: pulumi.Int(50),\n\t\t\tType: pulumi.String(\"vast\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.Filesystem;\nimport com.pulumi.genesiscloud.FilesystemArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Filesystem(\"example\", FilesystemArgs.builder() \n .description(\"Example filesystem\")\n .region(\"NORD-NO-KRS-1\")\n .size(50)\n .type(\"vast\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: genesiscloud:Filesystem\n properties:\n description: Example filesystem\n region: NORD-NO-KRS-1\n size: 50\n type: vast\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/filesystem:Filesystem example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this filesystem was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description for the filesystem. - Sets the default value \"\" if the attribute is not set.\n"},"mountBasePath":{"type":"string","description":"The base path on the server under which the mount point can be accessed.\n"},"mountEndpointRanges":{"type":"array","items":{"type":"string"},"description":"The start and end IP of the mount endpoint range. Expressed as a array with two entries.\n"},"name":{"type":"string","description":"The human-readable name for the filesystem.\n"},"region":{"type":"string","description":"The identifier for the region this filesystem exists in. - If the value of this attribute changes, Terraform will\ndestroy and recreate the resource. - The value must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the filesystem when the resource is deleted - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this filesystem given in GiB. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource. - The value must be at least 1.\n"},"status":{"type":"string","description":"The filesystem status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/FilesystemTimeouts:FilesystemTimeouts"},"type":{"type":"string","description":"The storage type of the filesystem. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"vast\"].\n"}},"required":["createdAt","description","mountBasePath","mountEndpointRanges","name","region","retainOnDelete","size","status","type"],"inputProperties":{"description":{"type":"string","description":"The human-readable description for the filesystem. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the filesystem.\n"},"region":{"type":"string","description":"The identifier for the region this filesystem exists in. - If the value of this attribute changes, Terraform will\ndestroy and recreate the resource. - The value must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the filesystem when the resource is deleted - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this filesystem given in GiB. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource. - The value must be at least 1.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/FilesystemTimeouts:FilesystemTimeouts"},"type":{"type":"string","description":"The storage type of the filesystem. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"vast\"].\n"}},"requiredInputs":["region","size","type"],"stateInputs":{"description":"Input properties used for looking up and filtering Filesystem resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this filesystem was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description for the filesystem. - Sets the default value \"\" if the attribute is not set.\n"},"mountBasePath":{"type":"string","description":"The base path on the server under which the mount point can be accessed.\n"},"mountEndpointRanges":{"type":"array","items":{"type":"string"},"description":"The start and end IP of the mount endpoint range. Expressed as a array with two entries.\n"},"name":{"type":"string","description":"The human-readable name for the filesystem.\n"},"region":{"type":"string","description":"The identifier for the region this filesystem exists in. - If the value of this attribute changes, Terraform will\ndestroy and recreate the resource. - The value must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the filesystem when the resource is deleted - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this filesystem given in GiB. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource. - The value must be at least 1.\n"},"status":{"type":"string","description":"The filesystem status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/FilesystemTimeouts:FilesystemTimeouts"},"type":{"type":"string","description":"The storage type of the filesystem. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"vast\"].\n"}},"type":"object"}},"genesiscloud:index/floatingIp:FloatingIp":{"description":"floating IP resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst floatingIp = new genesiscloud.FloatingIp(\"floatingIp\", {\n description: \"The description for you terraform floating IP.\",\n region: \"ARC-IS-HAF-1\",\n version: \"ipv4\",\n});\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\nfloating_ip = genesiscloud.FloatingIp(\"floatingIp\",\n description=\"The description for you terraform floating IP.\",\n region=\"ARC-IS-HAF-1\",\n version=\"ipv4\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var floatingIp = new GenesisCloud.FloatingIp(\"floatingIp\", new()\n {\n Description = \"The description for you terraform floating IP.\",\n Region = \"ARC-IS-HAF-1\",\n Version = \"ipv4\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := genesiscloud.NewFloatingIp(ctx, \"floatingIp\", \u0026genesiscloud.FloatingIpArgs{\n\t\t\tDescription: pulumi.String(\"The description for you terraform floating IP.\"),\n\t\t\tRegion: pulumi.String(\"ARC-IS-HAF-1\"),\n\t\t\tVersion: pulumi.String(\"ipv4\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.FloatingIp;\nimport com.pulumi.genesiscloud.FloatingIpArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var floatingIp = new FloatingIp(\"floatingIp\", FloatingIpArgs.builder() \n .description(\"The description for you terraform floating IP.\")\n .region(\"ARC-IS-HAF-1\")\n .version(\"ipv4\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n floatingIp:\n type: genesiscloud:FloatingIp\n properties:\n description: The description for you terraform floating IP.\n region: ARC-IS-HAF-1\n version: ipv4\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/floatingIp:FloatingIp example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this floating IP was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description set for the floating IP.\n"},"ipAddress":{"type":"string","description":"The IP address of the floating IP.\n"},"isPublic":{"type":"boolean","description":"Whether the floating IP is public or private. - Sets the default value \"true\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the floating IP.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"status":{"type":"string","description":"The floating IP status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/FloatingIpTimeouts:FloatingIpTimeouts"},"updatedAt":{"type":"string","description":"The timestamp when this image was last updated in RFC 3339.\n"},"version":{"type":"string","description":"The version of the floating IP. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"ipv4\"].\n"}},"required":["createdAt","ipAddress","isPublic","name","region","status","updatedAt","version"],"inputProperties":{"description":{"type":"string","description":"The human-readable description set for the floating IP.\n"},"name":{"type":"string","description":"The human-readable name for the floating IP.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/FloatingIpTimeouts:FloatingIpTimeouts"},"version":{"type":"string","description":"The version of the floating IP. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"ipv4\"].\n"}},"requiredInputs":["region","version"],"stateInputs":{"description":"Input properties used for looking up and filtering FloatingIp resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this floating IP was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description set for the floating IP.\n"},"ipAddress":{"type":"string","description":"The IP address of the floating IP.\n"},"isPublic":{"type":"boolean","description":"Whether the floating IP is public or private. - Sets the default value \"true\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the floating IP.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"status":{"type":"string","description":"The floating IP status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/FloatingIpTimeouts:FloatingIpTimeouts"},"updatedAt":{"type":"string","description":"The timestamp when this image was last updated in RFC 3339.\n"},"version":{"type":"string","description":"The version of the floating IP. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"ipv4\"].\n"}},"type":"object"}},"genesiscloud:index/instance:Instance":{"description":"Instance resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst example = new genesiscloud.Instance(\"example\", {\n image: \"my-image-id\",\n region: \"ARC-IS-HAF-1\",\n sshKeyIds: [\"my-ssh-key-id\"],\n type: \"vcpu-2_memory-4g_disk-80g\",\n});\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\nexample = genesiscloud.Instance(\"example\",\n image=\"my-image-id\",\n region=\"ARC-IS-HAF-1\",\n ssh_key_ids=[\"my-ssh-key-id\"],\n type=\"vcpu-2_memory-4g_disk-80g\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new GenesisCloud.Instance(\"example\", new()\n {\n Image = \"my-image-id\",\n Region = \"ARC-IS-HAF-1\",\n SshKeyIds = new[]\n {\n \"my-ssh-key-id\",\n },\n Type = \"vcpu-2_memory-4g_disk-80g\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := genesiscloud.NewInstance(ctx, \"example\", \u0026genesiscloud.InstanceArgs{\n\t\t\tImage: pulumi.String(\"my-image-id\"),\n\t\t\tRegion: pulumi.String(\"ARC-IS-HAF-1\"),\n\t\t\tSshKeyIds: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"my-ssh-key-id\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"vcpu-2_memory-4g_disk-80g\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.Instance;\nimport com.pulumi.genesiscloud.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Instance(\"example\", InstanceArgs.builder() \n .image(\"my-image-id\")\n .region(\"ARC-IS-HAF-1\")\n .sshKeyIds(\"my-ssh-key-id\")\n .type(\"vcpu-2_memory-4g_disk-80g\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: genesiscloud:Instance\n properties:\n image: my-image-id\n region: ARC-IS-HAF-1\n sshKeyIds:\n - my-ssh-key-id\n type: vcpu-2_memory-4g_disk-80g\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/instance:Instance example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this image was created in RFC 3339.\n"},"floatingIpId":{"type":"string","description":"The floating IP attached to the instance.\n"},"hostname":{"type":"string","description":"The hostname of your instance. If not provided will be initially set to the `name` attribute. - If the value of this\nattribute is configured and changes, Terraform will destroy and recreate the resource.\n"},"image":{"type":"string","description":"The source image or snapshot of the instance. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource.\n"},"imageId":{"type":"string","description":"The resulting image ID of the instance.\n"},"metadata":{"$ref":"#/types/genesiscloud:index/InstanceMetadata:InstanceMetadata","description":"Option to provide metadata. Currently supported is `startup_script`.\n"},"name":{"type":"string","description":"The human-readable name for the instance.\n"},"password":{"type":"string","description":"The password to access the instance. Your password must have upper and lower chars, digits and length between 8-72.\n**Please Note**: Only one of `ssh_keys` or `password` can be provided. Password is less secure - we recommend you use an\nSSH key-pair. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The string\nlength must be at least 16.\n","secret":true},"placementOption":{"type":"string","description":"The placement option identifier in which instances are physically located relative to each other within a zone. For\nexample A or B. - If the value of this attribute changes, Terraform will destroy and recreate the resource.\n"},"privateIp":{"type":"string","description":"The private IPv4 IP-Address (IPv4 address).\n"},"publicIp":{"type":"string","description":"The public IPv4 IP-Address (IPv4 address).\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"securityGroupIds":{"type":"array","items":{"type":"string"},"description":"The security groups of the instance. If not provided will be set to the default security group.\n"},"sshKeyIds":{"type":"array","items":{"type":"string"},"description":"The ssh keys of the instance. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource.\n"},"status":{"type":"string","description":"The instance status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/InstanceTimeouts:InstanceTimeouts"},"type":{"type":"string","description":"The instance type identifier. Learn more about instance types\n[here](https://developers.genesiscloud.com/instances#instance-types). - If the value of this attribute changes,\nTerraform will destroy and recreate the resource.\n"},"updatedAt":{"type":"string","description":"The timestamp when this image was last updated in RFC 3339.\n"},"volumeIds":{"type":"array","items":{"type":"string"},"description":"The volumes of the instance.\n"}},"required":["createdAt","hostname","image","imageId","name","placementOption","privateIp","publicIp","region","securityGroupIds","status","type","updatedAt","volumeIds"],"inputProperties":{"floatingIpId":{"type":"string","description":"The floating IP attached to the instance.\n"},"hostname":{"type":"string","description":"The hostname of your instance. If not provided will be initially set to the `name` attribute. - If the value of this\nattribute is configured and changes, Terraform will destroy and recreate the resource.\n"},"image":{"type":"string","description":"The source image or snapshot of the instance. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource.\n"},"metadata":{"$ref":"#/types/genesiscloud:index/InstanceMetadata:InstanceMetadata","description":"Option to provide metadata. Currently supported is `startup_script`.\n"},"name":{"type":"string","description":"The human-readable name for the instance.\n"},"password":{"type":"string","description":"The password to access the instance. Your password must have upper and lower chars, digits and length between 8-72.\n**Please Note**: Only one of `ssh_keys` or `password` can be provided. Password is less secure - we recommend you use an\nSSH key-pair. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The string\nlength must be at least 16.\n","secret":true},"placementOption":{"type":"string","description":"The placement option identifier in which instances are physically located relative to each other within a zone. For\nexample A or B. - If the value of this attribute changes, Terraform will destroy and recreate the resource.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"securityGroupIds":{"type":"array","items":{"type":"string"},"description":"The security groups of the instance. If not provided will be set to the default security group.\n"},"sshKeyIds":{"type":"array","items":{"type":"string"},"description":"The ssh keys of the instance. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/InstanceTimeouts:InstanceTimeouts"},"type":{"type":"string","description":"The instance type identifier. Learn more about instance types\n[here](https://developers.genesiscloud.com/instances#instance-types). - If the value of this attribute changes,\nTerraform will destroy and recreate the resource.\n"},"volumeIds":{"type":"array","items":{"type":"string"},"description":"The volumes of the instance.\n"}},"requiredInputs":["image","region","type"],"stateInputs":{"description":"Input properties used for looking up and filtering Instance resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this image was created in RFC 3339.\n"},"floatingIpId":{"type":"string","description":"The floating IP attached to the instance.\n"},"hostname":{"type":"string","description":"The hostname of your instance. If not provided will be initially set to the `name` attribute. - If the value of this\nattribute is configured and changes, Terraform will destroy and recreate the resource.\n"},"image":{"type":"string","description":"The source image or snapshot of the instance. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource.\n"},"imageId":{"type":"string","description":"The resulting image ID of the instance.\n"},"metadata":{"$ref":"#/types/genesiscloud:index/InstanceMetadata:InstanceMetadata","description":"Option to provide metadata. Currently supported is `startup_script`.\n"},"name":{"type":"string","description":"The human-readable name for the instance.\n"},"password":{"type":"string","description":"The password to access the instance. Your password must have upper and lower chars, digits and length between 8-72.\n**Please Note**: Only one of `ssh_keys` or `password` can be provided. Password is less secure - we recommend you use an\nSSH key-pair. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The string\nlength must be at least 16.\n","secret":true},"placementOption":{"type":"string","description":"The placement option identifier in which instances are physically located relative to each other within a zone. For\nexample A or B. - If the value of this attribute changes, Terraform will destroy and recreate the resource.\n"},"privateIp":{"type":"string","description":"The private IPv4 IP-Address (IPv4 address).\n"},"publicIp":{"type":"string","description":"The public IPv4 IP-Address (IPv4 address).\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"securityGroupIds":{"type":"array","items":{"type":"string"},"description":"The security groups of the instance. If not provided will be set to the default security group.\n"},"sshKeyIds":{"type":"array","items":{"type":"string"},"description":"The ssh keys of the instance. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource.\n"},"status":{"type":"string","description":"The instance status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/InstanceTimeouts:InstanceTimeouts"},"type":{"type":"string","description":"The instance type identifier. Learn more about instance types\n[here](https://developers.genesiscloud.com/instances#instance-types). - If the value of this attribute changes,\nTerraform will destroy and recreate the resource.\n"},"updatedAt":{"type":"string","description":"The timestamp when this image was last updated in RFC 3339.\n"},"volumeIds":{"type":"array","items":{"type":"string"},"description":"The volumes of the instance.\n"}},"type":"object"}},"genesiscloud:index/sSHKey:SSHKey":{"description":"SSH key resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst example = new genesiscloud.SSHKey(\"example\", {publicKey: \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBOpdKM8wSI07+PO4xLDL7zW/kNWGbdFXeHyBU1TRlBn alice@example.com\"});\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\nexample = genesiscloud.SSHKey(\"example\", public_key=\"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBOpdKM8wSI07+PO4xLDL7zW/kNWGbdFXeHyBU1TRlBn alice@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new GenesisCloud.SSHKey(\"example\", new()\n {\n PublicKey = \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBOpdKM8wSI07+PO4xLDL7zW/kNWGbdFXeHyBU1TRlBn alice@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := genesiscloud.NewSSHKey(ctx, \"example\", \u0026genesiscloud.SSHKeyArgs{\n\t\t\tPublicKey: pulumi.String(\"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBOpdKM8wSI07+PO4xLDL7zW/kNWGbdFXeHyBU1TRlBn alice@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.SSHKey;\nimport com.pulumi.genesiscloud.SSHKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new SSHKey(\"example\", SSHKeyArgs.builder() \n .publicKey(\"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBOpdKM8wSI07+PO4xLDL7zW/kNWGbdFXeHyBU1TRlBn alice@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: genesiscloud:SSHKey\n properties:\n publicKey: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBOpdKM8wSI07+PO4xLDL7zW/kNWGbdFXeHyBU1TRlBn alice@example.com\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/sSHKey:SSHKey example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this SSH key was created in RFC 3339.\n"},"fingerprint":{"type":"string","description":"The fingerprint of the SSH key.\n"},"name":{"type":"string","description":"The human-readable name for the SSH key.\n"},"publicKey":{"type":"string","description":"SSH public key. - If the value of this attribute changes, Terraform will destroy and recreate the resource.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SSHKeyTimeouts:SSHKeyTimeouts"}},"required":["createdAt","fingerprint","name","publicKey"],"inputProperties":{"name":{"type":"string","description":"The human-readable name for the SSH key.\n"},"publicKey":{"type":"string","description":"SSH public key. - If the value of this attribute changes, Terraform will destroy and recreate the resource.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SSHKeyTimeouts:SSHKeyTimeouts"}},"requiredInputs":["publicKey"],"stateInputs":{"description":"Input properties used for looking up and filtering SSHKey resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this SSH key was created in RFC 3339.\n"},"fingerprint":{"type":"string","description":"The fingerprint of the SSH key.\n"},"name":{"type":"string","description":"The human-readable name for the SSH key.\n"},"publicKey":{"type":"string","description":"SSH public key. - If the value of this attribute changes, Terraform will destroy and recreate the resource.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SSHKeyTimeouts:SSHKeyTimeouts"}},"type":"object"}},"genesiscloud:index/securityGroup:SecurityGroup":{"description":"Security group resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.SecurityGroup;\nimport com.pulumi.genesiscloud.SecurityGroupArgs;\nimport com.pulumi.genesiscloud.inputs.SecurityGroupRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var allow_https = new SecurityGroup(\"allow-https\", SecurityGroupArgs.builder() \n .region(\"ARC-IS-HAF-1\")\n .rules(SecurityGroupRuleArgs.builder()\n .direction(\"ingress\")\n .port_range_max(443)\n .port_range_min(443)\n .protocol(\"tcp\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n allow-https:\n type: genesiscloud:SecurityGroup\n properties:\n region: ARC-IS-HAF-1\n rules:\n - direction: ingress\n port_range_max: 443\n port_range_min: 443\n protocol: tcp\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/securityGroup:SecurityGroup example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this security group was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description for the security group. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the security group.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"rules":{"type":"array","items":{"$ref":"#/types/genesiscloud:index/SecurityGroupRule:SecurityGroupRule"}},"status":{"type":"string","description":"The security group status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SecurityGroupTimeouts:SecurityGroupTimeouts"}},"required":["createdAt","description","name","region","rules","status"],"inputProperties":{"description":{"type":"string","description":"The human-readable description for the security group. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the security group.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"rules":{"type":"array","items":{"$ref":"#/types/genesiscloud:index/SecurityGroupRule:SecurityGroupRule"}},"timeouts":{"$ref":"#/types/genesiscloud:index/SecurityGroupTimeouts:SecurityGroupTimeouts"}},"requiredInputs":["region","rules"],"stateInputs":{"description":"Input properties used for looking up and filtering SecurityGroup resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this security group was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description for the security group. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the security group.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"rules":{"type":"array","items":{"$ref":"#/types/genesiscloud:index/SecurityGroupRule:SecurityGroupRule"}},"status":{"type":"string","description":"The security group status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SecurityGroupTimeouts:SecurityGroupTimeouts"}},"type":"object"}},"genesiscloud:index/snapshot:Snapshot":{"description":"Snapshot resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst target = new genesiscloud.Instance(\"target\", {});\n// ...\nconst example = new genesiscloud.Snapshot(\"example\", {\n instanceId: target.id,\n retainOnDelete: true,\n});\n// optional\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\ntarget = genesiscloud.Instance(\"target\")\n# ...\nexample = genesiscloud.Snapshot(\"example\",\n instance_id=target.id,\n retain_on_delete=True)\n# optional\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var target = new GenesisCloud.Instance(\"target\");\n\n // ...\n var example = new GenesisCloud.Snapshot(\"example\", new()\n {\n InstanceId = target.Id,\n RetainOnDelete = true,\n });\n\n // optional\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttarget, err := genesiscloud.NewInstance(ctx, \"target\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = genesiscloud.NewSnapshot(ctx, \"example\", \u0026genesiscloud.SnapshotArgs{\n\t\t\tInstanceId: target.ID(),\n\t\t\tRetainOnDelete: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.Instance;\nimport com.pulumi.genesiscloud.Snapshot;\nimport com.pulumi.genesiscloud.SnapshotArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var target = new Instance(\"target\");\n\n var example = new Snapshot(\"example\", SnapshotArgs.builder() \n .instanceId(target.id())\n .retainOnDelete(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n target:\n type: genesiscloud:Instance\n example:\n type: genesiscloud:Snapshot\n properties:\n instanceId: ${target.id}\n retainOnDelete: true\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/snapshot:Snapshot example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this snapshot was created in RFC 3339.\n"},"instanceId":{"type":"string","description":"The id of the instance to snapshot. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource.\n"},"name":{"type":"string","description":"The human-readable name for the snapshot.\n"},"region":{"type":"string","description":"The region identifier.\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the snapshot when the resource is deleted. - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this snapshot given in bytes.\n"},"status":{"type":"string","description":"The snapshot status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SnapshotTimeouts:SnapshotTimeouts"}},"required":["createdAt","instanceId","name","region","retainOnDelete","size","status"],"inputProperties":{"instanceId":{"type":"string","description":"The id of the instance to snapshot. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource.\n"},"name":{"type":"string","description":"The human-readable name for the snapshot.\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the snapshot when the resource is deleted. - Sets the default value \"false\" if the attribute is not set.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SnapshotTimeouts:SnapshotTimeouts"}},"requiredInputs":["instanceId"],"stateInputs":{"description":"Input properties used for looking up and filtering Snapshot resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this snapshot was created in RFC 3339.\n"},"instanceId":{"type":"string","description":"The id of the instance to snapshot. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource.\n"},"name":{"type":"string","description":"The human-readable name for the snapshot.\n"},"region":{"type":"string","description":"The region identifier.\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the snapshot when the resource is deleted. - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this snapshot given in bytes.\n"},"status":{"type":"string","description":"The snapshot status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/SnapshotTimeouts:SnapshotTimeouts"}},"type":"object"}},"genesiscloud:index/volume:Volume":{"description":"Volume resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst example = new genesiscloud.Volume(\"example\", {\n region: \"ARC-IS-HAF-1\",\n size: 50,\n type: \"hdd\",\n});\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\nexample = genesiscloud.Volume(\"example\",\n region=\"ARC-IS-HAF-1\",\n size=50,\n type=\"hdd\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new GenesisCloud.Volume(\"example\", new()\n {\n Region = \"ARC-IS-HAF-1\",\n Size = 50,\n Type = \"hdd\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := genesiscloud.NewVolume(ctx, \"example\", \u0026genesiscloud.VolumeArgs{\n\t\t\tRegion: pulumi.String(\"ARC-IS-HAF-1\"),\n\t\t\tSize: pulumi.Int(50),\n\t\t\tType: pulumi.String(\"hdd\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.Volume;\nimport com.pulumi.genesiscloud.VolumeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Volume(\"example\", VolumeArgs.builder() \n .region(\"ARC-IS-HAF-1\")\n .size(50)\n .type(\"hdd\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: genesiscloud:Volume\n properties:\n region: ARC-IS-HAF-1\n size: 50\n type: hdd\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import genesiscloud:index/volume:Volume example 18efeec8-94f0-4776-8ff2-5e9b49c74608\n```\n\n ","properties":{"createdAt":{"type":"string","description":"The timestamp when this volume was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description for the volume. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the volume.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the volume when the resource is deleted - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this volume given in GiB. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource. - The value must be at least 1.\n"},"status":{"type":"string","description":"The volume status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/VolumeTimeouts:VolumeTimeouts"},"type":{"type":"string","description":"The storage type of the volume. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"hdd\" \"ssd\"].\n"}},"required":["createdAt","description","name","region","retainOnDelete","size","status","type"],"inputProperties":{"description":{"type":"string","description":"The human-readable description for the volume. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the volume.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the volume when the resource is deleted - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this volume given in GiB. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource. - The value must be at least 1.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/VolumeTimeouts:VolumeTimeouts"},"type":{"type":"string","description":"The storage type of the volume. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"hdd\" \"ssd\"].\n"}},"requiredInputs":["region","size","type"],"stateInputs":{"description":"Input properties used for looking up and filtering Volume resources.\n","properties":{"createdAt":{"type":"string","description":"The timestamp when this volume was created in RFC 3339.\n"},"description":{"type":"string","description":"The human-readable description for the volume. - Sets the default value \"\" if the attribute is not set.\n"},"name":{"type":"string","description":"The human-readable name for the volume.\n"},"region":{"type":"string","description":"The region identifier. - If the value of this attribute changes, Terraform will destroy and recreate the resource. - The\nvalue must be one of: [\"ARC-IS-HAF-1\" \"EUC-DE-MUC-1\" \"NORD-NO-KRS-1\"].\n"},"retainOnDelete":{"type":"boolean","description":"Flag to retain the volume when the resource is deleted - Sets the default value \"false\" if the attribute is not set.\n"},"size":{"type":"integer","description":"The storage size of this volume given in GiB. - If the value of this attribute changes, Terraform will destroy and\nrecreate the resource. - The value must be at least 1.\n"},"status":{"type":"string","description":"The volume status.\n"},"timeouts":{"$ref":"#/types/genesiscloud:index/VolumeTimeouts:VolumeTimeouts"},"type":{"type":"string","description":"The storage type of the volume. - If the value of this attribute changes, Terraform will destroy and recreate the\nresource. - The value must be one of: [\"hdd\" \"ssd\"].\n"}},"type":"object"}}},"functions":{"genesiscloud:index/images:Images":{"description":"Images data source\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as genesiscloud from \"@pulumi/genesiscloud\";\n\nconst base-os-images = genesiscloud.Images({\n filter: {\n type: \"base-os\",\n },\n});\nconst snapshots = genesiscloud.Images({\n filter: {\n region: \"ARC-IS-HAF-1\",\n type: \"snapshot\",\n },\n});\nconst preconfigured-images = genesiscloud.Images({\n filter: {\n type: \"preconfigured\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_genesiscloud as genesiscloud\n\nbase_os_images = genesiscloud.images(filter=genesiscloud.ImagesFilterArgs(\n type=\"base-os\",\n))\nsnapshots = genesiscloud.images(filter=genesiscloud.ImagesFilterArgs(\n region=\"ARC-IS-HAF-1\",\n type=\"snapshot\",\n))\npreconfigured_images = genesiscloud.images(filter=genesiscloud.ImagesFilterArgs(\n type=\"preconfigured\",\n))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing GenesisCloud = Pulumi.GenesisCloud;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var base_os_images = GenesisCloud.Images.Invoke(new()\n {\n Filter = new GenesisCloud.Inputs.ImagesFilterInputArgs\n {\n Type = \"base-os\",\n },\n });\n\n var snapshots = GenesisCloud.Images.Invoke(new()\n {\n Filter = new GenesisCloud.Inputs.ImagesFilterInputArgs\n {\n Region = \"ARC-IS-HAF-1\",\n Type = \"snapshot\",\n },\n });\n\n var preconfigured_images = GenesisCloud.Images.Invoke(new()\n {\n Filter = new GenesisCloud.Inputs.ImagesFilterInputArgs\n {\n Type = \"preconfigured\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/genesiscloud/pulumi-genesiscloud/sdk/go/genesiscloud\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := genesiscloud.Images(ctx, \u0026genesiscloud.ImagesArgs{\n\t\t\tFilter: genesiscloud.ImagesFilter{\n\t\t\t\tType: \"base-os\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = genesiscloud.Images(ctx, \u0026genesiscloud.ImagesArgs{\n\t\t\tFilter: genesiscloud.ImagesFilter{\n\t\t\t\tRegion: pulumi.StringRef(\"ARC-IS-HAF-1\"),\n\t\t\t\tType: \"snapshot\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = genesiscloud.Images(ctx, \u0026genesiscloud.ImagesArgs{\n\t\t\tFilter: genesiscloud.ImagesFilter{\n\t\t\t\tType: \"preconfigured\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.genesiscloud.GenesiscloudFunctions;\nimport com.pulumi.genesiscloud.inputs.ImagesArgs;\nimport com.pulumi.genesiscloud.inputs.ImagesFilterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var base-os-images = GenesiscloudFunctions.Images(ImagesArgs.builder()\n .filter(ImagesFilterArgs.builder()\n .type(\"base-os\")\n .build())\n .build());\n\n final var snapshots = GenesiscloudFunctions.Images(ImagesArgs.builder()\n .filter(ImagesFilterArgs.builder()\n .region(\"ARC-IS-HAF-1\")\n .type(\"snapshot\")\n .build())\n .build());\n\n final var preconfigured-images = GenesiscloudFunctions.Images(ImagesArgs.builder()\n .filter(ImagesFilterArgs.builder()\n .type(\"preconfigured\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n base-os-images:\n fn::invoke:\n Function: genesiscloud:Images\n Arguments:\n filter:\n type: base-os\n snapshots:\n fn::invoke:\n Function: genesiscloud:Images\n Arguments:\n filter:\n region: ARC-IS-HAF-1\n type: snapshot\n preconfigured-images:\n fn::invoke:\n Function: genesiscloud:Images\n Arguments:\n filter:\n type: preconfigured\n```\n{{% /example %}}\n{{% /examples %}}","inputs":{"description":"A collection of arguments for invoking Images.\n","properties":{"filter":{"$ref":"#/types/genesiscloud:index/ImagesFilter:ImagesFilter"},"timeouts":{"$ref":"#/types/genesiscloud:index/ImagesTimeouts:ImagesTimeouts"}},"type":"object","required":["filter"]},"outputs":{"description":"A collection of values returned by Images.\n","properties":{"filter":{"$ref":"#/types/genesiscloud:index/ImagesFilter:ImagesFilter"},"id":{"type":"string"},"images":{"items":{"$ref":"#/types/genesiscloud:index/ImagesImage:ImagesImage"},"type":"array"},"timeouts":{"$ref":"#/types/genesiscloud:index/ImagesTimeouts:ImagesTimeouts"}},"required":["filter","id","images"],"type":"object"}}}} \ No newline at end of file diff --git a/provider/resources.go b/provider/resources.go index 8eb2942..9aebab9 100644 --- a/provider/resources.go +++ b/provider/resources.go @@ -61,7 +61,7 @@ func Provider() tfbridge.ProviderInfo { // PluginDownloadURL is an optional URL used to download the Provider // for use in Pulumi programs // e.g https://github.com/org/pulumi-provider-name/releases/ - PluginDownloadURL: "", + PluginDownloadURL: "https://github.com/genesiscloud/pulumi-genesiscloud/releases/", Description: "A Pulumi package for creating and managing genesiscloud cloud resources.", // category/cloud tag helps with categorizing the package in the Pulumi Registry. // For all available categories, see `Keywords` in diff --git a/sdk/go/genesiscloud/internal/pulumiUtilities.go b/sdk/go/genesiscloud/internal/pulumiUtilities.go index 21bbf23..5e35889 100644 --- a/sdk/go/genesiscloud/internal/pulumiUtilities.go +++ b/sdk/go/genesiscloud/internal/pulumiUtilities.go @@ -164,7 +164,7 @@ func callPlainInner( // PkgResourceDefaultOpts provides package level defaults to pulumi.OptionResource. func PkgResourceDefaultOpts(opts []pulumi.ResourceOption) []pulumi.ResourceOption { defaults := []pulumi.ResourceOption{} - + defaults = append(defaults, pulumi.PluginDownloadURL("https://github.com/genesiscloud/pulumi-genesiscloud/releases/")) version := SdkVersion if !version.Equals(semver.Version{}) { defaults = append(defaults, pulumi.Version(version.String())) @@ -175,7 +175,7 @@ func PkgResourceDefaultOpts(opts []pulumi.ResourceOption) []pulumi.ResourceOptio // PkgInvokeDefaultOpts provides package level defaults to pulumi.OptionInvoke. func PkgInvokeDefaultOpts(opts []pulumi.InvokeOption) []pulumi.InvokeOption { defaults := []pulumi.InvokeOption{} - + defaults = append(defaults, pulumi.PluginDownloadURL("https://github.com/genesiscloud/pulumi-genesiscloud/releases/")) version := SdkVersion if !version.Equals(semver.Version{}) { defaults = append(defaults, pulumi.Version(version.String())) diff --git a/sdk/go/genesiscloud/pulumi-plugin.json b/sdk/go/genesiscloud/pulumi-plugin.json index 1533326..c6664ac 100644 --- a/sdk/go/genesiscloud/pulumi-plugin.json +++ b/sdk/go/genesiscloud/pulumi-plugin.json @@ -1,4 +1,5 @@ { "resource": true, - "name": "genesiscloud" + "name": "genesiscloud", + "server": "https://github.com/genesiscloud/pulumi-genesiscloud/releases/" } diff --git a/sdk/nodejs/package.json b/sdk/nodejs/package.json index 5e1d125..5629804 100644 --- a/sdk/nodejs/package.json +++ b/sdk/nodejs/package.json @@ -1,27 +1,28 @@ { - "name": "@pulumi/genesiscloud", - "version": "0.0.1", - "description": "A Pulumi package for creating and managing genesiscloud cloud resources.", - "keywords": [ - "pulumi", - "genesiscloud", - "category/cloud" - ], - "homepage": "https://www.genesiscloud.com", - "repository": "https://github.com/genesiscloud/pulumi-genesiscloud", - "license": "Apache-2.0", - "scripts": { - "build": "tsc" - }, - "dependencies": { - "@pulumi/pulumi": "^3.0.0" - }, - "devDependencies": { - "@types/node": "^10.0.0", - "typescript": "^4.3.5" - }, - "pulumi": { - "resource": true, - "name": "genesiscloud" - } + "name": "@pulumi/genesiscloud", + "version": "${VERSION}", + "description": "A Pulumi package for creating and managing genesiscloud cloud resources.", + "keywords": [ + "pulumi", + "genesiscloud", + "category/cloud" + ], + "homepage": "https://www.genesiscloud.com", + "repository": "https://github.com/genesiscloud/pulumi-genesiscloud", + "license": "Apache-2.0", + "scripts": { + "build": "tsc" + }, + "dependencies": { + "@pulumi/pulumi": "^3.0.0" + }, + "devDependencies": { + "@types/node": "^10.0.0", + "typescript": "^4.3.5" + }, + "pulumi": { + "resource": true, + "name": "genesiscloud", + "server": "https://github.com/genesiscloud/pulumi-genesiscloud/releases/" + } } diff --git a/sdk/nodejs/utilities.ts b/sdk/nodejs/utilities.ts index 080cc82..341b03b 100644 --- a/sdk/nodejs/utilities.ts +++ b/sdk/nodejs/utilities.ts @@ -53,7 +53,7 @@ export function getVersion(): string { /** @internal */ export function resourceOptsDefaults(): any { - return { version: getVersion() }; + return { version: getVersion(), pluginDownloadURL: "https://github.com/genesiscloud/pulumi-genesiscloud/releases/" }; } /** @internal */ diff --git a/sdk/python/README.md b/sdk/python/README.md index f4bfc13..c0c8417 100644 --- a/sdk/python/README.md +++ b/sdk/python/README.md @@ -1,465 +1,55 @@ -# Terraform Bridge Provider Boilerplate +# Foo Resource Provider -This repository contains boilerplate code for building a new Pulumi provider which wraps an existing Terraform provider. +The Genesis Cloud Resource Provider lets you manage [Genesis Cloud](http://genesiscloud.com) resources. -## Background +## Installing -This repository is part of the [guide for authoring and publishing a Pulumi Package](https://www.pulumi.com/docs/guides/pulumi-packages/how-to-author). +This package is available for several languages/platforms: -Learn about the concepts behind [Pulumi Packages](https://www.pulumi.com/docs/guides/pulumi-packages/#pulumi-packages). +### Node.js (JavaScript/TypeScript) -## Creating a Pulumi Terraform Bridge Provider - -The following instructions cover: - -- providers maintained by Pulumi (denoted with a "Pulumi Official" checkmark on the Pulumi registry) -- providers published and maintained by the Pulumi community, referred to as "third-party" providers - -We showcase a Pulumi-owned provider based on an upstream provider named `terraform-provider-foo`. Substitute appropriate values below for your use case. - -> Note: If the name of the desired Pulumi provider differs from the name of the Terraform provider, you will need to carefully distinguish between the references - see for an example. - -### Prerequisites - -Ensure the following tools are installed and present in your `$PATH`: - -- [`pulumictl`](https://github.com/pulumi/pulumictl#installation) -- [Go 1.17](https://golang.org/dl/) or 1.latest -- [NodeJS](https://nodejs.org/en/) 14.x. We recommend using [nvm](https://github.com/nvm-sh/nvm) to manage NodeJS installations. -- [Yarn](https://yarnpkg.com/) -- [TypeScript](https://www.typescriptlang.org/) -- [Python](https://www.python.org/downloads/) (called as `python3`). For recent versions of MacOS, the system-installed version is fine. -- [.NET](https://dotnet.microsoft.com/download) - -### Creating and Initializing the Repository - -Pulumi offers this repository as a [GitHub template repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template) for convenience. From this repository: - -1. Click "Use this template". -1. Set the following options: - - Owner: pulumi (third-party: your GitHub organization/username) - - Repository name: pulumi-foo (third-party: preface your repo name with "pulumi" as standard practice) - - Description: Pulumi provider for Foo - - Repository type: Public -1. Clone the generated repository. - -From the templated repository: - -1. Run the following command to update files to use the name of your provider (third-party: use your GitHub organization/username): - - ```bash - make prepare NAME=foo REPOSITORY=github.com/pulumi/pulumi-foo - ``` - - This will do the following: - - - rename folders in `provider/cmd` to `pulumi-resource-foo` and `pulumi-tfgen-foo` - - replace dependencies in `provider/go.mod` to reflect your repository name - - find and replace all instances of the boilerplate `xyz` with the `NAME` of your provider. - - Note for third-party providers: - - - Make sure to set the correct GitHub organization/username in all files referencing your provider as a dependency: - - `examples/go.mod` - - `provider/resources.go` - - `sdk/go.mod` - - `provider/cmd/pulumi-resource-foo/main.go` - - `provider/cmd/pulumi-tfgen-foo/main.go` - -2. Modify `README-PROVIDER.md` to include the following (we'll rename it to `README.md` toward the end of this guide): - - Any desired build status badges. - - An introductory paragraph describing the type of resources the provider manages, e.g. "The Foo provider for Pulumi manages resources for [Foo](http://example.com/). - - In the "Installing" section, correct package names for the various SDK libraries in the languages Pulumi supports. - - In the "Configuration" section, any configurable options for the provider. These may include, but are not limited to, environment variables or options that can be set via [`pulumi config set`](https://www.pulumi.com/docs/reference/cli/pulumi_config_set/). - - In the "Reference" section, provide a link to the to-be-published documentation. - - Feel free to refer to [the Pulumi AWS provider README](https://github.com/pulumi/pulumi-aws) as an example. - -### Composing the Provider Code - Prerequisites - -Pulumi provider repositories have the following general structure: - -- `examples/` contains sample code which may optionally be included as integration tests to be run as part of a CI/CD pipeline. -- `provider/` contains the Go code used to create the provider as well as generate the SDKs in the various languages that Pulumi supports. - - `provider/cmd/pulumi-tfgen-foo` generates the Pulumi resource schema (`schema.json`), based on the Terraform provider's resources. - - `provider/cmd/pulumi-resource-foo` generates the SDKs in all supported languages from the schema, placing them in the `sdk/` folder. - - `provider/pkg/resources.go` is the location where we will define the Terraform-to-Pulumi mappings for resources. -- `sdk/` contains the generated SDK code for each of the language platforms that Pulumi supports, with each supported platform in a separate subfolder. - -1. In `provider/go.mod`, add a reference to the upstream Terraform provider in the `require` section, e.g. - - ```go - github.com/foo/terraform-provider-foo v0.4.0 - ``` - -1. In `provider/resources.go`, ensure the reference in the `import` section uses the correct Go module path, e.g.: - - ```go - github.com/foo/terraform-provider-foo/foo - ``` - -1. Download the dependencies: - - ```bash - cd provider && go mod tidy && cd - - ``` - -1. Create the schema by running the following command: - - ```bash - make tfgen - ``` - - Note warnings about unmapped resources and data sources in the command's output. We map these in the next section, e.g.: - - ```text - warning: resource foo_something not found in provider map; skipping - warning: resource foo_something_else not found in provider map; skipping - warning: data source foo_something not found in provider map; skipping - warning: data source foo_something_else not found in provider map; skipping - ``` - -## Adding Mappings, Building the Provider and SDKs - -In this section we will add the mappings that allow the interoperation between the Pulumi provider and the Terraform provider. Terraform resources map to an identically named concept in Pulumi. Terraform data sources map to plain old functions in your supported programming language of choice. Pulumi also allows provider functions and resources to be grouped into _namespaces_ to improve the cohesion of a provider's code, thereby making it easier for developers to use. If your provider has a large number of resources, consider using namespaces to improve usability. - -The following instructions all pertain to `provider/resources.go`, in the section of the code where we construct a `tfbridge.ProviderInfo` object: - -1. **Add resource mappings:** For each resource in the provider, add an entry in the `Resources` property of the `tfbridge.ProviderInfo`, e.g.: - - ```go - // Most providers will have all resources (and data sources) in the main module. - // Note the mapping from snake_case HCL naming conventions to UpperCamelCase Pulumi SDK naming conventions. - // The name of the provider is omitted from the mapped name due to the presence of namespaces in all supported Pulumi languages. - "foo_something": {Tok: tfbridge.MakeResource(mainPkg, mainMod, "Something")}, - "foo_something_else": {Tok: tfbridge.MakeResource(mainPkg, mainMod, "SomethingElse")}, - ``` - -1. **Add CSharpName (if necessary):** Dotnet does not allow for fields named the same as the enclosing type, which sometimes results in errors during the dotnet SDK build. - If you see something like - - ```text - error CS0542: 'ApiKey': member names cannot be the same as their enclosing type [/Users/guin/go/src/github.com/pulumi/pulumi-artifactory/sdk/dotnet/Pulumi.Artifactory.csproj] - ``` - - you'll want to give your Resource a CSharpName, which can have any value that makes sense: - - ```go - "foo_something_dotnet": { - Tok: tfbridge.MakeResource(mainPkg, mainMod, "SomethingDotnet"), - Fields: map[string]*tfbridge.SchemaInfo{ - "something_dotnet": { - CSharpName: "SpecialName", - }, - }, - }, - ``` - - [See the underlying terraform-bridge code here.](https://github.com/pulumi/pulumi-terraform-bridge/blob/master/pkg/tfbridge/info.go#L168) - -1. **Add data source mappings:** For each data source in the provider, add an entry in the `DataSources` property of the `tfbridge.ProviderInfo`, e.g.: - - ```go - // Note the 'get' prefix for data sources - "foo_something": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getSomething")}, - "foo_something_else": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getSomethingElse")}, - ``` - -1. **Add documentation mapping (sometimes needed):** If the upstream provider's repo is not a part of the `terraform-providers` GitHub organization, specify the `GitHubOrg` property of `tfbridge.ProviderInfo` to ensure that documentation is picked up by the codegen process, and that attribution for the upstream provider is correct, e.g.: - - ```go - GitHubOrg: "foo", - ``` - -1. **Add provider configuration overrides (not typically needed):** Pulumi's Terraform bridge automatically detects configuration options for the upstream provider. However, in rare cases these settings may need to be overridden, e.g. if we want to change an environment variable default from `API_KEY` to `FOO_API_KEY`. Examples of common uses cases: - - ```go - "additional_required_parameter": {}, - "additional_optional_string_parameter": { - Default: &tfbridge.DefaultInfo{ - Value: "default_value", - }, - "additional_optional_boolean_parameter": { - Default: &tfbridge.DefaultInfo{ - Value: true, - }, - // Renamed environment variables can be accounted for like so: - "apikey": { - Default: &tfbridge.DefaultInfo{ - EnvVars: []string{"FOO_API_KEY"}, - }, - ``` - -1. Build the provider binary and ensure there are no warnings about unmapped resources and no warnings about unmapped data sources: - - ```bash - make provider - ``` - - You may see warnings about documentation and examples, including "unexpected code snippets". These can be safely ignored for now. Pulumi will add additional documentation on mapping docs in a future revision of this guide. - -1. Build the SDKs in the various languages Pulumi supports: - - ```bash - make build_sdks - ``` - -1. Ensure the Golang SDK is a proper go module: - - ```bash - cd sdk && go mod tidy && cd - - ``` - - This will pull in the correct dependencies in `sdk/go.mod` as well as setting the dependency tree in `sdk/go.sum`. - -1. Finally, ensure the provider code conforms to Go standards: - - ```bash - make lint_provider - ``` - - Fix any issues found by the linter. - -**Note:** If you make revisions to code in `resources.go`, you must re-run the `make tfgen` target to regenerate the schema. -The `make tfgen` target will take the file `schema.json` and serialize it to a byte array so that it can be included in the build output. -(This is a holdover from Go 1.16, which does not have the ability to directly embed text files. We are working on removing the need for this step.) - -## Sample Program - -In this section, we will create a Pulumi program in TypeScript that utilizes the provider we created to ensure everything is working properly. - -1. Create an account with the provider's service and generate any necessary credentials, e.g. API keys. - - - Email: bot@pulumi.com - - Password: (Create a random password in 1Password with the maximum length and complexity allowed by the provider.) - - Ensure all secrets (passwords, generated API keys) are stored in Pulumi's 1Password vault. - -1. Copy the `pulumi-resource-foo` binary generated by `make provider` and place it in your `$PATH` (`$GOPATH/bin` is a convenient choice), e.g.: - - ```bash - cp bin/pulumi-resource-foo $GOPATH/bin - ``` - -1. Tell Yarn to use your local copy of the SDK: - - ```bash - make install_nodejs_sdk - ``` - -1. Create a new Pulumi program in the `examples/` directory, e.g.: - - ```bash - mkdir examples/my-example/ts # Change "my-example" to something more meaningful. - cd examples/my-example/ts - pulumi new typescript - # (Go through the prompts with the default values) - npm install - yarn link @pulumi/foo - ``` - -1. Create a minimal program for the provider, i.e. one that creates the smallest-footprint resource. Place this code in `index.ts`. -1. Configure any necessary environment variables for authentication, e.g `$FOO_USERNAME`, `$FOO_TOKEN`, in your local environment. -1. Ensure the program runs successfully via `pulumi up`. -1. Once the program completes successfully, verify the resource was created in the provider's UI. -1. Destroy any resources created by the program via `pulumi destroy`. - -Optionally, you may create additional examples for SDKs in other languages supported by Pulumi: - -1. Python: - - ```bash - mkdir examples/my-example/py - cd examples/my-example/py - pulumi new python - # (Go through the prompts with the default values) - source venv/bin/activate # use the virtual Python env that Pulumi sets up for you - pip install pulumi_foo - ``` - -1. Follow the steps above to verify the program runs successfully. - -## Add End-to-end Testing - -We can run integration tests on our examples using the `*_test.go` files in the `examples/` folder. - -1. Add code to `examples_nodejs_test.go` to call the example you created, e.g.: - - ```go - // Swap out MyExample and "my-example" below with the name of your integration test. - func TestAccMyExampleTs(t *testing.T) { - test := getJSBaseOptions(t). - With(integration.ProgramTestOptions{ - Dir: filepath.Join(getCwd(t), "my-example", "ts"), - }) - integration.ProgramTest(t, &test) - } - ``` - -1. Add a similar function for each example that you want to run in an integration test. For examples written in other languages, create similar files for `examples_${LANGUAGE}_test.go`. - -1. You can run these tests locally via Make: - - ```bash - make test - ``` - - You can also run each test file separately via test tags: - - ```bash - cd examples && go test -v -tags=nodejs - ``` - -## Configuring CI with GitHub Actions - -### Third-party providers - -1. Follow the instructions laid out in the [deployment templates](./deployment-templates/README-DEPLOYMENT.md). - -### Pulumi Internal - -In this section, we'll add the necessary configuration to work with GitHub Actions for Pulumi's standard CI/CD workflows for providers. - -1. Generate GitHub workflows per [the instructions in the ci-mgmt repository](https://github.com/pulumi/ci-mgmt/) and copy to `.github/` in this repository. - -1. Ensure that any required secrets are present as repository-level [secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets) in GitHub. These will be used by the integration tests during the CI/CD process. - -1. Repository settings: Toggle `Allow auto-merge` on in your provider repo to automate GitHub Actions workflow updates. - -## Final Steps - -1. Ensure all required configurations (API keys, etc.) are documented in README-PROVIDER.md. - -1. Replace this file with the README for the provider and push your changes: - - ```bash - mv README-PROVIDER.md README.md - ``` - -1. If publishing the npm package fails during the "Publish SDKs" Action, perform the following steps: - 1. Go to [NPM Packages](https://www.npmjs.com/) and sign in as pulumi-bot. - 1. Click on the bot's profile pic and navigate to "Packages". - 1. On the left, under "Organizations, click on the Pulumi organization. - 1. On the last page of the listed packages, you should see the new package. - 1. Under "Settings", set the Package Status to "public". - -Now you are ready to use the provider, cut releases, and have some well-deserved :ice_cream:! - -## Building the Provider Locally - -There are 2 ways the provider can be built locally: - -`make provider` will use the current operating system and architecture to create a binary that can be used on your PATH. - -To build the provider for another set of operating systems / architectures, the project uses [goreleaser](https://goreleaser.com/). -Goreleaser, a CLI tool, that allows a user to build a matrix of binaries. - -Create a `.goreleaser.yml` file in the root of your project: - -```yaml -archives: - - id: archive - name_template: "{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{ .Arch }}" -before: - hooks: - - make tfgen -builds: - - binary: pulumi-resource-xyz - dir: provider - goarch: - - amd64 - - arm64 - goos: - - darwin - - windows - - linux - ignore: [] - ldflags: - - -X github.com/genesiscloud/pulumi-genesiscloud/provider/pkg/version.Version={{.Tag}} - main: ./cmd/pulumi-resource-genesiscloud/ - sort: asc - use: git -release: - disable: false -snapshot: - name_template: "{{ .Tag }}-SNAPSHOT" -``` - -To build the provider for the combination of architectures and operating systems, you can run the following CLI command: +To use from JavaScript or TypeScript in Node.js, install using either `npm`: ```bash -goreleaser build --rm-dist --skip-validate +npm install @pulumi/genesiscloud ``` -That will ensure that a list of binaries are available to use: +or `yarn`: ```bash - -▶ tree dist -dist -├── CHANGELOG.md -├── artifacts.json -├── config.yaml -├── metadata.json -├── pulumi-xyz_darwin_amd64_v1 -│ └── pulumi-resource-xyz -├── pulumi-xyz_darwin_arm64 -│ └── pulumi-resource-xyz -├── pulumi-xyz_linux_amd64_v1 -│ └── pulumi-resource-xyz -├── pulumi-xyz_linux_arm64 -│ └── pulumi-resource-xyz -├── pulumi-xyz_windows_amd64_v1 -│ └── pulumi-resource-xyz.exe -└── pulumi-xyz_windows_arm64 - └── pulumi-resource-xyz.exe +yarn add @pulumi/genesiscloud ``` -Any of the provider binaries can be used to target the correct machine architecture - -## The Shim Pattern +### Python -If you receive the following error: `use of internal package github.com/example/terraform-provider-example/internal/provider not allowed`, you need to use -the shim model below, and replace the example item: - - +To use from Python, install using `pip`: ```bash +pip install pulumi_genesiscloud +``` -mkdir -p provider/shim -cat <<-EOF> provider/shim/go.mod -module github.com/example/terraform-provider-example/shim - -go 1.18 - -require github.com/hashicorp/terraform-plugin-sdk/v2 v2.22.0 -require github.com/example/terraform-provider-example v1.0.0 - -EOF +### Go -cat <<-EOF> provider/shim/shim.go -package shim +To use from Go, use `go get` to grab the latest version of the library: -import ( - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/example/terraform-provider-example/internal/provider" -) +```bash +go get github.com/genesiscloud/pulumi-genesiscloud/sdk/go/... +``` -// fix provider.Provider here to match whats in internal/provider -func Provider() *schema.Provider { - return provider.Provider() -} +### .NET -EOF +NOTE: Not yet supported. -cd provider/shim/ && go mod tidy && cd ../../ +To use from .NET, install using `dotnet add package`: -cat <> provider/go.mod -replace github.com/example/terraform-provider-example/shim => ./shim -require github.com/example/terraform-provider-example/shim v0.0.0 -EOF +```bash +dotnet add package Pulumi.GenesisCloud +``` -cd provider && go mod tidy +## Reference -``` +For detailed reference documentation, please visit [the Pulumi registry](https://www.pulumi.com/registry/packages/genesiscloud/api-docs/). - +## Developing the provider +TODO: add information on how to develop the provider. diff --git a/sdk/python/pulumi_genesiscloud/_utilities.py b/sdk/python/pulumi_genesiscloud/_utilities.py index e3b8564..ee42211 100644 --- a/sdk/python/pulumi_genesiscloud/_utilities.py +++ b/sdk/python/pulumi_genesiscloud/_utilities.py @@ -288,4 +288,4 @@ async def _await_output(o: pulumi.Output[typing.Any]) -> typing.Tuple[object, bo ) def get_plugin_download_url(): - return None + return "https://github.com/genesiscloud/pulumi-genesiscloud/releases/" diff --git a/sdk/python/pulumi_genesiscloud/pulumi-plugin.json b/sdk/python/pulumi_genesiscloud/pulumi-plugin.json index 1533326..c6664ac 100644 --- a/sdk/python/pulumi_genesiscloud/pulumi-plugin.json +++ b/sdk/python/pulumi_genesiscloud/pulumi-plugin.json @@ -1,4 +1,5 @@ { "resource": true, - "name": "genesiscloud" + "name": "genesiscloud", + "server": "https://github.com/genesiscloud/pulumi-genesiscloud/releases/" }