1. Packages
  2. Juju Provider
juju 0.18.0 published on Monday, Apr 14, 2025 by juju

Juju Provider

Generate Provider

The Juju provider must be installed as a Local Package by following the instructions for Any Terraform Provider:

pulumi package add terraform-provider juju/juju
Copy

Overview

The provider can be used to interact with Juju - an open source orchestration engine by Canonical. Additionally, the provider supports interactions with JAAS - an orchestrator of Juju controllers.

The provider only interacts with a single controller at a time.

Today this provider allows you to manage the following via resources:

  • Applications and deploy charms
  • Credentials for existing clouds
  • Integrations
  • Machines
  • Models
  • Model ssh keys
  • Offers
  • Users

and refer to the following via functions:

  • Applications
  • Machines
  • Models
  • Offers

Work is ongoing to include support for more of the juju CLIs capabilities within this provider.

Prerequisites

Authentication

There are 3 ways to define credentials for authentication with the Juju controller you wish to target. They are displayed in the order in which the provider looks for credentials.

Static credentials

Define the Juju controller credentials in the provider definition in your pulumi preview.

# Pulumi.yaml provider configuration file
name: configuration-example
runtime:
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070,[fd42:791:fa5e:6834:216:3eff:fe7a:8e6a]:17070
    juju:password:
        value: password1
    juju:username:
        value: jujuuser
Copy

Client credentials

Note: Authentication with client credentials is only supported when communicating with JAAS.

Define the client credentials in the provider definition in your pulumi preview.

# Pulumi.yaml provider configuration file
name: configuration-example
runtime:
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:clientId:
        value: jujuclientid
    juju:clientSecret:
        value: jujuclientsecret
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070,[fd42:791:fa5e:6834:216:3eff:fe7a:8e6a]:17070
Copy

Environment variables

Define the Juju controller credentials in the provider definition via environment variables. These can be set up as follows:

export CONTROLLER=$(juju whoami | yq .Controller)
export JUJU_CONTROLLER_ADDRESSES=$(juju show-controller | yq .$CONTROLLER.details.api-endpoints | yq -r '. | join(",")')
export JUJU_USERNAME="$(cat ~/.local/share/juju/accounts.yaml | yq .controllers.$CONTROLLER.user|tr -d '"')"
export JUJU_PASSWORD="$(cat ~/.local/share/juju/accounts.yaml | yq .controllers.$CONTROLLER.password|tr -d '"')"
export JUJU_CA_CERT="$(juju show-controller $(echo $CONTROLLER|tr -d '"') | yq '.[$CONTROLLER]'.details.\"ca-cert\"|tr -d '"'|sed 's/\\n/\n/g')"
Copy

Populated by the provider via the juju CLI client.

This is the most straightforward solution. Remember that it will use the configuration used by the Juju CLI client at that moment. The fields are populated using the output from running the command juju show-controller with the --show-password flag.

Example Usage

# Pulumi.yaml provider configuration file
name: configuration-example
runtime: nodejs
Copy
import * as pulumi from "@pulumi/pulumi";
import * as juju from "@pulumi/juju";

const development = new juju.Model("development", {
    name: "development",
    clouds: [{
        name: "aws",
        region: "eu-west-1",
    }],
});
const wordpress = new juju.Application("wordpress", {
    name: "wordpress",
    model: development.name,
    charms: [{
        name: "wordpress",
    }],
    units: 3,
});
const percona_cluster = new juju.Application("percona-cluster", {
    name: "percona-cluster",
    model: development.name,
    charms: [{
        name: "percona-cluster",
    }],
    units: 3,
});
const wpToPercona = new juju.Integration("wp_to_percona", {
    model: development.name,
    applications: [
        {
            name: wordpress.name,
            endpoint: "db",
        },
        {
            name: percona_cluster.name,
            endpoint: "server",
        },
    ],
});
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: python
Copy
import pulumi
import pulumi_juju as juju

development = juju.Model("development",
    name="development",
    clouds=[{
        "name": "aws",
        "region": "eu-west-1",
    }])
wordpress = juju.Application("wordpress",
    name="wordpress",
    model=development.name,
    charms=[{
        "name": "wordpress",
    }],
    units=3)
percona_cluster = juju.Application("percona-cluster",
    name="percona-cluster",
    model=development.name,
    charms=[{
        "name": "percona-cluster",
    }],
    units=3)
wp_to_percona = juju.Integration("wp_to_percona",
    model=development.name,
    applications=[
        {
            "name": wordpress.name,
            "endpoint": "db",
        },
        {
            "name": percona_cluster.name,
            "endpoint": "server",
        },
    ])
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: dotnet
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Juju = Pulumi.Juju;

return await Deployment.RunAsync(() =>
{
    var development = new Juju.Model("development", new()
    {
        Name = "development",
        Clouds = new[]
        {
            new Juju.Inputs.ModelCloudArgs
            {
                Name = "aws",
                Region = "eu-west-1",
            },
        },
    });

    var wordpress = new Juju.Application("wordpress", new()
    {
        Name = "wordpress",
        Model = development.Name,
        Charms = new[]
        {
            new Juju.Inputs.ApplicationCharmArgs
            {
                Name = "wordpress",
            },
        },
        Units = 3,
    });

    var percona_cluster = new Juju.Application("percona-cluster", new()
    {
        Name = "percona-cluster",
        Model = development.Name,
        Charms = new[]
        {
            new Juju.Inputs.ApplicationCharmArgs
            {
                Name = "percona-cluster",
            },
        },
        Units = 3,
    });

    var wpToPercona = new Juju.Integration("wp_to_percona", new()
    {
        Model = development.Name,
        Applications = new[]
        {
            new Juju.Inputs.IntegrationApplicationArgs
            {
                Name = wordpress.Name,
                Endpoint = "db",
            },
            new Juju.Inputs.IntegrationApplicationArgs
            {
                Name = percona_cluster.Name,
                Endpoint = "server",
            },
        },
    });

});
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: go
Copy
package main

import (
	"github.com/pulumi/pulumi-pulumi-provider/sdks/go/juju/juju"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		development, err := juju.NewModel(ctx, "development", &juju.ModelArgs{
			Name: pulumi.String("development"),
			Clouds: juju.ModelCloudArray{
				&juju.ModelCloudArgs{
					Name:   pulumi.String("aws"),
					Region: pulumi.String("eu-west-1"),
				},
			},
		})
		if err != nil {
			return err
		}
		wordpress, err := juju.NewApplication(ctx, "wordpress", &juju.ApplicationArgs{
			Name:  pulumi.String("wordpress"),
			Model: development.Name,
			Charms: juju.ApplicationCharmArray{
				&juju.ApplicationCharmArgs{
					Name: pulumi.String("wordpress"),
				},
			},
			Units: pulumi.Float64(3),
		})
		if err != nil {
			return err
		}
		percona_cluster, err := juju.NewApplication(ctx, "percona-cluster", &juju.ApplicationArgs{
			Name:  pulumi.String("percona-cluster"),
			Model: development.Name,
			Charms: juju.ApplicationCharmArray{
				&juju.ApplicationCharmArgs{
					Name: pulumi.String("percona-cluster"),
				},
			},
			Units: pulumi.Float64(3),
		})
		if err != nil {
			return err
		}
		_, err = juju.NewIntegration(ctx, "wp_to_percona", &juju.IntegrationArgs{
			Model: development.Name,
			Applications: juju.IntegrationApplicationArray{
				&juju.IntegrationApplicationArgs{
					Name:     wordpress.Name,
					Endpoint: pulumi.String("db"),
				},
				&juju.IntegrationApplicationArgs{
					Name:     percona_cluster.Name,
					Endpoint: pulumi.String("server"),
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: yaml
Copy
resources:
  development:
    type: juju:Model
    properties:
      name: development
      clouds:
        - name: aws
          region: eu-west-1
  wordpress:
    type: juju:Application
    properties:
      name: wordpress
      model: ${development.name}
      charms:
        - name: wordpress
      units: 3
  percona-cluster:
    type: juju:Application
    properties:
      name: percona-cluster
      model: ${development.name}
      charms:
        - name: percona-cluster
      units: 3
  wpToPercona:
    type: juju:Integration
    name: wp_to_percona
    properties:
      model: ${development.name}
      applications:
        - name: ${wordpress.name}
          endpoint: db
        - name: ${["percona-cluster"].name}
          endpoint: server
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: java
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.juju.Model;
import com.pulumi.juju.ModelArgs;
import com.pulumi.juju.inputs.ModelCloudArgs;
import com.pulumi.juju.Application;
import com.pulumi.juju.ApplicationArgs;
import com.pulumi.juju.inputs.ApplicationCharmArgs;
import com.pulumi.juju.Integration;
import com.pulumi.juju.IntegrationArgs;
import com.pulumi.juju.inputs.IntegrationApplicationArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var development = new Model("development", ModelArgs.builder()
            .name("development")
            .clouds(ModelCloudArgs.builder()
                .name("aws")
                .region("eu-west-1")
                .build())
            .build());

        var wordpress = new Application("wordpress", ApplicationArgs.builder()
            .name("wordpress")
            .model(development.name())
            .charms(ApplicationCharmArgs.builder()
                .name("wordpress")
                .build())
            .units(3)
            .build());

        var percona_cluster = new Application("percona-cluster", ApplicationArgs.builder()
            .name("percona-cluster")
            .model(development.name())
            .charms(ApplicationCharmArgs.builder()
                .name("percona-cluster")
                .build())
            .units(3)
            .build());

        var wpToPercona = new Integration("wpToPercona", IntegrationArgs.builder()
            .model(development.name())
            .applications(
                IntegrationApplicationArgs.builder()
                    .name(wordpress.name())
                    .endpoint("db")
                    .build(),
                IntegrationApplicationArgs.builder()
                    .name(percona_cluster.name())
                    .endpoint("server")
                    .build())
            .build());

    }
}
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: nodejs
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070
    juju:password:
        value: password1
    juju:username:
        value: jujuuser
Copy
import * as pulumi from "@pulumi/pulumi";
import * as juju from "@pulumi/juju";

const development = new juju.Model("development", {
    name: "development",
    clouds: [{
        name: "aws",
        region: "eu-west-1",
    }],
});
const wordpress = new juju.Application("wordpress", {
    name: "wordpress",
    model: development.name,
    charms: [{
        name: "wordpress",
    }],
    units: 3,
});
const percona_cluster = new juju.Application("percona-cluster", {
    name: "percona-cluster",
    model: development.name,
    charms: [{
        name: "percona-cluster",
    }],
    units: 3,
});
const wpToPercona = new juju.Integration("wp_to_percona", {
    model: development.name,
    applications: [
        {
            name: wordpress.name,
            endpoint: "db",
        },
        {
            name: percona_cluster.name,
            endpoint: "server",
        },
    ],
});
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: python
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070
    juju:password:
        value: password1
    juju:username:
        value: jujuuser
Copy
import pulumi
import pulumi_juju as juju

development = juju.Model("development",
    name="development",
    clouds=[{
        "name": "aws",
        "region": "eu-west-1",
    }])
wordpress = juju.Application("wordpress",
    name="wordpress",
    model=development.name,
    charms=[{
        "name": "wordpress",
    }],
    units=3)
percona_cluster = juju.Application("percona-cluster",
    name="percona-cluster",
    model=development.name,
    charms=[{
        "name": "percona-cluster",
    }],
    units=3)
wp_to_percona = juju.Integration("wp_to_percona",
    model=development.name,
    applications=[
        {
            "name": wordpress.name,
            "endpoint": "db",
        },
        {
            "name": percona_cluster.name,
            "endpoint": "server",
        },
    ])
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: dotnet
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070
    juju:password:
        value: password1
    juju:username:
        value: jujuuser
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Juju = Pulumi.Juju;

return await Deployment.RunAsync(() =>
{
    var development = new Juju.Model("development", new()
    {
        Name = "development",
        Clouds = new[]
        {
            new Juju.Inputs.ModelCloudArgs
            {
                Name = "aws",
                Region = "eu-west-1",
            },
        },
    });

    var wordpress = new Juju.Application("wordpress", new()
    {
        Name = "wordpress",
        Model = development.Name,
        Charms = new[]
        {
            new Juju.Inputs.ApplicationCharmArgs
            {
                Name = "wordpress",
            },
        },
        Units = 3,
    });

    var percona_cluster = new Juju.Application("percona-cluster", new()
    {
        Name = "percona-cluster",
        Model = development.Name,
        Charms = new[]
        {
            new Juju.Inputs.ApplicationCharmArgs
            {
                Name = "percona-cluster",
            },
        },
        Units = 3,
    });

    var wpToPercona = new Juju.Integration("wp_to_percona", new()
    {
        Model = development.Name,
        Applications = new[]
        {
            new Juju.Inputs.IntegrationApplicationArgs
            {
                Name = wordpress.Name,
                Endpoint = "db",
            },
            new Juju.Inputs.IntegrationApplicationArgs
            {
                Name = percona_cluster.Name,
                Endpoint = "server",
            },
        },
    });

});
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: go
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070
    juju:password:
        value: password1
    juju:username:
        value: jujuuser
Copy
package main

import (
	"github.com/pulumi/pulumi-pulumi-provider/sdks/go/juju/juju"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		development, err := juju.NewModel(ctx, "development", &juju.ModelArgs{
			Name: pulumi.String("development"),
			Clouds: juju.ModelCloudArray{
				&juju.ModelCloudArgs{
					Name:   pulumi.String("aws"),
					Region: pulumi.String("eu-west-1"),
				},
			},
		})
		if err != nil {
			return err
		}
		wordpress, err := juju.NewApplication(ctx, "wordpress", &juju.ApplicationArgs{
			Name:  pulumi.String("wordpress"),
			Model: development.Name,
			Charms: juju.ApplicationCharmArray{
				&juju.ApplicationCharmArgs{
					Name: pulumi.String("wordpress"),
				},
			},
			Units: pulumi.Float64(3),
		})
		if err != nil {
			return err
		}
		percona_cluster, err := juju.NewApplication(ctx, "percona-cluster", &juju.ApplicationArgs{
			Name:  pulumi.String("percona-cluster"),
			Model: development.Name,
			Charms: juju.ApplicationCharmArray{
				&juju.ApplicationCharmArgs{
					Name: pulumi.String("percona-cluster"),
				},
			},
			Units: pulumi.Float64(3),
		})
		if err != nil {
			return err
		}
		_, err = juju.NewIntegration(ctx, "wp_to_percona", &juju.IntegrationArgs{
			Model: development.Name,
			Applications: juju.IntegrationApplicationArray{
				&juju.IntegrationApplicationArgs{
					Name:     wordpress.Name,
					Endpoint: pulumi.String("db"),
				},
				&juju.IntegrationApplicationArgs{
					Name:     percona_cluster.Name,
					Endpoint: pulumi.String("server"),
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: yaml
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070
    juju:password:
        value: password1
    juju:username:
        value: jujuuser
Copy
resources:
  development:
    type: juju:Model
    properties:
      name: development
      clouds:
        - name: aws
          region: eu-west-1
  wordpress:
    type: juju:Application
    properties:
      name: wordpress
      model: ${development.name}
      charms:
        - name: wordpress
      units: 3
  percona-cluster:
    type: juju:Application
    properties:
      name: percona-cluster
      model: ${development.name}
      charms:
        - name: percona-cluster
      units: 3
  wpToPercona:
    type: juju:Integration
    name: wp_to_percona
    properties:
      model: ${development.name}
      applications:
        - name: ${wordpress.name}
          endpoint: db
        - name: ${["percona-cluster"].name}
          endpoint: server
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: java
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070
    juju:password:
        value: password1
    juju:username:
        value: jujuuser
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.juju.Model;
import com.pulumi.juju.ModelArgs;
import com.pulumi.juju.inputs.ModelCloudArgs;
import com.pulumi.juju.Application;
import com.pulumi.juju.ApplicationArgs;
import com.pulumi.juju.inputs.ApplicationCharmArgs;
import com.pulumi.juju.Integration;
import com.pulumi.juju.IntegrationArgs;
import com.pulumi.juju.inputs.IntegrationApplicationArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var development = new Model("development", ModelArgs.builder()
            .name("development")
            .clouds(ModelCloudArgs.builder()
                .name("aws")
                .region("eu-west-1")
                .build())
            .build());

        var wordpress = new Application("wordpress", ApplicationArgs.builder()
            .name("wordpress")
            .model(development.name())
            .charms(ApplicationCharmArgs.builder()
                .name("wordpress")
                .build())
            .units(3)
            .build());

        var percona_cluster = new Application("percona-cluster", ApplicationArgs.builder()
            .name("percona-cluster")
            .model(development.name())
            .charms(ApplicationCharmArgs.builder()
                .name("percona-cluster")
                .build())
            .units(3)
            .build());

        var wpToPercona = new Integration("wpToPercona", IntegrationArgs.builder()
            .model(development.name())
            .applications(
                IntegrationApplicationArgs.builder()
                    .name(wordpress.name())
                    .endpoint("db")
                    .build(),
                IntegrationApplicationArgs.builder()
                    .name(percona_cluster.name())
                    .endpoint("server")
                    .build())
            .build());

    }
}
Copy

Pulumi 0.12 and later with client credentials:

# Pulumi.yaml provider configuration file
name: configuration-example
runtime: nodejs
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:clientId:
        value: jujuclientid
    juju:clientSecret:
        value: jujuclientsecret
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070
Copy
import * as pulumi from "@pulumi/pulumi";
import * as juju from "@pulumi/juju";

const development = new juju.Model("development", {
    name: "development",
    clouds: [{
        name: "aws",
        region: "eu-west-1",
    }],
});
const wordpress = new juju.Application("wordpress", {
    name: "wordpress",
    model: development.name,
    charms: [{
        name: "wordpress",
    }],
    units: 3,
});
const percona_cluster = new juju.Application("percona-cluster", {
    name: "percona-cluster",
    model: development.name,
    charms: [{
        name: "percona-cluster",
    }],
    units: 3,
});
const wpToPercona = new juju.Integration("wp_to_percona", {
    model: development.name,
    applications: [
        {
            name: wordpress.name,
            endpoint: "db",
        },
        {
            name: percona_cluster.name,
            endpoint: "server",
        },
    ],
});
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: python
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:clientId:
        value: jujuclientid
    juju:clientSecret:
        value: jujuclientsecret
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070
Copy
import pulumi
import pulumi_juju as juju

development = juju.Model("development",
    name="development",
    clouds=[{
        "name": "aws",
        "region": "eu-west-1",
    }])
wordpress = juju.Application("wordpress",
    name="wordpress",
    model=development.name,
    charms=[{
        "name": "wordpress",
    }],
    units=3)
percona_cluster = juju.Application("percona-cluster",
    name="percona-cluster",
    model=development.name,
    charms=[{
        "name": "percona-cluster",
    }],
    units=3)
wp_to_percona = juju.Integration("wp_to_percona",
    model=development.name,
    applications=[
        {
            "name": wordpress.name,
            "endpoint": "db",
        },
        {
            "name": percona_cluster.name,
            "endpoint": "server",
        },
    ])
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: dotnet
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:clientId:
        value: jujuclientid
    juju:clientSecret:
        value: jujuclientsecret
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Juju = Pulumi.Juju;

return await Deployment.RunAsync(() =>
{
    var development = new Juju.Model("development", new()
    {
        Name = "development",
        Clouds = new[]
        {
            new Juju.Inputs.ModelCloudArgs
            {
                Name = "aws",
                Region = "eu-west-1",
            },
        },
    });

    var wordpress = new Juju.Application("wordpress", new()
    {
        Name = "wordpress",
        Model = development.Name,
        Charms = new[]
        {
            new Juju.Inputs.ApplicationCharmArgs
            {
                Name = "wordpress",
            },
        },
        Units = 3,
    });

    var percona_cluster = new Juju.Application("percona-cluster", new()
    {
        Name = "percona-cluster",
        Model = development.Name,
        Charms = new[]
        {
            new Juju.Inputs.ApplicationCharmArgs
            {
                Name = "percona-cluster",
            },
        },
        Units = 3,
    });

    var wpToPercona = new Juju.Integration("wp_to_percona", new()
    {
        Model = development.Name,
        Applications = new[]
        {
            new Juju.Inputs.IntegrationApplicationArgs
            {
                Name = wordpress.Name,
                Endpoint = "db",
            },
            new Juju.Inputs.IntegrationApplicationArgs
            {
                Name = percona_cluster.Name,
                Endpoint = "server",
            },
        },
    });

});
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: go
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:clientId:
        value: jujuclientid
    juju:clientSecret:
        value: jujuclientsecret
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070
Copy
package main

import (
	"github.com/pulumi/pulumi-pulumi-provider/sdks/go/juju/juju"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		development, err := juju.NewModel(ctx, "development", &juju.ModelArgs{
			Name: pulumi.String("development"),
			Clouds: juju.ModelCloudArray{
				&juju.ModelCloudArgs{
					Name:   pulumi.String("aws"),
					Region: pulumi.String("eu-west-1"),
				},
			},
		})
		if err != nil {
			return err
		}
		wordpress, err := juju.NewApplication(ctx, "wordpress", &juju.ApplicationArgs{
			Name:  pulumi.String("wordpress"),
			Model: development.Name,
			Charms: juju.ApplicationCharmArray{
				&juju.ApplicationCharmArgs{
					Name: pulumi.String("wordpress"),
				},
			},
			Units: pulumi.Float64(3),
		})
		if err != nil {
			return err
		}
		percona_cluster, err := juju.NewApplication(ctx, "percona-cluster", &juju.ApplicationArgs{
			Name:  pulumi.String("percona-cluster"),
			Model: development.Name,
			Charms: juju.ApplicationCharmArray{
				&juju.ApplicationCharmArgs{
					Name: pulumi.String("percona-cluster"),
				},
			},
			Units: pulumi.Float64(3),
		})
		if err != nil {
			return err
		}
		_, err = juju.NewIntegration(ctx, "wp_to_percona", &juju.IntegrationArgs{
			Model: development.Name,
			Applications: juju.IntegrationApplicationArray{
				&juju.IntegrationApplicationArgs{
					Name:     wordpress.Name,
					Endpoint: pulumi.String("db"),
				},
				&juju.IntegrationApplicationArgs{
					Name:     percona_cluster.Name,
					Endpoint: pulumi.String("server"),
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: yaml
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:clientId:
        value: jujuclientid
    juju:clientSecret:
        value: jujuclientsecret
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070
Copy
resources:
  development:
    type: juju:Model
    properties:
      name: development
      clouds:
        - name: aws
          region: eu-west-1
  wordpress:
    type: juju:Application
    properties:
      name: wordpress
      model: ${development.name}
      charms:
        - name: wordpress
      units: 3
  percona-cluster:
    type: juju:Application
    properties:
      name: percona-cluster
      model: ${development.name}
      charms:
        - name: percona-cluster
      units: 3
  wpToPercona:
    type: juju:Integration
    name: wp_to_percona
    properties:
      model: ${development.name}
      applications:
        - name: ${wordpress.name}
          endpoint: db
        - name: ${["percona-cluster"].name}
          endpoint: server
Copy
# Pulumi.yaml provider configuration file
name: configuration-example
runtime: java
config:
    juju:caCertificate:
        value: 'TODO: file("~/ca-cert.pem")'
    juju:clientId:
        value: jujuclientid
    juju:clientSecret:
        value: jujuclientsecret
    juju:controllerAddresses:
        value: 10.225.205.241:17070,10.225.205.242:17070
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.juju.Model;
import com.pulumi.juju.ModelArgs;
import com.pulumi.juju.inputs.ModelCloudArgs;
import com.pulumi.juju.Application;
import com.pulumi.juju.ApplicationArgs;
import com.pulumi.juju.inputs.ApplicationCharmArgs;
import com.pulumi.juju.Integration;
import com.pulumi.juju.IntegrationArgs;
import com.pulumi.juju.inputs.IntegrationApplicationArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var development = new Model("development", ModelArgs.builder()
            .name("development")
            .clouds(ModelCloudArgs.builder()
                .name("aws")
                .region("eu-west-1")
                .build())
            .build());

        var wordpress = new Application("wordpress", ApplicationArgs.builder()
            .name("wordpress")
            .model(development.name())
            .charms(ApplicationCharmArgs.builder()
                .name("wordpress")
                .build())
            .units(3)
            .build());

        var percona_cluster = new Application("percona-cluster", ApplicationArgs.builder()
            .name("percona-cluster")
            .model(development.name())
            .charms(ApplicationCharmArgs.builder()
                .name("percona-cluster")
                .build())
            .units(3)
            .build());

        var wpToPercona = new Integration("wpToPercona", IntegrationArgs.builder()
            .model(development.name())
            .applications(
                IntegrationApplicationArgs.builder()
                    .name(wordpress.name())
                    .endpoint("db")
                    .build(),
                IntegrationApplicationArgs.builder()
                    .name(percona_cluster.name())
                    .endpoint("server")
                    .build())
            .build());

    }
}
Copy

Configuration Reference

  • caCertificate (String) This is the certificate to use for identification. This can also be set by the JUJU_CA_CERT environment variable
  • clientId (String) This is the client ID to be used. This can also be set by the JUJU_CLIENT_ID environment variable
  • clientSecret (String, Sensitive) This is the client secret to be used. This can also be set by the JUJU_CLIENT_SECRET environment variable
  • controllerAddresses (String) This is the Controller addresses to connect to, defaults to localhost:17070, multiple addresses can be provided in this format: :,:,…. This can also be set by the JUJU_CONTROLLER_ADDRESSES environment variable.
  • password (String, Sensitive) This is the password of the username to be used. This can also be set by the JUJU_PASSWORD environment variable
  • username (String) This is the username registered with the controller to be used. This can also be set by the JUJU_USERNAME environment variable