2018-03-26 00:14:30 +02:00
# Pulumi
2016-10-09 01:01:25 +02:00
2018-06-10 19:35:51 +02:00
Pulumi is a cloud development platform that makes creating cloud programs easy and productive.
2018-03-26 00:14:30 +02:00
2018-06-18 10:33:10 +02:00
Author cloud programs in your favorite language and Pulumi will automatically keep your
2018-06-17 20:15:03 +02:00
infrastructure up-to-date. Skip the YAML and just write code. Pulumi is multi-language, multi-cloud
and fully extensible in both its engine and ecosystem of packages.
2016-10-09 01:24:26 +02:00
2018-06-10 19:35:51 +02:00
To install the latest Pulumi release, run:
2017-01-02 00:19:22 +01:00
2018-06-10 19:35:51 +02:00
```bash
$ curl -fsSL https://get.pulumi.com/ | sh
```
2018-06-17 20:15:03 +02:00
After installing, you can get started with the `pulumi new` command,
[our examples ](https://github.com/pulumi/examples ), or our [visit project website ](https://pulumi.io/ ) which
includes several [in-depth tutorials ](https://pulumi.io/quickstart ) and
[an interactive tour ](https://pulumi.io/tour ) to walk through the core CLI usage and programming concepts.
Please join [the conversation on Slack ](https://slack.pulumi.io/ ).
2018-06-10 19:35:51 +02:00
This repo contains the CLI, language SDKs, and the core Pulumi engine. Individual libraries are in their own repos.
## Platforms
2017-10-10 22:40:11 +02:00
2017-10-10 22:41:45 +02:00
| Architecture | Build Status |
| ------------ | ------------ |
2018-04-19 22:44:47 +02:00
| Linux/macOS x64 | [![Linux x64 Build Status ](https://travis-ci.com/pulumi/pulumi.svg?token=cTUUEgrxaTEGyecqJpDn&branch=master )](https://travis-ci.com/pulumi/pulumi) |
2017-11-03 19:40:39 +01:00
| Windows x64 | [![Windows x64 Build Status ](https://ci.appveyor.com/api/projects/status/uqrduw6qnoss7g4i?svg=true&branch=master )](https://ci.appveyor.com/project/pulumi/pulumi) |
2017-10-10 22:40:11 +02:00
2018-06-10 19:35:51 +02:00
## Languages
2017-02-25 19:46:26 +01:00
2018-06-10 19:35:51 +02:00
| Language | Status | Runtime | Readme |
| -------- | ------ | ------- | -------- |
| JavaScript | Stable | Node.js 6.x-10.x | [Readme ](./sdk/nodejs ) |
| TypeScript | Stable | Node.js 6.x-10.x | [Readme ](./sdk/nodejs ) |
2018-06-15 22:37:27 +02:00
| Python | Preview | Python 2.7 | [Readme ](./sdk/python ) |
2018-06-10 19:35:51 +02:00
| Go | Preview | Go 1.x | [Readme ](./sdk/go ) |
2017-02-25 19:46:26 +01:00
2018-06-10 19:35:51 +02:00
## Clouds
2017-02-25 19:46:26 +01:00
2018-06-10 19:35:51 +02:00
| Cloud | Status | Docs | Repo |
| ----- | ------ | ---- | ---- |
| Amazon Web Services | Stable | [Docs ](https://pulumi.io/reference/pkg/nodejs/@pulumi/aws/ ) | [pulumi/pulumi-aws ](https://github.com/pulumi/pulumi-aws ) |
2018-06-15 22:37:27 +02:00
| Microsoft Azure | Preview | [Docs ](https://pulumi.io/reference/pkg/nodejs/@pulumi/azure/ ) | [pulumi/pulumi-azure ](https://github.com/pulumi/pulumi-azure ) |
2018-06-10 19:35:51 +02:00
| Google Cloud Platform | Preview | [Docs ](https://pulumi.io/reference/pkg/nodejs/@pulumi/gcp/ ) | [pulumi/pulumi-gcp ](https://github.com/pulumi/pulumi-gcp ) |
2018-06-15 22:37:27 +02:00
| Kubernetes | Preview | [Docs ](https://pulumi.io/reference/pkg/nodejs/@pulumi/kubernetes/ ) | [pulumi/pulumi-kubernetes ](https://github.com/pulumi/pulumi-kubernetes ) |
2017-02-25 19:46:26 +01:00
2018-06-10 19:35:51 +02:00
## Libraries
2017-02-25 19:46:26 +01:00
2018-06-10 19:35:51 +02:00
There are several libraries that encapsulate best practices and common patterns:
| Library | Status | Docs | Repo |
| ------- | ------ | ---- | ---- |
| AWS Serverless | Preview | [Docs ](https://pulumi.io/reference/pkg/nodejs/@pulumi/aws-serverless/ ) | [pulumi/pulumi-aws-serverless ](https://github.com/pulumi/pulumi-aws-serverless ) |
2018-06-15 22:37:27 +02:00
| AWS Infrastructure | Preview | [Docs ](https://pulumi.io/reference/pkg/nodejs/@pulumi/aws-infra/ ) | [pulumi/pulumi-aws-infra ](https://github.com/pulumi/pulumi-aws-infra ) |
| Pulumi Multi-Cloud Framework | Preview | [Docs ](https://pulumi.io/reference/pkg/nodejs/@pulumi/cloud/ ) | [pulumi/pulumi-cloud ](https://github.com/pulumi/pulumi-cloud ) |
2018-06-10 19:35:51 +02:00
## Examples
A collection of examples for different languages, clouds, and scenarios is available in the
[pulumi/examples ](https://github.com/pulumi/examples ) repo.
2017-02-25 19:52:01 +01:00
2017-02-25 19:46:26 +01:00
## Development
2018-06-10 19:35:51 +02:00
If you'd like to contribute to Pulumi and/or build from source, this section is for you.
2017-02-25 19:46:26 +01:00
### Prerequisites
2017-02-02 20:09:33 +01:00
2017-09-22 04:18:21 +02:00
Pulumi is written in Go, uses Dep for dependency management, and GoMetaLinter for linting:
2017-02-02 20:09:33 +01:00
2017-06-21 23:23:48 +02:00
* [Go ](https://golang.org/doc/install ): https://golang.org/dl
2017-08-02 03:37:06 +02:00
* [Dep ](https://github.com/golang/dep ): `$ go get -u github.com/golang/dep/cmd/dep`
2017-06-21 23:23:48 +02:00
* [GoMetaLinter ](https://github.com/alecthomas/gometalinter ):
2017-08-02 03:37:06 +02:00
- `$ go get -u github.com/alecthomas/gometalinter`
2017-06-21 23:23:48 +02:00
- `$ gometalinter --install`
2017-02-02 20:09:33 +01:00
2017-02-25 19:46:26 +01:00
### Building and Testing
2017-02-02 04:33:45 +01:00
2018-06-22 01:06:11 +02:00
To install the pre-built SDK, please run `curl -fsSL https://get.pulumi.com/ | sh` , or see detailed installation instructions on [the project page ](https://pulumi.io/ ). Read on if you want to install from source.
2018-06-10 19:35:51 +02:00
To build a complete Pulumi SDK, ensure `$GOPATH` is set, and clone into a standard Go workspace:
2016-11-23 21:41:30 +01:00
2017-09-22 04:18:21 +02:00
$ git clone git@github.com:pulumi/pulumi $GOPATH/src/github.com/pulumi/pulumi
$ cd $GOPATH/src/github.com/pulumi/pulumi
2016-11-23 21:41:30 +01:00
2018-01-10 17:46:04 +01:00
The first time you build, you must `make ensure` to install dependencies and perform other machine setup:
2017-09-12 00:17:11 +02:00
2018-01-10 17:46:04 +01:00
$ make ensure
2017-09-12 00:17:11 +02:00
In the future, you can synch dependencies simply by running `dep ensure` explicitly:
2017-05-24 22:25:28 +02:00
2017-08-02 03:37:06 +02:00
$ dep ensure
2017-05-24 22:25:28 +02:00
At this point you can run `make` to build and run tests:
2016-11-23 21:41:30 +01:00
$ make
2017-09-22 04:18:21 +02:00
This installs the `pulumi` binary into `$GOPATH/bin` , which may now be run provided `make` exited successfully.
2016-11-23 21:41:30 +01:00
2018-01-31 01:31:02 +01:00
The Makefile also supports just running tests (`make test_all` or `make test_fast` ), just running the linter
(`make lint`), just running Govet (`make vet`), and so on. Please just refer to the Makefile for the full list of targets.
2017-05-24 22:25:28 +02:00
2017-02-25 19:52:01 +01:00
### Debugging
2017-01-26 22:50:27 +01:00
2017-09-22 04:18:21 +02:00
The Pulumi tools have extensive logging built in. In fact, we encourage liberal logging in new code, and adding new
2017-01-26 22:50:27 +01:00
logging when debugging problems. This helps to ensure future debugging endeavors benefit from your sleuthing.
2017-03-13 18:51:21 +01:00
All logging is done using Google's [Glog library ](https://github.com/golang/glog ). It is relatively bare-bones, and
adds basic leveled logging, stack dumping, and other capabilities beyond what Go's built-in logging routines offer.
2017-01-26 22:50:27 +01:00
2017-09-22 04:18:21 +02:00
The `pulumi` command line has two flags that control this logging and that can come in handy when debugging problems.
The `--logtostderr` flag spews directly to stderr, rather than the default of logging to files in your temp directory.
And the `--verbose=n` flag (`-v=n` for short) sets the logging level to `n` . Anything greater than 3 is reserved for
2017-01-26 22:50:27 +01:00
debug-level logging, greater than 5 is going to be quite verbose, and anything beyond 7 is extremely noisy.
For example, the command
2018-02-22 23:26:04 +01:00
$ pulumi preview --logtostderr -v=5
2017-01-26 22:50:27 +01:00
is a pretty standard starting point during debugging that will show a fairly comprehensive trace log of a compilation.