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
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
- Juju
2.9.49+
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 theJUJU_CA_CERT
environment variableclientId
(String) This is the client ID to be used. This can also be set by theJUJU_CLIENT_ID
environment variableclientSecret
(String, Sensitive) This is the client secret to be used. This can also be set by theJUJU_CLIENT_SECRET
environment variablecontrollerAddresses
(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 theJUJU_PASSWORD
environment variableusername
(String) This is the username registered with the controller to be used. This can also be set by theJUJU_USERNAME
environment variable