Pulumi - Developer-First Infrastructure as Code. Your Cloud, Your Language, Your Way 🚀

Overview

Slack GitHub Discussions NPM version Python version NuGet version GoDoc License Gitpod ready-to-code

Pulumi's Infrastructure as Code SDK is the easiest way to create and deploy cloud software that use containers, serverless functions, hosted services, and infrastructure, on any cloud.

Simply write code in your favorite language and Pulumi automatically provisions and manages your AWS, Azure, Google Cloud Platform, and/or Kubernetes resources, using an infrastructure-as-code approach. Skip the YAML, and use standard language features like loops, functions, classes, and package management that you already know and love.

For example, create three web servers:

index.html nohup python -m SimpleHTTPServer 80 &`, }); } ">
let aws = require("@pulumi/aws");
let sg = new aws.ec2.SecurityGroup("web-sg", {
    ingress: [{ protocol: "tcp", fromPort: 80, toPort: 80, cidrBlocks: ["0.0.0.0/0"]}],
});
for (let i = 0; i < 3; i++) {
    new aws.ec2.Instance(`web-${i}`, {
        ami: "ami-7172b611",
        instanceType: "t2.micro",
        securityGroups: [ sg.name ],
        userData: `#!/bin/bash
            echo "Hello, World!" > index.html
            nohup python -m SimpleHTTPServer 80 &`,
    });
}

Or a simple serverless timer that archives Hacker News every day at 8:30AM:

{ require("https").get("https://news.ycombinator.com", res => { let content = ""; res.setEncoding("utf8"); res.on("data", chunk => content += chunk); res.on("end", () => new aws.sdk.DynamoDB.DocumentClient().put({ TableName: snapshots.name.get(), Item: { date: Date.now(), content }, }).promise()); }).end(); }); ">
const aws = require("@pulumi/aws");

const snapshots = new aws.dynamodb.Table("snapshots", {
    attributes: [{ name: "id", type: "S", }],
    hashKey: "id", billingMode: "PAY_PER_REQUEST",
});

aws.cloudwatch.onSchedule("daily-yc-snapshot", "cron(30 8 * * ? *)", () => {
    require("https").get("https://news.ycombinator.com", res => {
        let content = "";
        res.setEncoding("utf8");
        res.on("data", chunk => content += chunk);
        res.on("end", () => new aws.sdk.DynamoDB.DocumentClient().put({
            TableName: snapshots.name.get(),
            Item: { date: Date.now(), content },
        }).promise());
    }).end();
});

Many examples are available spanning containers, serverless, and infrastructure in pulumi/examples.

Pulumi is open source under the Apache 2.0 license, supports many languages and clouds, and is easy to extend. This repo contains the pulumi CLI, language SDKs, and core Pulumi engine, and individual libraries are in their own repos.

Welcome

  • Getting Started: get up and running quickly.

  • Tutorials: walk through end-to-end workflows for creating containers, serverless functions, and other cloud services and infrastructure.

  • Examples: browse a number of useful examples across many languages, clouds, and scenarios including containers, serverless, and infrastructure.

  • Reference Docs: read conceptual documentation, in addition to details on how to configure Pulumi to deploy into your AWS, Azure, or Google Cloud accounts, and/or Kubernetes cluster.

  • Community Slack: join us over at our community Slack channel. Any and all discussion or questions are welcome.

  • GitHub Discussions: Ask your questions or share what you're building with Pulumi.

  • Roadmap: check out what's on the roadmap for the Pulumi project over the coming months.

Getting Started

Watch the video

See the Get Started guide to quickly get started with Pulumi on your platform and cloud of choice.

Otherwise, the following steps demonstrate how to deploy your first Pulumi program, using AWS Serverless Lambdas, in minutes:

  1. Install:

    To install the latest Pulumi release, run the following (see full installation instructions for additional installation options):

    $ curl -fsSL https://get.pulumi.com/ | sh
  2. Create a Project:

    After installing, you can get started with the pulumi new command:

    $ mkdir pulumi-demo && cd pulumi-demo
    $ pulumi new hello-aws-javascript

    The new command offers templates for all languages and clouds. Run it without an argument and it'll prompt you with available projects. This command created an AWS Serverless Lambda project written in JavaScript.

  3. Deploy to the Cloud:

    Run pulumi up to get your code to the cloud:

    $ pulumi up

    This makes all cloud resources needed to run your code. Simply make edits to your project, and subsequent pulumi ups will compute the minimal diff to deploy your changes.

  4. Use Your Program:

    Now that your code is deployed, you can interact with it. In the above example, we can curl the endpoint:

    $ curl $(pulumi stack output url)
  5. Access the Logs:

    If you're using containers or functions, Pulumi's unified logging command will show all of your logs:

    $ pulumi logs -f
  6. Destroy your Resources:

    After you're done, you can remove all resources created by your program:

    $ pulumi destroy -y

To learn more, head over to pulumi.com for much more information, including tutorials, examples, and details of the core Pulumi CLI and programming model concepts.

Platform

CLI

Architecture Build Status
Linux/macOS x64 Linux x64 Build Status
Windows x64 Windows x64 Build Status

Languages

Language Status Runtime
JavaScript Stable Node.js 12+
TypeScript Stable Node.js 12+
Python Stable Python 3.6+
Go Stable Go 1.14+
.NET (C#/F#/VB.NET) Stable .NET Core 3.1+

Clouds

See Supported Clouds for the full list of supported cloud and infrastructure providers.

Contributing

Please See CONTRIBUTING.md for information on building Pulumi from source or contributing improvements.

Comments
  • Toward replacing MSBuild with make+bash on Windows

    Toward replacing MSBuild with make+bash on Windows

    Description

    The main goal of this PR is to have CI run Windows verifications using the same set of Bash+Makefiles that we use on Mac and Linux workers, instead of using a separately coded MSBuild logic as previously.

    It turns out that a lot of tests were never run on Windows (intentionally or not) and therefore require explicit skips or fixes for non-cross-platform builds.

    As a positive side-effect of this refactor, test subset splitting to speed up CI runs now works for Windows in the same way as Linux and Mac.

    Another change I included here that was making it easier to debug issues is making GHA aware of individual test suite steps instead of running one large make test_all target. At the cost of introducing some duplication in the GHA YAML vs Makefile itself, test failures are now isolated to an explicit step that shows which test suite they belong to, which to me makes it a lot faster to read and make sense of failing test output. It also is easy to see how much time each test suite takes.

    The PR does not actually remove the MSBuild project yet as the change only touches PR verification workflow for starters, and will need to be promoted to the master+nightlies+release workflows to fully deprecate MSBuild.

    • [x] Needs https://github.com/pulumi/pulumi/pull/8634 to fix some failures
    • [ ] Fix to use binary installer for gotestsum (source installer is slow)
      • this can be deferred for later, we're just paying extra 30sec on builds, an annoyance
    • [x] Need to check if any of newly introduced windows skips can be relaxed to actually run the tests
      • turned out a bit non-trivial, logged follow up #8646 #8647 #8648 #8649
    • [ ] Verify if we want to keep sxs tests skip
      • it appears that the test is about TypeScript compatibility between HEAD and last-shipped Pulumi; it incurs unusually high cost as it is compiling a node dependency with c/cpp node_gyp; moreover it fails on Windows. I'd recommend keeping it skipped on Windows and even perhaps moving it out of PR verification flow into nightlies/master only, unless we can figure out caching that speeds it up a lot
    • [ ] Verify if OK to skip code coverage on Windows (the trick with coverage-enabled Pulumi build is not working)
      • at this point it seems diminishing returns to push for coverage collection on Windows

    Fixes # (issue)

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
    impact/no-changelog-required 
    opened by t0yv0 254
  • WIP: try to retire msbuild

    WIP: try to retire msbuild

    Description

    Fixes pulumi/home#1692

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
    impact/no-changelog-required 
    opened by t0yv0 176
  • Reify `Input` and `Optional` types in the schema type system.

    Reify `Input` and `Optional` types in the schema type system.

    These changes support arbitrary combinations of input + plain types within a schema. Handling plain types at the property level was not sufficient to support such combinations. Reifying these types required updating quite a bit of code. This is likely to have caused some temporary complications, but should eventually lead to substantial simplification in the SDK and program code generators.

    With the new design, input and optional types are explicit in the schema type system. Optionals will only appear at the outermost level of a type (i.e. Input<Optional<>>, Array<Optional<>>, etc. will not occur). In addition to explicit input types, each object type now has a "plain" shape and an "input" shape. The former uses only plain types; the latter uses input shapes wherever a plain type is not specified. Plain types are indicated in the schema by setting the "plain" property of a type spec to true.

    impact/no-changelog-required 
    opened by pgavlin 142
  • [codegen/typescript] Call site defaults for plain Pulumi Object types

    [codegen/typescript] Call site defaults for plain Pulumi Object types

    Description

    Apply a default function when a object type is passed as an argument to Resource.

    Partial fix for: #8132

    Note: the massive number of files changes is because I needed to change the name of our registration inputs to resourceInputs. The old name (just inputs) conflicted with the inputs package. Changes were made to nodejs/gen.go and the test added is called env-helper (in codegen/internal/test/testdata).

    Checklist

    • [x] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
    language/javascript area/codegen 
    opened by iwahbe 133
  • 5758 for Node JS

    5758 for Node JS

    Description

    Fixes #7944 Part of #5758 for Node JS.

    This brings Node JS to parity with Go and Python. .NET is pending.

    @mikhailshilkov adding you to see if there are blockers to merging this we need to address first. This is a change in codegen and it increases the size of the generated packages. Currently PR checks on azure-native show up as failing which is slightly concerning to me. In the beginning of developing this feature I manually rebuilt azure-native and found a TypeScript compilation issue. I've cut out a part of the azure-native schema and added it to the test suite, so I do not believe the particular issues is happening again, but this is good to discuss. Should I go ahead and try to manually built azure-native with this change prior to merging?

    Thank you.

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
    opened by t0yv0 130
  • [schema] Add IsOverlay option to disable codegen for particular types

    [schema] Add IsOverlay option to disable codegen for particular types

    Description

    Related to https://github.com/pulumi/docs/issues/6740

    Add a new IsOverlay option to schema types and functions that allows providers to document overlays in the schema. This makes it easier to generate API docs consistently, even for code that is generated outside of the typical codegen process.

    Fixes # (issue)

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
    impact/no-changelog-required 
    opened by lblackstone 120
  • Do not generate Go inputty types for output-only schema types

    Do not generate Go inputty types for output-only schema types

    These changes prevent the Go SDK generator from generating input types that are never referenced by rest of the generated SDK. For example, if an object type never appears in a resource input property, these changes will prevent an input type from being generated for that object type. In further pursuit of this goal, these changes prevent the generation of input/output types for function inputs and arguments if function output versions are disabled or if the function does not need an output form.

    In order to preserve backwards compatibility, the extra input types can be retained by setting the generateExtraInputTypes property in the Go language options for a Pulumi package.

    The goal of these changes is to reduce the size of Go SDK, particularly for Azure-Native.

    Fixes: https://github.com/pulumi/pulumi/issues/8194

    opened by mikhailshilkov 119
  • Programgen updates to utilize fn.Output forms in examples and API docs (7949)

    Programgen updates to utilize fn.Output forms in examples and API docs (7949)

    Description

    The goal is to teach programgen to emit fn.Output forms of invokes to simplify example generation.

    Fixes #7949

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
    opened by t0yv0 110
  • 5758 for C#/.NET

    5758 for C#/.NET

    Description

    Fixes #7945 Part of #5758 for .NET/C#

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
    opened by t0yv0 108
  • Add an EnumType to the PCL model

    Add an EnumType to the PCL model

    Introduce a new type in enum type in PCL.

    Languages implementation:

    • [X] C#
    • [x] Python
    • [x] TypeScript
    • [x] Go

    Description

    Fixes #6263

    Checklist

    • [x] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
    impact/no-changelog-required 
    opened by iwahbe 101
  • CI: revamp, use an explicit matrix of test commands

    CI: revamp, use an explicit matrix of test commands

    This vastly increases the number of test jobs, but should have the benefit of ensuring each performs a smaller amount of work and completes more quickly, improving test time when there is low contention for runners.

    Work done in this PR, by commit and impact:

    Re-enables linting on PRs: the GitHub Action lint job by setting the matrix parameters that steps within the job required; it's now working and the linting for Python is fixed.

    Improves readability of the test.yml, test-fast.yml GitHub Action workflows the test matrix an explicit set of shell commands that can be run locally, making it easier to determine which commands to run to reproduce integration test failures.

    Improves verification of what test will run for a given makefile by adding a dryrun mode to all go tests. If the environment variable is set PULUMI_TEST_DRYRUN=true, go tests will print the command line it would run and exit without running tests.

    Improves reliability of running the the monolithic tests/integration package by partitioning it into 5 tests, one for each SDK and one for the rest. This is done by generating a -Run ... command with regular expressions matching tests for each SDK. You can observe in this in the CLI by running:

    PULUMI_TEST_DRYRUN=true make test_integration
    

    Removes special cases to skip certain tests on Windows.

    Halves the time to run the pkg tests by separating out the pkg/codegen/nodejs test into its own job. This package's tests take approximately 15 minutes on their own.

    Fixes the sdk/nodejs sxs test by updating the test to work correctly on Linux & Windows, it was testing an obsolete version of Pulumi (=1.6.0) and it was updated and simplified to enable testing multiple versions of TypeScript, presently it tests ~3.7.3, ^3, and ^4.

    Fixes Python linting to 100% success.

    Improves GitHub Actions caching in all of our jobs by updating setup steps for Python, Go, and Node to enable caching when available.

    Adds a heartbeat that logs to the GitHub Actions every 10 seconds - on Windows "heartbeat" and on *nix a nice 💓 emoji.

    Lastly, parallelizes almost all of our tests and adds a lint rule to ensure future tests are parallelized. This helps keep Windows jobs in particular within a reasonable time to complete.

    impact/no-changelog-required 
    opened by AaronFriel 99
  • [sdk/go] pulumi.IDOutput needs ToInt*Output methods

    [sdk/go] pulumi.IDOutput needs ToInt*Output methods

    Hello!

    • Vote on this issue by adding a 👍 reaction
    • If you want to implement this feature, comment to let us know (we'll work with you on design, scheduling, etc.)

    Issue details

    This reflects the issue raised on: pulumi/pulumi-hcloud#52.

    In a number of providers, including Hetzner and Digital Ocean, the ID of a resource returned by their API is a number and is expected to be passed in as an int in many parts of the API, not a string or stringified int. This results in having to write really awkward code in Go like:

    hcloud.NewServer(ctx, name, &hcloud.ServerArgs{
    ...
    		PublicNets: hcloud.ServerPublicNetArray{
    			&hcloud.ServerPublicNetArgs{
    				Ipv4Enabled: pulumi.Bool(true),
    				Ipv6Enabled: pulumi.Bool(true),
    				Ipv4:        server.ipv4.ID().ToStringOutput().ApplyT(IDtoIntPtr).(pulumi.IntPtrOutput),
    				Ipv6:        server.ipv6.ID().ToStringOutput().ApplyT(IDtoIntPtr).(pulumi.IntPtrOutput),
    			},
    		},
    	},
    

    With IDtoIntPtr being:

    func IDtoIntPtr(val string) (*int, error) {
    	i, err := strconv.Atoi(val)
    	return &i, err
    }
    

    The fact that we don't have a ToInt(Ptr)Output on the IDOutput makes this code really verbose. When you initially run into this issue it's also really hard to figure out how to get around it as you need to realise you need to chain ToStringOutput with ApplyT.

    There might be other ways to solve this, but so far the ToStringOutput().ApplyT() chain seems the only solution people have come up with.

    kind/enhancement needs-triage 
    opened by daenney 1
  • [sdk/go] RegisterResourceOutputs does not result in any outputs

    [sdk/go] RegisterResourceOutputs does not result in any outputs

    What happened?

    I created a component resource based on the docs on https://www.pulumi.com/docs/intro/concepts/resources/components/. I call ctx.RegisterResourceOutputs at the end to register some outputs. When running pulumi up no outputs are displayed and no outputs are available according to pulumi stack output.

    Steps to reproduce

    • Create a component resource
    • Call ctx.RegisterResourceOutputs with pulumi.Map{} that contains key-value pairs
    • Run pulumi up

    Expected Behavior

    I expected the outputs I register to be shown at the end of pulumi up.

    Actual Behavior

    No outputs seem to exist and are not displayed on the console.

    Output of pulumi about

    CLI
    Version 3.46.1 Go Version go1.19.3 Go Compiler gc

    Plugins NAME VERSION go unknown hcloud 1.10.1

    Host
    OS arch Version
    Arch x86_64

    This project is written in go: executable='/usr/bin/go' version='go version go1.19.4 linux/amd64'

    Current Stack: prod

    TYPE URN pulumi:pulumi:Stack urn:pulumi:prod::infra::pulumi:pulumi:Stack::infra-prod pulumi:providers:hcloud urn:pulumi:prod::infra::pulumi:providers:hcloud::provider hcloud:index/placementGroup:PlacementGroup urn:pulumi:prod::infra::hcloud:index/placementGroup:PlacementGroup::spread hcloud:index/sshKey:SshKey urn:pulumi:prod::infra::hcloud:index/sshKey:SshKey::laptop hcloud:index/sshKey:SshKey urn:pulumi:prod::infra::hcloud:index/sshKey:SshKey::desktop hcloud:index/firewall:Firewall urn:pulumi:prod::infra::hcloud:index/firewall:Firewall::firewall

    Found no pending operations associated with prod

    Backend
    Name pulumi.com URL https://app.pulumi.com/daenney User daenney Organizations daenney

    Dependencies: NAME VERSION github.com/pulumi/pulumi-hcloud/sdk 1.10.1 github.com/pulumi/pulumi/sdk/v3 3.44.2

    Pulumi locates its logs in /tmp by default

    Additional context

    type Server struct {
    	pulumi.ResourceState
    
    	ipv4     *hcloud.PrimaryIp
    	ipv6     *hcloud.PrimaryIp
    	instance *hcloud.Server
    }
    
    func NewServer(ctx *pulumi.Context, name string, args *ServerArgs, opts ...pulumi.ResourceOption) (*Server, error) {
    
    	server := &Server{}
    	if err := ctx.RegisterComponentResource("internal:Server", name, server, opts...); err != nil {
    		return nil, err
    	}
    	... create some resources ...
    
    	if err := ctx.RegisterResourceOutputs(server, pulumi.Map{
    		"ipv4": pulumi.Map{
    			"address": server.ipv4.IpAddress,
    			"network": server.ipv4.IpNetwork,
    			"id":      server.ipv4.ID(),
    		},
    		"ipv6": pulumi.Map{
    			"address": server.ipv6.IpAddress,
    			"network": server.ipv6.IpNetwork,
    			"id":      server.ipv6.ID(),
    		},
    		"id": server.instance.ID(),
    	}); err != nil {
    		return server, err
    	}
    
    	return server, nil
    }
    
    $ pulumi up
    Previewing update (prod)
    
    View Live: https://app.pulumi.com/daenney/infra/prod/previews/<redacted>
    
         Type                          Name        Plan       
         pulumi:pulumi:Stack           infra-prod             
     +   └─ internal:Server            eu2         create     
     +      ├─ hcloud:index:PrimaryIp  eu2-ipv6    create     
     +      ├─ hcloud:index:PrimaryIp  eu2-ipv4    create     
     +      └─ hcloud:index:Server     eu2         create     
    
    
    Resources:
        + 4 to create
        6 unchanged
    
    Do you want to perform this update? yes
    Updating (prod)
    
    View Live: https://app.pulumi.com/daenney/infra/prod/updates/20
    
         Type                          Name        Status            
         pulumi:pulumi:Stack           infra-prod   (0.00s)          
     +   └─ internal:Server            eu2         created (21s)     
     +      ├─ hcloud:index:PrimaryIp  eu2-ipv6    created (1s)      
     +      ├─ hcloud:index:PrimaryIp  eu2-ipv4    created (1s)      
     +      └─ hcloud:index:Server     eu2         created (18s)     
    
    
    Resources:
        + 4 created
        6 unchanged
    
    Duration: 24s
    

    Contributing

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

    kind/bug needs-triage 
    opened by daenney 1
  • testing/integration: Fix failure without GOPATH

    testing/integration: Fix failure without GOPATH

    TestGoModEdits requires that one of the following conditions be true for the test to pass:

    • pulumi/pulumi is checked out at $GOPATH/src/github.com/pulumi/pulumi
    • PULUMI_GO_DEP_ROOT is set to the directory where it's checked out

    With wide usage of Go modules, we're less likely to have folks working under GOPATH.

    As for PULUMI_GO_DEP_ROOT, it makes sense for the generic utility: Being able to specify where the dependency is checked out is useful on a per-project basis, but it makes less sense for this test. This test is specifically checking the values inside the sdk/go.mod and the path for that is always fixed.

    This change modifies TestGoModEdits to pass no matter where the repository is checked out -- as long as it's called "pulumi". It does so by hard-coding the position of the repository root relative to the test directory.

    This feels slightly icky because depRoot refers to the directory that contains the "pulumi" directory, but I think that this is less likely to break and easier to fix, versus looking for a go.mod file as the project structure evolves over time.

    impact/no-changelog-required 
    opened by abhinav 1
  • Renamed resource URN is impossible to rename back because it is invalid

    Renamed resource URN is impossible to rename back because it is invalid

    What happened?

    I changed a child-parent relationship for an existing Kubernetes resource. That caused a problem where pulumi thought that's a whole new resource.

    I wanted to rename the resource in the state manually, because as I understand it, the parent-child relation is defined by the resource name:

    pulumi state rename \
        'urn:pulumi:dev::xxx-dev::kubernetes:core/v1:Namespace::amazon_cloudwatchNamespace' \
        'urn:pulumi:dev::xxx-dev::eks:index:Cluster$kubernetes:core/v1:Namespace::amazon_cloudwatchNamespace'
    

    This command succeeded, but (I'll blame the documentation here) the new name was not just the second argument. In fact, the second argument got appended to a "hardcoded prefix" urn:pulumi:dev::xxx-dev::kubernetes:core/v1:Namespace (which, when looking at it now, makes sense, it's just the docs do not mention that).

    So, the new URN of the resource is:

    urn:pulumi:dev::xxx-dev::kubernetes:core/v1:Namespace::urn:pulumi:dev::xxx-dev::eks:index:Cluster$kubernetes:core/v1:Namespace::amazon_cloudwatchNamespace
    

    This is also reported by pulumi stack --show-urns.

    When I realized my mistake, I wanted to fix this mistake it by renaming the resource back to the original, so I ran

    pulumi state rename \
        'urn:pulumi:dev::xxx-dev::kubernetes:core/v1:Namespace::urn:pulumi:dev::xxx-dev::eks:index:Cluster$kubernetes:core/v1:Namespace::amazon_cloudwatchNamespace' \
        'amazon_cloudwatchNamespace'
    

    But now I am getting error from the pulumi CLI:

    error: The provided input URN is not valid
    

    ... which is probably true, fair enough, but then I shouldn't have been allowed to do the rename in the first place. And the state clearly internally has this URN because it's printed out to me.

    Luckily this is just a stack in development so I can just nuke it, but if there is a way to force-rename a resource with an invalid URN, that would be great.

    Edit: pulumi destroy seems to not have any problems with the invalid URN (although it renders then resource name as urn:pulumi:dev).

    Steps to reproduce

    pulumi state rename <URN> <other-URN>
    pulumi stack --show-urns
    
    # This will fail
    pulumi state rename <long-long-URN> <valid name>
    

    Expected Behavior

    Pulumi should not allow me to rename a resource to an invalid URN

    Actual Behavior

    Pulumi let me rename a resource to an invalid URN and now I cannot get it back

    Output of pulumi about

    CLI
    Version      3.50.2
    Go Version   go1.19.4
    Go Compiler  gc
    
    Plugins
    NAME        VERSION
    aws         5.24.0
    awsx        1.0.1
    docker      3.6.1
    eks         1.0.1
    kubernetes  3.23.1
    python      unknown
    
    Host
    OS       darwin
    Version  12.5.1
    Arch     x86_64
    
    Backend
    Name           pulumi.com
    URL            https://app.pulumi.com/melkamar
    User           melkamar
    Organizations  melkamar
    
    Dependencies:
    NAME         VERSION
    pip          22.3.1
    pulumi-awsx  1.0.1
    pulumi-eks   1.0.1
    setuptools   65.6.3
    wheel        0.38.4
    

    Additional context

    No response

    Contributing

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

    kind/bug needs-triage 
    opened by melkamar 0
  • Add JSONUnmarshal to go sdk

    Add JSONUnmarshal to go sdk

    Description

    Partner method to JSONMarshal.

    Checklist

    • [x] I have added tests that prove my fix is effective or that my feature works
    • [x] I have run make changelog and committed the changelog/pending/<file> documenting my change
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
    opened by Frassle 1
  • Distribute Pulumi CLI as npm package

    Distribute Pulumi CLI as npm package

    Hello!

    • Vote on this issue by adding a 👍 reaction
    • If you want to implement this feature, comment to let us know (we'll work with you on design, scheduling, etc.)

    Issue details

    It would be nice to install Pulumi directly from npm, since typescript is arguably the main target. In this way, the pulumi cli could be run with just npx [email protected]

    Moreover, we would be able to track the exact cli version inside our package.json file, and integrate the installation process with other tools relying on npm scripts.

    If you wish, I could help with the actual implementation.

    kind/enhancement 
    opened by lucafabbian 1
Releases(v3.50.2)
Manage your SSH like a boss.

--- storm is a command line tool to manage your ssh connections. features adding, editing, deleting, listing, searching across your SSHConfig. command

Emre Yılmaz 3.9k Jan 03, 2023
Project 4 Cloud DevOps Nanodegree

Project Overview In this project, you will apply the skills you have acquired in this course to operationalize a Machine Learning Microservice API. Yo

1 Nov 21, 2021
strava-offline is a tool to keep a local mirror of Strava activities for further analysis/processing:

strava-offline Overview strava-offline is a tool to keep a local mirror of Strava activities for further analysis/processing: synchronizes metadata ab

Tomáš Janoušek 29 Dec 14, 2022
HXVM - Check Host compatibility with the Virtual Machines

HXVM - Check Host compatibility with the Virtual Machines. Features | Installation | Usage Features Takes input from user to compare how many VMs they

Aman Srivastava 4 Oct 15, 2022
Hw-ci - Hardware CD/CI and Development Container

Hardware CI & Dev Containter These containers were created for my personal hardware development projects and courses duing my undergraduate degree. Pl

Matthew Dwyer 6 Dec 25, 2022
Hatch plugin for Docker containers

hatch-containers CI/CD Package Meta This provides a plugin for Hatch that allows

Ofek Lev 11 Dec 30, 2022
A tool to convert AWS EC2 instances back and forth between On-Demand and Spot billing models.

ec2-spot-converter This tool converts existing AWS EC2 instances back and forth between On-Demand and 'persistent' Spot billing models while preservin

jcjorel 152 Dec 29, 2022
Caboto, the Kubernetes semantic analysis tool

Caboto Caboto, the Kubernetes semantic analysis toolkit. It contains a lightweight Python library for semantic analysis of plain Kubernetes manifests

Michael Schilonka 8 Nov 26, 2022
RMRK spy bot for RMRK hackathon

rmrk_spy_bot RMRK spy bot https://t.me/RMRKspyBot for rmrk hacktoberfest https://rmrk.devpost.com/ Birds and items price and rarity estimation Reports

Victor Ryabinin 2 Sep 06, 2022
SSH to WebSockets Bridge

wssh wssh is a SSH to WebSockets Bridge that lets you invoke a remote shell using nothing but HTTP. The client connecting to wssh doesn't need to spea

Andrea Luzzardi 1.3k Dec 25, 2022
MLops tools review for execution on multiple cluster types: slurm, kubernetes, dask...

MLops tools review focused on execution using multiple cluster types: slurm, kubernetes, dask...

4 Nov 30, 2022
Oracle Cloud Infrastructure Object Storage fsspec implementation

Oracle Cloud Infrastructure Object Storage fsspec implementation The Oracle Cloud Infrastructure Object Storage service is an internet-scale, high-per

Oracle 9 Dec 18, 2022
A cpp project template that uses CMake to build and Google Test / Github Actions to provide a CI

A cpp project template that uses CMake to build and Google Test / Github Actions to provide a CI

Martin Olivier 6 Nov 17, 2022
Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions

Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions

Arie Bregman 35.1k Jan 02, 2023
Python utility function to communicate with a subprocess using iterables: for when data is too big to fit in memory and has to be streamed

iterable-subprocess Python utility function to communicate with a subprocess using iterables: for when data is too big to fit in memory and has to be

Department for International Trade 5 Jul 10, 2022
A system for managing CI data for Mozilla projects

Treeherder Description Treeherder is a reporting dashboard for Mozilla checkins. It allows users to see the results of automatic builds and their resp

Mozilla 235 Dec 22, 2022
A lobby boy will create a VPS server when you need one, and destroy it after using it.

Lobbyboy What is a lobby boy? A lobby boy is completely invisible, yet always in sight. A lobby boy remembers what people hate. A lobby boy anticipate

226 Dec 29, 2022
Remote Desktop Protocol in Twisted Python

RDPY Remote Desktop Protocol in twisted python. RDPY is a pure Python implementation of the Microsoft RDP (Remote Desktop Protocol) protocol (client a

Sylvain Peyrefitte 1.6k Dec 30, 2022
Dockerized iCloud drive

iCloud-drive-docker is a simple iCloud drive client in Docker environment. It uses pyiCloud python library to interact with iCloud

Mandar Patil 376 Jan 01, 2023
A Simple script to hunt unused Kubernetes resources.

K8SPurger A Simple script to hunt unused Kubernetes resources. Release History Release 0.3 Added Ingress Added Services Account Adding RoleBindding Re

Yogesh Kunjir 202 Nov 19, 2022