1. Packages
  2. Juju Provider
juju 0.19.0-rc1 published on Tuesday, Apr 22, 2025 by juju

Juju Provider

juju logo
juju 0.19.0-rc1 published on Tuesday, Apr 22, 2025 by juju

    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
    

    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
    

    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
    

    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')"
    

    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
    
    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",
            },
        ],
    });
    
    # Pulumi.yaml provider configuration file
    name: configuration-example
    runtime: python
    
    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",
            },
        ])
    
    # Pulumi.yaml provider configuration file
    name: configuration-example
    runtime: dotnet
    
    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",
                },
            },
        });
    
    });
    
    # Pulumi.yaml provider configuration file
    name: configuration-example
    runtime: go
    
    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
    	})
    }
    
    # Pulumi.yaml provider configuration file
    name: configuration-example
    runtime: yaml
    
    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
    
    # Pulumi.yaml provider configuration file
    name: configuration-example
    runtime: java
    
    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());
    
        }
    }
    
    # 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
    
    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",
            },
        ],
    });
    
    # 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
    
    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",
            },
        ])
    
    # 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
    
    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",
                },
            },
        });
    
    });
    
    # 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
    
    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
    	})
    }
    
    # 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
    
    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
    
    # 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
    
    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());
    
        }
    }
    

    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
    
    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",
            },
        ],
    });
    
    # 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
    
    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",
            },
        ])
    
    # 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
    
    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",
                },
            },
        });
    
    });
    
    # 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
    
    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
    	})
    }
    
    # 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
    
    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
    
    # 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
    
    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());
    
        }
    }
    

    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
    juju logo
    juju 0.19.0-rc1 published on Tuesday, Apr 22, 2025 by juju