{"attribution":"This Pulumi package is based on the [`juju` Terraform Provider](https://github.com/juju/terraform-provider-juju).","config":{"variables":{"caCertificate":{"description":"If the controller was deployed with a self-signed certificate: This is the certificate to use for identification. This can also be set by the `JUJU_CA_CERT` environment variable","type":"string"},"clientId":{"description":"If using JAAS: This is the client ID (OAuth2.0, created by the external identity provider) to be used. This can also be set by the `JUJU_CLIENT_ID` environment variable","type":"string"},"clientSecret":{"description":"If using JAAS: This is the client secret (OAuth2.0, created by the external identity provider) to be used. This can also be set by the `JUJU_CLIENT_SECRET` environment variable","secret":true,"type":"string"},"controllerAddresses":{"description":"This is the controller addresses to connect to, defaults to localhost:17070, multiple addresses can be provided in this format: <host>:<port>,<host>:<port>,.... This can also be set by the `JUJU_CONTROLLER_ADDRESSES` environment variable.","type":"string"},"controllerMode":{"description":"If set to true, the provider will only allow managing <span pulumi-lang-nodejs=\"`juju.Controller`\" pulumi-lang-dotnet=\"`juju.Controller`\" pulumi-lang-go=\"`Controller`\" pulumi-lang-python=\"`Controller`\" pulumi-lang-yaml=\"`juju.Controller`\" pulumi-lang-java=\"`juju.Controller`\">`juju.Controller`</span> resources.","type":"boolean"},"defaultTimeouts":{"$ref":"#/types/juju:config%2FdefaultTimeouts:defaultTimeouts","description":"Default timeouts for resource operations. These apply to all resources unless overridden by a resource-level <span pulumi-lang-nodejs=\"`timeouts`\" pulumi-lang-dotnet=\"`Timeouts`\" pulumi-lang-go=\"`timeouts`\" pulumi-lang-python=\"`timeouts`\" pulumi-lang-yaml=\"`timeouts`\" pulumi-lang-java=\"`timeouts`\">`timeouts`</span> block. Values are duration strings, e.g. \"60m\"."},"lazyApiCheck":{"description":"If set to true, the provider will not connect to the controller during planning for creation. This allows for planning the creation of resources without a live controller. However, the provider will still connect to the controller when planning for updates. Note that the validators/checks will not be run until apply time - this is relevant for some resources that are only valid with JAAS.","type":"boolean"},"offeringControllers":{"additionalProperties":{"$ref":"#/types/juju:config%2FofferingControllers:offeringControllers"},"description":"Additional controller details for cross-model integrations. The map key is the controller name.","type":"object"},"password":{"description":"This is the password of the username to be used. This can also be set by the `JUJU_PASSWORD` environment variable","secret":true,"type":"string"},"skipFailedDeletion":{"description":"Whether to issue a warning instead of an error and continue if a resource deletion fails. This can also be set by the `JUJU_SKIP_FAILED_DELETION` environment variable. Defaults to false.","type":"boolean"},"username":{"description":"This is the username registered with the controller to be used. This can also be set by the `JUJU_USERNAME` environment variable","type":"string"}}},"description":"A Pulumi provider dynamically bridged from juju.","functions":{"juju:index/getAction:getAction":{"description":"## Example Usage\n\n","inputs":{"description":"A collection of arguments for invoking getAction.\n","properties":{"actionId":{"description":"The ID of the action whose result is fetched.\n","type":"string"},"modelUuid":{"description":"The UUID of the model where the action was run.\n","type":"string"}},"required":["actionId","modelUuid"],"type":"object"},"outputs":{"description":"A collection of values returned by getAction.\n","properties":{"actionId":{"description":"The ID of the action whose result is fetched.\n","type":"string"},"id":{"description":"The ID of this resource.\n","type":"string"},"modelUuid":{"description":"The UUID of the model where the action was run.\n","type":"string"},"output":{"description":"The output of the action as a JSON string. Use jsondecode() to extract values from it.\n","type":"string"}},"required":["actionId","id","modelUuid","output"],"type":"object"}},"juju:index/getApplication:getApplication":{"description":"A data source that represents a single Juju application deployment from a charm.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst _this = juju.getApplication({\n    name: thisJujuApplication.name,\n    modelUuid: model.uuid,\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nthis = juju.get_application(name=this_juju_application[\"name\"],\n    model_uuid=model[\"uuid\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var @this = Juju.GetApplication.Invoke(new()\n    {\n        Name = thisJujuApplication.Name,\n        ModelUuid = model.Uuid,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.LookupApplication(ctx, &juju.LookupApplicationArgs{\n\t\t\tName:      thisJujuApplication.Name,\n\t\t\tModelUuid: model.Uuid,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JujuFunctions;\nimport com.pulumi.juju.inputs.GetApplicationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var this = JujuFunctions.getApplication(GetApplicationArgs.builder()\n            .name(thisJujuApplication.name())\n            .modelUuid(model.uuid())\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  this:\n    fn::invoke:\n      function: juju:getApplication\n      arguments:\n        name: ${thisJujuApplication.name}\n        modelUuid: ${model.uuid}\n```\n<!--End PulumiCodeChooser -->\n","inputs":{"description":"A collection of arguments for invoking getApplication.\n","properties":{"modelUuid":{"description":"The uuid of the model where the application is deployed.\n","type":"string"},"name":{"description":"Name of the application.\n","type":"string"}},"required":["modelUuid","name"],"type":"object"},"outputs":{"description":"A collection of values returned by getApplication.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"machines":{"description":"The machines on which the application's units are placed.\n","items":{"type":"string"},"type":"array"},"modelUuid":{"description":"The uuid of the model where the application is deployed.\n","type":"string"},"name":{"description":"Name of the application.\n","type":"string"},"unitNumbers":{"description":"The numbers of the units deployed for this application. Ex. [0,1,2]\n","items":{"type":"string"},"type":"array"}},"required":["id","machines","modelUuid","name","unitNumbers"],"type":"object"}},"juju:index/getCharm:getCharm":{"description":"A data source that fetches charm metadata from CharmHub, including the resolved revision, the names and interfaces of all integrations the charm provides or requires.\n","inputs":{"description":"A collection of arguments for invoking getCharm.\n","properties":{"architecture":{"description":"The architecture of the charm, e.g. \"amd64\". Defaults to \"amd64\" when not set.\n","type":"string"},"base":{"description":"The OS base for the charm in the form os@channel, e.g. \"ubuntu@22.04\".\n","type":"string"},"channel":{"description":"The channel to resolve, e.g. \"3/stable\". Required when revision is set.\n","type":"string"},"charm":{"description":"The name of the charm to look up.\n","type":"string"},"revision":{"description":"The revision of the charm to fetch.\n","type":"number"},"storeUrl":{"description":"Base URL of the charm store. Defaults to https://charmhub.io/.\n","type":"string"}},"required":["charm"],"type":"object"},"outputs":{"description":"A collection of values returned by getCharm.\n","properties":{"architecture":{"description":"The architecture of the charm, e.g. \"amd64\". Defaults to \"amd64\" when not set.\n","type":"string"},"base":{"description":"The OS base for the charm in the form os@channel, e.g. \"ubuntu@22.04\".\n","type":"string"},"channel":{"description":"The channel to resolve, e.g. \"3/stable\". Required when revision is set.\n","type":"string"},"charm":{"description":"The name of the charm to look up.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"provides":{"additionalProperties":{"type":"string"},"description":"Integrations provided by the charm. Key is the endpoint name, value is the interface name.\n","type":"object"},"requires":{"additionalProperties":{"type":"string"},"description":"Integrations required by the charm. Key is the endpoint name, value is the interface name.\n","type":"object"},"resources":{"additionalProperties":{"type":"string"},"description":"OCI/file resources for the charm. Key is the resource name, value is the revision number.\n","type":"object"},"revision":{"description":"The revision of the charm to fetch.\n","type":"number"},"storeUrl":{"description":"Base URL of the charm store. Defaults to https://charmhub.io/.\n","type":"string"}},"required":["base","channel","charm","id","provides","requires","resources","revision"],"type":"object"}},"juju:index/getJaasGroup:getJaasGroup":{"description":"A data source representing a Juju JAAS Group.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst test = juju.getJaasGroup({\n    name: \"group-0\",\n});\nexport const groupUuid = test.then(test => test.uuid);\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\ntest = juju.get_jaas_group(name=\"group-0\")\npulumi.export(\"groupUuid\", test.uuid)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var test = Juju.GetJaasGroup.Invoke(new()\n    {\n        Name = \"group-0\",\n    });\n\n    return new Dictionary<string, object?>\n    {\n        [\"groupUuid\"] = test.Apply(getJaasGroupResult => getJaasGroupResult.Uuid),\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := juju.LookupJaasGroup(ctx, &juju.LookupJaasGroupArgs{\n\t\t\tName: \"group-0\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"groupUuid\", test.Uuid)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JujuFunctions;\nimport com.pulumi.juju.inputs.GetJaasGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var test = JujuFunctions.getJaasGroup(GetJaasGroupArgs.builder()\n            .name(\"group-0\")\n            .build());\n\n        ctx.export(\"groupUuid\", test.uuid());\n    }\n}\n```\n```yaml\nvariables:\n  test:\n    fn::invoke:\n      function: juju:getJaasGroup\n      arguments:\n        name: group-0\noutputs:\n  groupUuid: ${test.uuid}\n```\n<!--End PulumiCodeChooser -->\n","inputs":{"description":"A collection of arguments for invoking getJaasGroup.\n","properties":{"name":{"description":"The name of the group.\n","type":"string"}},"required":["name"],"type":"object"},"outputs":{"description":"A collection of values returned by getJaasGroup.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"The name of the group.\n","type":"string"},"uuid":{"description":"The UUID of the group.\n","type":"string"}},"required":["id","name","uuid"],"type":"object"}},"juju:index/getJaasRole:getJaasRole":{"description":"A data source representing a Juju JAAS Role.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst test = juju.getJaasRole({\n    name: \"role-0\",\n});\nexport const roleUuid = test.then(test => test.uuid);\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\ntest = juju.get_jaas_role(name=\"role-0\")\npulumi.export(\"roleUuid\", test.uuid)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var test = Juju.GetJaasRole.Invoke(new()\n    {\n        Name = \"role-0\",\n    });\n\n    return new Dictionary<string, object?>\n    {\n        [\"roleUuid\"] = test.Apply(getJaasRoleResult => getJaasRoleResult.Uuid),\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := juju.LookupJaasRole(ctx, &juju.LookupJaasRoleArgs{\n\t\t\tName: \"role-0\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"roleUuid\", test.Uuid)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JujuFunctions;\nimport com.pulumi.juju.inputs.GetJaasRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var test = JujuFunctions.getJaasRole(GetJaasRoleArgs.builder()\n            .name(\"role-0\")\n            .build());\n\n        ctx.export(\"roleUuid\", test.uuid());\n    }\n}\n```\n```yaml\nvariables:\n  test:\n    fn::invoke:\n      function: juju:getJaasRole\n      arguments:\n        name: role-0\noutputs:\n  roleUuid: ${test.uuid}\n```\n<!--End PulumiCodeChooser -->\n","inputs":{"description":"A collection of arguments for invoking getJaasRole.\n","properties":{"name":{"description":"The name of the role.\n","type":"string"}},"required":["name"],"type":"object"},"outputs":{"description":"A collection of values returned by getJaasRole.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"The name of the role.\n","type":"string"},"uuid":{"description":"The UUID of the role. The UUID is used to reference roles in other resources.\n","type":"string"}},"required":["id","name","uuid"],"type":"object"}},"juju:index/getMachine:getMachine":{"description":"A data source representing a Juju Machine.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst _this = juju.getMachine({\n    modelUuid: development.uuid,\n    machineId: \"2\",\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nthis = juju.get_machine(model_uuid=development[\"uuid\"],\n    machine_id=\"2\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var @this = Juju.GetMachine.Invoke(new()\n    {\n        ModelUuid = development.Uuid,\n        MachineId = \"2\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.LookupMachine(ctx, &juju.LookupMachineArgs{\n\t\t\tModelUuid: development.Uuid,\n\t\t\tMachineId: \"2\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JujuFunctions;\nimport com.pulumi.juju.inputs.GetMachineArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var this = JujuFunctions.getMachine(GetMachineArgs.builder()\n            .modelUuid(development.uuid())\n            .machineId(\"2\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  this:\n    fn::invoke:\n      function: juju:getMachine\n      arguments:\n        modelUuid: ${development.uuid}\n        machineId: '2'\n```\n<!--End PulumiCodeChooser -->\n","inputs":{"description":"A collection of arguments for invoking getMachine.\n","properties":{"machineId":{"description":"The Juju id of the machine.\n","type":"string"},"modelUuid":{"description":"The UUID of the model.\n","type":"string"},"waitForIpAddresses":{"description":"A list of IP address conditions the provider waits for before completing the read. Each element must be one of: a CIDR (e.g. \"10.0.10.0/24\"), or the aliases \"public\", \"private\", \"any\". The matching IP addresses are populated in the 'ip_addresses' computed field, in the same order as this list. Conditions are evaluated from left to right, so put narrow CIDRs first, followed by broader CIDRs or \"public\"/\"private\", and \"any\" last.\n","items":{"type":"string"},"type":"array"}},"required":["machineId","modelUuid"],"type":"object"},"outputs":{"description":"A collection of values returned by getMachine.\n","properties":{"id":{"description":"The ID of this resource.\n","type":"string"},"instanceId":{"description":"The provider-specific instance id of the machine Juju creates.\n","type":"string"},"ipAddresses":{"description":"If <span pulumi-lang-nodejs=\"`waitForIpAddresses`\" pulumi-lang-dotnet=\"`WaitForIpAddresses`\" pulumi-lang-go=\"`waitForIpAddresses`\" pulumi-lang-python=\"`wait_for_ip_addresses`\" pulumi-lang-yaml=\"`waitForIpAddresses`\" pulumi-lang-java=\"`waitForIpAddresses`\">`wait_for_ip_addresses`</span> is set it will contain the IP addresses of the machine matching the 'wait*for*ip_addresses' conditions, in the same order. If not set this field will contain the IPs fetched when the machine is read.\n","items":{"type":"string"},"type":"array"},"machineId":{"description":"The Juju id of the machine.\n","type":"string"},"modelUuid":{"description":"The UUID of the model.\n","type":"string"},"waitForIpAddresses":{"description":"A list of IP address conditions the provider waits for before completing the read. Each element must be one of: a CIDR (e.g. \"10.0.10.0/24\"), or the aliases \"public\", \"private\", \"any\". The matching IP addresses are populated in the 'ip_addresses' computed field, in the same order as this list. Conditions are evaluated from left to right, so put narrow CIDRs first, followed by broader CIDRs or \"public\"/\"private\", and \"any\" last.\n","items":{"type":"string"},"type":"array"}},"required":["id","instanceId","ipAddresses","machineId","modelUuid"],"type":"object"}},"juju:index/getModel:getModel":{"description":"Use the model data source to retrieve information about an existing Juju model. This is useful when you need to reference model attributes such as the model UUID in other resources.\n\nModels can be looked up either by their UUID or a combination of name and owner e.g. admin/myModel. The owner is the user that created the model and can be found with the 'juju show-model' command.\n\n","inputs":{"description":"A collection of arguments for invoking getModel.\n","properties":{"name":{"description":"The name of the model.\n","type":"string"},"owner":{"description":"The owner of the model.\n","type":"string"},"uuid":{"description":"The UUID of the model.\n","type":"string"}},"type":"object"},"outputs":{"description":"A collection of values returned by getModel.\n","properties":{"id":{"description":"The ID of this resource.\n","type":"string"},"name":{"description":"The name of the model.\n","type":"string"},"owner":{"description":"The owner of the model.\n","type":"string"},"type":{"description":"Type of the model. It can be CAAS or IAAS.\n","type":"string"},"uuid":{"description":"The UUID of the model.\n","type":"string"}},"required":["id","name","owner","type","uuid"],"type":"object"}},"juju:index/getOffer:getOffer":{"description":"A data source representing a Juju Offer.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst _this = juju.getOffer({\n    url: \"admin/development.mysql\",\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nthis = juju.get_offer(url=\"admin/development.mysql\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var @this = Juju.GetOffer.Invoke(new()\n    {\n        Url = \"admin/development.mysql\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.LookupOffer(ctx, &juju.LookupOfferArgs{\n\t\t\tUrl: \"admin/development.mysql\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JujuFunctions;\nimport com.pulumi.juju.inputs.GetOfferArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var this = JujuFunctions.getOffer(GetOfferArgs.builder()\n            .url(\"admin/development.mysql\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  this:\n    fn::invoke:\n      function: juju:getOffer\n      arguments:\n        url: admin/development.mysql\n```\n<!--End PulumiCodeChooser -->\n","inputs":{"description":"A collection of arguments for invoking getOffer.\n","properties":{"offeringController":{"description":"The name of the offering controller.\n","type":"string"},"url":{"description":"The offer URL.\n","type":"string"}},"required":["url"],"type":"object"},"outputs":{"description":"A collection of values returned by getOffer.\n","properties":{"applicationName":{"description":"The name of the application.\n","type":"string"},"endpoints":{"description":"The endpoint names.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The ID of this resource.\n","type":"string"},"name":{"description":"The name of the offer.\n","type":"string"},"offeringController":{"description":"The name of the offering controller.\n","type":"string"},"url":{"description":"The offer URL.\n","type":"string"}},"required":["applicationName","endpoints","id","name","url"],"type":"object"}},"juju:index/getSecret:getSecret":{"description":"A data source representing a Juju Secret.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst myModel = juju.getModel({\n    name: \"default\",\n});\nconst mySecretDataSource = myModel.then(myModel => juju.getSecret({\n    name: \"my_secret\",\n    modelUuid: myModel.uuid,\n}));\nconst ubuntu = new juju.Application(\"ubuntu\", {\n    modelUuid: myModel.then(myModel => myModel.uuid),\n    name: \"ubuntu\",\n    charms: [{\n        name: \"ubuntu\",\n    }],\n    config: {\n        secret: mySecretDataSource.then(mySecretDataSource => mySecretDataSource.secretUri),\n    },\n});\nconst mySecretAccess = new juju.AccessSecret(\"my_secret_access\", {\n    modelUuid: myModel.then(myModel => myModel.uuid),\n    applications: [ubuntu.name],\n    secretId: mySecretDataSource.then(mySecretDataSource => mySecretDataSource.secretId),\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nmy_model = juju.get_model(name=\"default\")\nmy_secret_data_source = juju.get_secret(name=\"my_secret\",\n    model_uuid=my_model.uuid)\nubuntu = juju.Application(\"ubuntu\",\n    model_uuid=my_model.uuid,\n    name=\"ubuntu\",\n    charms=[{\n        \"name\": \"ubuntu\",\n    }],\n    config={\n        \"secret\": my_secret_data_source.secret_uri,\n    })\nmy_secret_access = juju.AccessSecret(\"my_secret_access\",\n    model_uuid=my_model.uuid,\n    applications=[ubuntu.name],\n    secret_id=my_secret_data_source.secret_id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var myModel = Juju.GetModel.Invoke(new()\n    {\n        Name = \"default\",\n    });\n\n    var mySecretDataSource = Juju.GetSecret.Invoke(new()\n    {\n        Name = \"my_secret\",\n        ModelUuid = myModel.Apply(getModelResult => getModelResult.Uuid),\n    });\n\n    var ubuntu = new Juju.Application(\"ubuntu\", new()\n    {\n        ModelUuid = myModel.Apply(getModelResult => getModelResult.Uuid),\n        Name = \"ubuntu\",\n        Charms = new[]\n        {\n            new Juju.Inputs.ApplicationCharmArgs\n            {\n                Name = \"ubuntu\",\n            },\n        },\n        Config = \n        {\n            { \"secret\", mySecretDataSource.Apply(getSecretResult => getSecretResult.SecretUri) },\n        },\n    });\n\n    var mySecretAccess = new Juju.AccessSecret(\"my_secret_access\", new()\n    {\n        ModelUuid = myModel.Apply(getModelResult => getModelResult.Uuid),\n        Applications = new[]\n        {\n            ubuntu.Name,\n        },\n        SecretId = mySecretDataSource.Apply(getSecretResult => getSecretResult.SecretId),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyModel, err := juju.LookupModel(ctx, &juju.LookupModelArgs{\n\t\t\tName: pulumi.StringRef(\"default\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmySecretDataSource, err := juju.LookupSecret(ctx, &juju.LookupSecretArgs{\n\t\t\tName:      \"my_secret\",\n\t\t\tModelUuid: myModel.Uuid,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tubuntu, err := juju.NewApplication(ctx, \"ubuntu\", &juju.ApplicationArgs{\n\t\t\tModelUuid: pulumi.String(myModel.Uuid),\n\t\t\tName:      pulumi.String(\"ubuntu\"),\n\t\t\tCharms: juju.ApplicationCharmArray{\n\t\t\t\t&juju.ApplicationCharmArgs{\n\t\t\t\t\tName: pulumi.String(\"ubuntu\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tConfig: pulumi.StringMap{\n\t\t\t\t\"secret\": pulumi.String(mySecretDataSource.SecretUri),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = juju.NewAccessSecret(ctx, \"my_secret_access\", &juju.AccessSecretArgs{\n\t\t\tModelUuid: pulumi.String(myModel.Uuid),\n\t\t\tApplications: pulumi.StringArray{\n\t\t\t\tubuntu.Name,\n\t\t\t},\n\t\t\tSecretId: pulumi.String(mySecretDataSource.SecretId),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JujuFunctions;\nimport com.pulumi.juju.inputs.GetModelArgs;\nimport com.pulumi.juju.inputs.GetSecretArgs;\nimport com.pulumi.juju.Application;\nimport com.pulumi.juju.ApplicationArgs;\nimport com.pulumi.juju.inputs.ApplicationCharmArgs;\nimport com.pulumi.juju.AccessSecret;\nimport com.pulumi.juju.AccessSecretArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var myModel = JujuFunctions.getModel(GetModelArgs.builder()\n            .name(\"default\")\n            .build());\n\n        final var mySecretDataSource = JujuFunctions.getSecret(GetSecretArgs.builder()\n            .name(\"my_secret\")\n            .modelUuid(myModel.uuid())\n            .build());\n\n        var ubuntu = new Application(\"ubuntu\", ApplicationArgs.builder()\n            .modelUuid(myModel.uuid())\n            .name(\"ubuntu\")\n            .charms(ApplicationCharmArgs.builder()\n                .name(\"ubuntu\")\n                .build())\n            .config(Map.of(\"secret\", mySecretDataSource.secretUri()))\n            .build());\n\n        var mySecretAccess = new AccessSecret(\"mySecretAccess\", AccessSecretArgs.builder()\n            .modelUuid(myModel.uuid())\n            .applications(ubuntu.name())\n            .secretId(mySecretDataSource.secretId())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  ubuntu:\n    type: juju:Application\n    properties:\n      modelUuid: ${myModel.uuid}\n      name: ubuntu\n      charms:\n        - name: ubuntu\n      config:\n        secret: ${mySecretDataSource.secretUri}\n  mySecretAccess:\n    type: juju:AccessSecret\n    name: my_secret_access\n    properties:\n      modelUuid: ${myModel.uuid}\n      applications:\n        - ${ubuntu.name}\n      secretId: ${mySecretDataSource.secretId}\nvariables:\n  myModel:\n    fn::invoke:\n      function: juju:getModel\n      arguments:\n        name: default\n  mySecretDataSource:\n    fn::invoke:\n      function: juju:getSecret\n      arguments:\n        name: my_secret\n        modelUuid: ${myModel.uuid}\n```\n<!--End PulumiCodeChooser -->\n","inputs":{"description":"A collection of arguments for invoking getSecret.\n","properties":{"modelUuid":{"description":"The uuid of the model containing the secret.\n","type":"string"},"name":{"description":"The name of the secret.\n","type":"string"}},"required":["modelUuid","name"],"type":"object"},"outputs":{"description":"A collection of values returned by getSecret.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"modelUuid":{"description":"The uuid of the model containing the secret.\n","type":"string"},"name":{"description":"The name of the secret.\n","type":"string"},"secretId":{"description":"The ID of the secret. E.g. coj8mulh8b41e8nv6p90\n","type":"string"},"secretUri":{"description":"The URI of the secret. E.g. secret:coj8mulh8b41e8nv6p90\n","type":"string"}},"required":["id","modelUuid","name","secretId","secretUri"],"type":"object"}},"juju:index/getSpace:getSpace":{"description":"A data source representing a Juju space.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst myModel = juju.getModel({\n    name: \"default\",\n});\nconst mySpaceDataSource = myModel.then(myModel => juju.getSpace({\n    modelUuid: myModel.uuid,\n    name: \"my-space\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nmy_model = juju.get_model(name=\"default\")\nmy_space_data_source = juju.get_space(model_uuid=my_model.uuid,\n    name=\"my-space\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var myModel = Juju.GetModel.Invoke(new()\n    {\n        Name = \"default\",\n    });\n\n    var mySpaceDataSource = Juju.GetSpace.Invoke(new()\n    {\n        ModelUuid = myModel.Apply(getModelResult => getModelResult.Uuid),\n        Name = \"my-space\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyModel, err := juju.LookupModel(ctx, &juju.LookupModelArgs{\n\t\t\tName: pulumi.StringRef(\"default\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = juju.LookupSpace(ctx, &juju.LookupSpaceArgs{\n\t\t\tModelUuid: myModel.Uuid,\n\t\t\tName:      \"my-space\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JujuFunctions;\nimport com.pulumi.juju.inputs.GetModelArgs;\nimport com.pulumi.juju.inputs.GetSpaceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var myModel = JujuFunctions.getModel(GetModelArgs.builder()\n            .name(\"default\")\n            .build());\n\n        final var mySpaceDataSource = JujuFunctions.getSpace(GetSpaceArgs.builder()\n            .modelUuid(myModel.uuid())\n            .name(\"my-space\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  myModel:\n    fn::invoke:\n      function: juju:getModel\n      arguments:\n        name: default\n  mySpaceDataSource:\n    fn::invoke:\n      function: juju:getSpace\n      arguments:\n        modelUuid: ${myModel.uuid}\n        name: my-space\n```\n<!--End PulumiCodeChooser -->\n","inputs":{"description":"A collection of arguments for invoking getSpace.\n","properties":{"modelUuid":{"description":"The UUID of the model where the space exists.\n","type":"string"},"name":{"description":"The name of the space.\n","type":"string"}},"required":["modelUuid","name"],"type":"object"},"outputs":{"description":"A collection of values returned by getSpace.\n","properties":{"id":{"description":"The identifier of the space data source. Format: \\n\\n:\\n\\n\n","type":"string"},"modelUuid":{"description":"The UUID of the model where the space exists.\n","type":"string"},"name":{"description":"The name of the space.\n","type":"string"}},"required":["id","modelUuid","name"],"type":"object"}},"juju:index/getStoragePool:getStoragePool":{"description":"A data source representing a Juju Storage Pool.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst myModel = juju.getModel({\n    name: \"default\",\n});\nconst myStoragePoolDataSource = myModel.then(myModel => juju.getStoragePool({\n    name: \"my_storage_pool\",\n    modelUuid: myModel.uuid,\n}));\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nmy_model = juju.get_model(name=\"default\")\nmy_storage_pool_data_source = juju.get_storage_pool(name=\"my_storage_pool\",\n    model_uuid=my_model.uuid)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var myModel = Juju.GetModel.Invoke(new()\n    {\n        Name = \"default\",\n    });\n\n    var myStoragePoolDataSource = Juju.GetStoragePool.Invoke(new()\n    {\n        Name = \"my_storage_pool\",\n        ModelUuid = myModel.Apply(getModelResult => getModelResult.Uuid),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyModel, err := juju.LookupModel(ctx, &juju.LookupModelArgs{\n\t\t\tName: pulumi.StringRef(\"default\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = juju.LookupStoragePool(ctx, &juju.LookupStoragePoolArgs{\n\t\t\tName:      \"my_storage_pool\",\n\t\t\tModelUuid: myModel.Uuid,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JujuFunctions;\nimport com.pulumi.juju.inputs.GetModelArgs;\nimport com.pulumi.juju.inputs.GetStoragePoolArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var myModel = JujuFunctions.getModel(GetModelArgs.builder()\n            .name(\"default\")\n            .build());\n\n        final var myStoragePoolDataSource = JujuFunctions.getStoragePool(GetStoragePoolArgs.builder()\n            .name(\"my_storage_pool\")\n            .modelUuid(myModel.uuid())\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  myModel:\n    fn::invoke:\n      function: juju:getModel\n      arguments:\n        name: default\n  myStoragePoolDataSource:\n    fn::invoke:\n      function: juju:getStoragePool\n      arguments:\n        name: my_storage_pool\n        modelUuid: ${myModel.uuid}\n```\n<!--End PulumiCodeChooser -->\n","inputs":{"description":"A collection of arguments for invoking getStoragePool.\n","properties":{"modelUuid":{"description":"The uuid of the model containing the storage pool.\n","type":"string"},"name":{"description":"The name of the storage pool.\n","type":"string"}},"required":["modelUuid","name"],"type":"object"},"outputs":{"description":"A collection of values returned by getStoragePool.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"modelUuid":{"description":"The uuid of the model containing the storage pool.\n","type":"string"},"name":{"description":"The name of the storage pool.\n","type":"string"}},"required":["id","modelUuid","name"],"type":"object"}},"juju:index/getSubnets:getSubnets":{"description":"A data source representing a list of Juju subnets.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst myModel = juju.getModel({\n    name: \"default\",\n});\nconst _this = myModel.then(myModel => juju.getSubnets({\n    modelUuid: myModel.uuid,\n    spaceName: \"alpha\",\n}));\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nmy_model = juju.get_model(name=\"default\")\nthis = juju.get_subnets(model_uuid=my_model.uuid,\n    space_name=\"alpha\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var myModel = Juju.GetModel.Invoke(new()\n    {\n        Name = \"default\",\n    });\n\n    var @this = Juju.GetSubnets.Invoke(new()\n    {\n        ModelUuid = myModel.Apply(getModelResult => getModelResult.Uuid),\n        SpaceName = \"alpha\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyModel, err := juju.LookupModel(ctx, &juju.LookupModelArgs{\n\t\t\tName: pulumi.StringRef(\"default\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = juju.GetSubnets(ctx, &juju.GetSubnetsArgs{\n\t\t\tModelUuid: myModel.Uuid,\n\t\t\tSpaceName: pulumi.StringRef(\"alpha\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JujuFunctions;\nimport com.pulumi.juju.inputs.GetModelArgs;\nimport com.pulumi.juju.inputs.GetSubnetsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var myModel = JujuFunctions.getModel(GetModelArgs.builder()\n            .name(\"default\")\n            .build());\n\n        final var this = JujuFunctions.getSubnets(GetSubnetsArgs.builder()\n            .modelUuid(myModel.uuid())\n            .spaceName(\"alpha\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  myModel:\n    fn::invoke:\n      function: juju:getModel\n      arguments:\n        name: default\n  this:\n    fn::invoke:\n      function: juju:getSubnets\n      arguments:\n        modelUuid: ${myModel.uuid}\n        spaceName: alpha\n```\n<!--End PulumiCodeChooser -->\n","inputs":{"description":"A collection of arguments for invoking getSubnets.\n","properties":{"modelUuid":{"description":"The UUID of the model where subnets exist.\n","type":"string"},"spaceName":{"description":"Optional space name filter.\n","type":"string"},"zoneName":{"description":"Optional availability zone filter.\n","type":"string"}},"required":["modelUuid"],"type":"object"},"outputs":{"description":"A collection of values returned by getSubnets.\n","properties":{"id":{"description":"Identifier of the subnets data source.\n","type":"string"},"modelUuid":{"description":"The UUID of the model where subnets exist.\n","type":"string"},"spaceName":{"description":"Optional space name filter.\n","type":"string"},"subnets":{"additionalProperties":{"$ref":"#/types/juju:index%2FgetSubnetsSubnets:getSubnetsSubnets"},"description":"Map of subnets keyed by CIDR.\n","type":"object"},"zoneName":{"description":"Optional availability zone filter.\n","type":"string"}},"required":["id","modelUuid","subnets"],"type":"object"}},"pulumi:providers:juju/terraformConfig":{"description":"This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider.","inputs":{"properties":{"__self__":{"$ref":"#/resources/pulumi:providers:juju"}},"required":["__self__"],"type":"object"},"outputs":{"properties":{"result":{"additionalProperties":{"$ref":"pulumi.json#/Any"},"type":"object"}},"required":["result"],"type":"object"}}},"language":{"csharp":{"compatibility":"tfbridge20","liftSingleValueMethodReturns":true,"respectSchemaVersion":true},"go":{"generateExtraInputTypes":true,"importBasePath":"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju","liftSingleValueMethodReturns":true,"respectSchemaVersion":true,"rootPackageName":"juju"},"java":{"basePackage":"","buildFiles":"","gradleNexusPublishPluginVersion":"","gradleTest":""},"nodejs":{"compatibility":"tfbridge20","disableUnionOutputTypes":true,"liftSingleValueMethodReturns":true,"packageDescription":"A Pulumi provider dynamically bridged from juju.","readme":"> This provider is a derived work of the [Terraform Provider](https://github.com/juju/terraform-provider-juju)\n> distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n> please consult the source [`terraform-provider-juju` repo](https://github.com/juju/terraform-provider-juju/issues).","respectSchemaVersion":true},"python":{"compatibility":"tfbridge20","pyproject":{"enabled":true},"readme":"> This provider is a derived work of the [Terraform Provider](https://github.com/juju/terraform-provider-juju)\n> distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n> please consult the source [`terraform-provider-juju` repo](https://github.com/juju/terraform-provider-juju/issues).","respectSchemaVersion":true}},"meta":{"moduleFormat":"(.*)(?:/[^/]*)"},"name":"juju","parameterization":{"baseProvider":{"name":"terraform-provider","version":"1.0.1"},"parameter":"eyJyZW1vdGUiOnsidXJsIjoicmVnaXN0cnkub3BlbnRvZnUub3JnL2p1anUvanVqdSIsInZlcnNpb24iOiIyLjMuMSJ9fQ=="},"provider":{"description":"The provider type for the juju package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n","inputProperties":{"caCertificate":{"description":"If the controller was deployed with a self-signed certificate: This is the certificate to use for identification. This can also be set by the `JUJU_CA_CERT` environment variable","type":"string"},"clientId":{"description":"If using JAAS: This is the client ID (OAuth2.0, created by the external identity provider) to be used. This can also be set by the `JUJU_CLIENT_ID` environment variable","type":"string"},"clientSecret":{"description":"If using JAAS: This is the client secret (OAuth2.0, created by the external identity provider) to be used. This can also be set by the `JUJU_CLIENT_SECRET` environment variable","secret":true,"type":"string"},"controllerAddresses":{"description":"This is the controller addresses to connect to, defaults to localhost:17070, multiple addresses can be provided in this format: <host>:<port>,<host>:<port>,.... This can also be set by the `JUJU_CONTROLLER_ADDRESSES` environment variable.","type":"string"},"controllerMode":{"description":"If set to true, the provider will only allow managing <span pulumi-lang-nodejs=\"`juju.Controller`\" pulumi-lang-dotnet=\"`juju.Controller`\" pulumi-lang-go=\"`Controller`\" pulumi-lang-python=\"`Controller`\" pulumi-lang-yaml=\"`juju.Controller`\" pulumi-lang-java=\"`juju.Controller`\">`juju.Controller`</span> resources.","type":"boolean"},"defaultTimeouts":{"$ref":"#/types/juju:index%2FProviderDefaultTimeouts:ProviderDefaultTimeouts","description":"Default timeouts for resource operations. These apply to all resources unless overridden by a resource-level <span pulumi-lang-nodejs=\"`timeouts`\" pulumi-lang-dotnet=\"`Timeouts`\" pulumi-lang-go=\"`timeouts`\" pulumi-lang-python=\"`timeouts`\" pulumi-lang-yaml=\"`timeouts`\" pulumi-lang-java=\"`timeouts`\">`timeouts`</span> block. Values are duration strings, e.g. \"60m\"."},"lazyApiCheck":{"description":"If set to true, the provider will not connect to the controller during planning for creation. This allows for planning the creation of resources without a live controller. However, the provider will still connect to the controller when planning for updates. Note that the validators/checks will not be run until apply time - this is relevant for some resources that are only valid with JAAS.","type":"boolean"},"offeringControllers":{"additionalProperties":{"$ref":"#/types/juju:index%2FProviderOfferingControllers:ProviderOfferingControllers"},"description":"Additional controller details for cross-model integrations. The map key is the controller name.","type":"object"},"password":{"description":"This is the password of the username to be used. This can also be set by the `JUJU_PASSWORD` environment variable","secret":true,"type":"string"},"skipFailedDeletion":{"description":"Whether to issue a warning instead of an error and continue if a resource deletion fails. This can also be set by the `JUJU_SKIP_FAILED_DELETION` environment variable. Defaults to false.","type":"boolean"},"username":{"description":"This is the username registered with the controller to be used. This can also be set by the `JUJU_USERNAME` environment variable","type":"string"}},"methods":{"terraformConfig":"pulumi:providers:juju/terraformConfig"},"properties":{"caCertificate":{"description":"If the controller was deployed with a self-signed certificate: This is the certificate to use for identification. This can also be set by the `JUJU_CA_CERT` environment variable","type":"string"},"clientId":{"description":"If using JAAS: This is the client ID (OAuth2.0, created by the external identity provider) to be used. This can also be set by the `JUJU_CLIENT_ID` environment variable","type":"string"},"clientSecret":{"description":"If using JAAS: This is the client secret (OAuth2.0, created by the external identity provider) to be used. This can also be set by the `JUJU_CLIENT_SECRET` environment variable","secret":true,"type":"string"},"controllerAddresses":{"description":"This is the controller addresses to connect to, defaults to localhost:17070, multiple addresses can be provided in this format: <host>:<port>,<host>:<port>,.... This can also be set by the `JUJU_CONTROLLER_ADDRESSES` environment variable.","type":"string"},"password":{"description":"This is the password of the username to be used. This can also be set by the `JUJU_PASSWORD` environment variable","secret":true,"type":"string"},"username":{"description":"This is the username registered with the controller to be used. This can also be set by the `JUJU_USERNAME` environment variable","type":"string"}},"type":"object"},"publisher":"juju","repository":"https://github.com/juju/terraform-provider-juju","resources":{"juju:index/accessModel:AccessModel":{"description":"A resource that represent a Juju Access Model.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst _this = new juju.AccessModel(\"this\", {\n    modelUuid: dev.uuid,\n    access: \"write\",\n    users: [\n        devJujuUser.name,\n        qa.name,\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nthis = juju.AccessModel(\"this\",\n    model_uuid=dev[\"uuid\"],\n    access=\"write\",\n    users=[\n        dev_juju_user[\"name\"],\n        qa[\"name\"],\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var @this = new Juju.AccessModel(\"this\", new()\n    {\n        ModelUuid = dev.Uuid,\n        Access = \"write\",\n        Users = new[]\n        {\n            devJujuUser.Name,\n            qa.Name,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewAccessModel(ctx, \"this\", &juju.AccessModelArgs{\n\t\t\tModelUuid: pulumi.Any(dev.Uuid),\n\t\t\tAccess:    pulumi.String(\"write\"),\n\t\t\tUsers: pulumi.StringArray{\n\t\t\t\tdevJujuUser.Name,\n\t\t\t\tqa.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.AccessModel;\nimport com.pulumi.juju.AccessModelArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var this_ = new AccessModel(\"this\", AccessModelArgs.builder()\n            .modelUuid(dev.uuid())\n            .access(\"write\")\n            .users(            \n                devJujuUser.name(),\n                qa.name())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  this:\n    type: juju:AccessModel\n    properties:\n      modelUuid: ${dev.uuid}\n      access: write\n      users:\n        - ${devJujuUser.name}\n        - ${qa.name}\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nAccess Models can be imported using the model name,\n\naccess and comma separated list of users\n\n```sh\n$ pulumi import juju:index/accessModel:AccessModel development development:read:user-one,user-two\n```\n\n","inputProperties":{"access":{"description":"Type of access to the model\n","type":"string"},"modelUuid":{"description":"The uuid of the model for access management\n","type":"string"},"users":{"description":"Set of users to grant access to\n","items":{"type":"string"},"type":"array"}},"properties":{"access":{"description":"Type of access to the model\n","type":"string"},"modelUuid":{"description":"The uuid of the model for access management\n","type":"string"},"users":{"description":"Set of users to grant access to\n","items":{"type":"string"},"type":"array"}},"required":["access","modelUuid","users"],"requiredInputs":["access","modelUuid","users"],"stateInputs":{"description":"Input properties used for looking up and filtering AccessModel resources.\n","properties":{"access":{"description":"Type of access to the model\n","type":"string"},"modelUuid":{"description":"The uuid of the model for access management\n","type":"string"},"users":{"description":"Set of users to grant access to\n","items":{"type":"string"},"type":"array"}},"type":"object"},"type":"object"},"juju:index/accessOffer:AccessOffer":{"description":"A resource that represent a Juju Access Offer. Warning: Do not repeat users across different access levels.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst _this = new juju.AccessOffer(\"this\", {\n    offerUrl: myApplicationOffer.url,\n    consumes: [dev.name],\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nthis = juju.AccessOffer(\"this\",\n    offer_url=my_application_offer[\"url\"],\n    consumes=[dev[\"name\"]])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var @this = new Juju.AccessOffer(\"this\", new()\n    {\n        OfferUrl = myApplicationOffer.Url,\n        Consumes = new[]\n        {\n            dev.Name,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewAccessOffer(ctx, \"this\", &juju.AccessOfferArgs{\n\t\t\tOfferUrl: pulumi.Any(myApplicationOffer.Url),\n\t\t\tConsumes: pulumi.StringArray{\n\t\t\t\tdev.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.AccessOffer;\nimport com.pulumi.juju.AccessOfferArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var this_ = new AccessOffer(\"this\", AccessOfferArgs.builder()\n            .offerUrl(myApplicationOffer.url())\n            .consumes(dev.name())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  this:\n    type: juju:AccessOffer\n    properties:\n      offerUrl: ${myApplicationOffer.url}\n      consumes:\n        - ${dev.name}\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nAccess Offers can be imported by using the Offer URL as in the juju show-offers output.\n\nExample:\n\n$juju show-offer mysql\n\nStore            URL             Access  Description                                    Endpoint  Interface  Role\n\nmycontroller     admin/db.mysql  admin   MariaDB Server is one of the most ...          mysql     mysql      provider\n\n```sh\n$ pulumi import juju:index/accessOffer:AccessOffer db admin/db.mysql\n```\n\n","inputProperties":{"admins":{"description":"List of users to grant admin access. \"admin\" user is not allowed.\n","items":{"type":"string"},"type":"array"},"consumes":{"description":"List of users to grant consume access. \"admin\" user is not allowed.\n","items":{"type":"string"},"type":"array"},"offerUrl":{"description":"The url of the offer for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"reads":{"description":"List of users to grant read access. \"admin\" user is not allowed.\n","items":{"type":"string"},"type":"array"}},"properties":{"admins":{"description":"List of users to grant admin access. \"admin\" user is not allowed.\n","items":{"type":"string"},"type":"array"},"consumes":{"description":"List of users to grant consume access. \"admin\" user is not allowed.\n","items":{"type":"string"},"type":"array"},"offerUrl":{"description":"The url of the offer for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"reads":{"description":"List of users to grant read access. \"admin\" user is not allowed.\n","items":{"type":"string"},"type":"array"}},"required":["offerUrl"],"requiredInputs":["offerUrl"],"stateInputs":{"description":"Input properties used for looking up and filtering AccessOffer resources.\n","properties":{"admins":{"description":"List of users to grant admin access. \"admin\" user is not allowed.\n","items":{"type":"string"},"type":"array"},"consumes":{"description":"List of users to grant consume access. \"admin\" user is not allowed.\n","items":{"type":"string"},"type":"array"},"offerUrl":{"description":"The url of the offer for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"reads":{"description":"List of users to grant read access. \"admin\" user is not allowed.\n","items":{"type":"string"},"type":"array"}},"type":"object"},"type":"object"},"juju:index/accessSecret:AccessSecret":{"description":"A resource that represents a Juju secret access.\n","inputProperties":{"applications":{"description":"The list of applications to which the secret is granted.\n","items":{"type":"string"},"type":"array"},"modelUuid":{"description":"The UUID of the model in which the secret belongs.\n","type":"string"},"secretId":{"description":"The ID of the secret. E.g. coj8mulh8b41e8nv6p90\n","type":"string"}},"properties":{"applications":{"description":"The list of applications to which the secret is granted.\n","items":{"type":"string"},"type":"array"},"modelUuid":{"description":"The UUID of the model in which the secret belongs.\n","type":"string"},"secretId":{"description":"The ID of the secret. E.g. coj8mulh8b41e8nv6p90\n","type":"string"}},"required":["applications","modelUuid","secretId"],"requiredInputs":["applications","modelUuid","secretId"],"stateInputs":{"description":"Input properties used for looking up and filtering AccessSecret resources.\n","properties":{"applications":{"description":"The list of applications to which the secret is granted.\n","items":{"type":"string"},"type":"array"},"modelUuid":{"description":"The UUID of the model in which the secret belongs.\n","type":"string"},"secretId":{"description":"The ID of the secret. E.g. coj8mulh8b41e8nv6p90\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/action:Action":{"description":"A resource that represents a Juju action. The action is run and its result awaited during the resource's creation. The action's output is set as a computed field that can be used by other resources after the resource has been created.\n\n","inputProperties":{"actionName":{"description":"The name of the action to run. Changing this value will cause the resource to be destroyed and recreated.\n","type":"string"},"applicationName":{"description":"The name of the application to run the action on. Changing this value will cause the resource to be destroyed and recreated.\n","type":"string"},"args":{"additionalProperties":{"type":"string"},"description":"The arguments to pass to the action. Changing this value will cause the resource to be destroyed and recreated.\n","type":"object"},"modelUuid":{"description":"The UUID of the model where the action will be run. Changing this value will cause the resource to be destroyed and recreated.\n","type":"string"},"unit":{"description":"The unit name (e.g. \"ubuntu/0\" or \"ubuntu/leader\") to run the action on. Changing this value will cause the resource to be destroyed and recreated.\n","type":"string"}},"properties":{"actionId":{"description":"The ID of the enqueued action.\n","type":"string"},"actionName":{"description":"The name of the action to run. Changing this value will cause the resource to be destroyed and recreated.\n","type":"string"},"applicationName":{"description":"The name of the application to run the action on. Changing this value will cause the resource to be destroyed and recreated.\n","type":"string"},"args":{"additionalProperties":{"type":"string"},"description":"The arguments to pass to the action. Changing this value will cause the resource to be destroyed and recreated.\n","type":"object"},"modelUuid":{"description":"The UUID of the model where the action will be run. Changing this value will cause the resource to be destroyed and recreated.\n","type":"string"},"output":{"description":"The output of the action as a JSON string. Use jsondecode() to extract values from it.\n","type":"string"},"unit":{"description":"The unit name (e.g. \"ubuntu/0\" or \"ubuntu/leader\") to run the action on. Changing this value will cause the resource to be destroyed and recreated.\n","type":"string"}},"required":["actionId","actionName","applicationName","modelUuid","output","unit"],"requiredInputs":["actionName","applicationName","modelUuid","unit"],"stateInputs":{"description":"Input properties used for looking up and filtering Action resources.\n","properties":{"actionId":{"description":"The ID of the enqueued action.\n","type":"string"},"actionName":{"description":"The name of the action to run. Changing this value will cause the resource to be destroyed and recreated.\n","type":"string"},"applicationName":{"description":"The name of the application to run the action on. Changing this value will cause the resource to be destroyed and recreated.\n","type":"string"},"args":{"additionalProperties":{"type":"string"},"description":"The arguments to pass to the action. Changing this value will cause the resource to be destroyed and recreated.\n","type":"object"},"modelUuid":{"description":"The UUID of the model where the action will be run. Changing this value will cause the resource to be destroyed and recreated.\n","type":"string"},"output":{"description":"The output of the action as a JSON string. Use jsondecode() to extract values from it.\n","type":"string"},"unit":{"description":"The unit name (e.g. \"ubuntu/0\" or \"ubuntu/leader\") to run the action on. Changing this value will cause the resource to be destroyed and recreated.\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/application:Application":{"description":"\n\n## Import\n\nApplications can be imported using the format: `model_uuid:application_name`, for example:\n\n```sh\n$ pulumi import juju:index/application:Application wordpress abe22490-a845-4a4d-ba52-7ec80a60aff5:wordpress\n```\n\n","inputProperties":{"charms":{"description":"The charm installed from Charmhub.","items":{"$ref":"#/types/juju:index%2FApplicationCharm:ApplicationCharm"},"type":"array"},"config":{"additionalProperties":{"type":"string"},"description":"Application specific configuration. Must evaluate to a string, integer or boolean.","type":"object"},"constraints":{"type":"string"},"endpointBindings":{"description":"Configure endpoint bindings","items":{"$ref":"#/types/juju:index%2FApplicationEndpointBinding:ApplicationEndpointBinding"},"type":"array"},"exposes":{"description":"Makes an application publicly available over the network","items":{"$ref":"#/types/juju:index%2FApplicationExpose:ApplicationExpose"},"type":"array"},"machines":{"description":"Specify the target machines for the application's units. The number of machines in the set indicates the unit count for the application. Removing a machine from the set will remove the application's unit residing on it. <span pulumi-lang-nodejs=\"`machines`\" pulumi-lang-dotnet=\"`Machines`\" pulumi-lang-go=\"`machines`\" pulumi-lang-python=\"`machines`\" pulumi-lang-yaml=\"`machines`\" pulumi-lang-java=\"`machines`\">`machines`</span> is mutually exclusive with <span pulumi-lang-nodejs=\"`units`\" pulumi-lang-dotnet=\"`Units`\" pulumi-lang-go=\"`units`\" pulumi-lang-python=\"`units`\" pulumi-lang-yaml=\"`units`\" pulumi-lang-java=\"`units`\">`units`</span>.","items":{"type":"string"},"type":"array"},"modelUuid":{"type":"string"},"name":{"type":"string"},"registryCredentials":{"additionalProperties":{"$ref":"#/types/juju:index%2FApplicationRegistryCredentials:ApplicationRegistryCredentials"},"description":"OCI image registry credentials for OCI images specified in the charm resources. The map key is the registry URL.\n\n\tIf the charm resource requires authentication, supply a username and password that will be passed to the Juju API and added to the Kubernetes cluster.\n\n\tThe registry credentials will only be used if the URL of the registry is a partial match for the OCI image URL specified in the charm resources.\n\tAn OCI image URL is considered a match for a registry URL if the URL without the OCI image tag matches the registry URL. For example, \n\ta charm OCI resource specified as \"registry.example.com:5000/path/image:tag\" will match a registry entry with key \"registry.example.com:5000/path\" \n\tbut not \"registry.example.com:5000\" nor \"registry.example.com\".","type":"object"},"resources":{"additionalProperties":{"type":"string"},"description":"Charm resources. Must evaluate to a string. A resource could be a resource revision number from CharmHub or a custom OCI image resource.\nSpecify a resource other than the default for a charm. Note that not all charms have resources.\n\nNotes:\n* A resource can be specified by a revision number or by URL to a OCI image repository. Resources of type 'file' can only be specified by revision number. Resources of type 'oci-image' can be specified by revision number or URL.\n* A resource can be added or changed at any time. If the charm has resources and None is specified in the plan, Juju will use the resource defined in the charm's specified channel.\n* If a charm is refreshed, by changing the charm revision or channel and if the resource is specified by a revision in the plan, Juju will use the resource defined in the plan.\n* Resources specified by URL to an OCI image repository will never be refreshed (upgraded) by juju during a charm refresh unless explicitly changed in the plan.","type":"object"},"storageDirectives":{"additionalProperties":{"type":"string"},"description":"Storage directives (constraints) for the juju application. The map key is the label of the storage defined by the charm, the map value is the storage directive in the form [<pool>,][<count>,][<size>]  where at least one constraint must be specified. See https://documentation.ubuntu.com/juju/3.6/reference/storage/ for more details. If a pool is not specified, the model's default pool will be used. Changing an existing key/value pair will cause the application to be replaced. Adding a new key/value pair will add storage to the application on upgrade.","type":"object"},"timeouts":{"$ref":"#/types/juju:index%2FApplicationTimeouts:ApplicationTimeouts"},"trust":{"description":"Set the trust for the application.","type":"boolean"},"units":{"description":"The number of application units to deploy for the charm.","type":"number"}},"properties":{"charms":{"description":"The charm installed from Charmhub.","items":{"$ref":"#/types/juju:index%2FApplicationCharm:ApplicationCharm"},"type":"array"},"config":{"additionalProperties":{"type":"string"},"description":"Application specific configuration. Must evaluate to a string, integer or boolean.","type":"object"},"constraints":{"type":"string"},"endpointBindings":{"description":"Configure endpoint bindings","items":{"$ref":"#/types/juju:index%2FApplicationEndpointBinding:ApplicationEndpointBinding"},"type":"array"},"exposes":{"description":"Makes an application publicly available over the network","items":{"$ref":"#/types/juju:index%2FApplicationExpose:ApplicationExpose"},"type":"array"},"machines":{"description":"Specify the target machines for the application's units. The number of machines in the set indicates the unit count for the application. Removing a machine from the set will remove the application's unit residing on it. <span pulumi-lang-nodejs=\"`machines`\" pulumi-lang-dotnet=\"`Machines`\" pulumi-lang-go=\"`machines`\" pulumi-lang-python=\"`machines`\" pulumi-lang-yaml=\"`machines`\" pulumi-lang-java=\"`machines`\">`machines`</span> is mutually exclusive with <span pulumi-lang-nodejs=\"`units`\" pulumi-lang-dotnet=\"`Units`\" pulumi-lang-go=\"`units`\" pulumi-lang-python=\"`units`\" pulumi-lang-yaml=\"`units`\" pulumi-lang-java=\"`units`\">`units`</span>.","items":{"type":"string"},"type":"array"},"modelType":{"description":"The type of the model where the application is deployed. It is a computed field and is needed to determine if the application should be replaced or updated in case of base updates.","type":"string"},"modelUuid":{"type":"string"},"name":{"type":"string"},"registryCredentials":{"additionalProperties":{"$ref":"#/types/juju:index%2FApplicationRegistryCredentials:ApplicationRegistryCredentials"},"description":"OCI image registry credentials for OCI images specified in the charm resources. The map key is the registry URL.\n\n\tIf the charm resource requires authentication, supply a username and password that will be passed to the Juju API and added to the Kubernetes cluster.\n\n\tThe registry credentials will only be used if the URL of the registry is a partial match for the OCI image URL specified in the charm resources.\n\tAn OCI image URL is considered a match for a registry URL if the URL without the OCI image tag matches the registry URL. For example, \n\ta charm OCI resource specified as \"registry.example.com:5000/path/image:tag\" will match a registry entry with key \"registry.example.com:5000/path\" \n\tbut not \"registry.example.com:5000\" nor \"registry.example.com\".","type":"object"},"resources":{"additionalProperties":{"type":"string"},"description":"Charm resources. Must evaluate to a string. A resource could be a resource revision number from CharmHub or a custom OCI image resource.\nSpecify a resource other than the default for a charm. Note that not all charms have resources.\n\nNotes:\n* A resource can be specified by a revision number or by URL to a OCI image repository. Resources of type 'file' can only be specified by revision number. Resources of type 'oci-image' can be specified by revision number or URL.\n* A resource can be added or changed at any time. If the charm has resources and None is specified in the plan, Juju will use the resource defined in the charm's specified channel.\n* If a charm is refreshed, by changing the charm revision or channel and if the resource is specified by a revision in the plan, Juju will use the resource defined in the plan.\n* Resources specified by URL to an OCI image repository will never be refreshed (upgraded) by juju during a charm refresh unless explicitly changed in the plan.","type":"object"},"storageDirectives":{"additionalProperties":{"type":"string"},"description":"Storage directives (constraints) for the juju application. The map key is the label of the storage defined by the charm, the map value is the storage directive in the form [<pool>,][<count>,][<size>]  where at least one constraint must be specified. See https://documentation.ubuntu.com/juju/3.6/reference/storage/ for more details. If a pool is not specified, the model's default pool will be used. Changing an existing key/value pair will cause the application to be replaced. Adding a new key/value pair will add storage to the application on upgrade.","type":"object"},"storages":{"description":"Storage used by the application.","items":{"$ref":"#/types/juju:index%2FApplicationStorage:ApplicationStorage"},"type":"array"},"timeouts":{"$ref":"#/types/juju:index%2FApplicationTimeouts:ApplicationTimeouts"},"trust":{"description":"Set the trust for the application.","type":"boolean"},"unitNumbers":{"description":"The numbers of the units deployed for this application. Ex. [0,1,2]","items":{"type":"string"},"type":"array"},"units":{"description":"The number of application units to deploy for the charm.","type":"number"}},"required":["constraints","machines","modelType","modelUuid","name","storages","trust","unitNumbers","units"],"requiredInputs":["modelUuid"],"stateInputs":{"description":"Input properties used for looking up and filtering Application resources.\n","properties":{"charms":{"description":"The charm installed from Charmhub.","items":{"$ref":"#/types/juju:index%2FApplicationCharm:ApplicationCharm"},"type":"array"},"config":{"additionalProperties":{"type":"string"},"description":"Application specific configuration. Must evaluate to a string, integer or boolean.","type":"object"},"constraints":{"type":"string"},"endpointBindings":{"description":"Configure endpoint bindings","items":{"$ref":"#/types/juju:index%2FApplicationEndpointBinding:ApplicationEndpointBinding"},"type":"array"},"exposes":{"description":"Makes an application publicly available over the network","items":{"$ref":"#/types/juju:index%2FApplicationExpose:ApplicationExpose"},"type":"array"},"machines":{"description":"Specify the target machines for the application's units. The number of machines in the set indicates the unit count for the application. Removing a machine from the set will remove the application's unit residing on it. <span pulumi-lang-nodejs=\"`machines`\" pulumi-lang-dotnet=\"`Machines`\" pulumi-lang-go=\"`machines`\" pulumi-lang-python=\"`machines`\" pulumi-lang-yaml=\"`machines`\" pulumi-lang-java=\"`machines`\">`machines`</span> is mutually exclusive with <span pulumi-lang-nodejs=\"`units`\" pulumi-lang-dotnet=\"`Units`\" pulumi-lang-go=\"`units`\" pulumi-lang-python=\"`units`\" pulumi-lang-yaml=\"`units`\" pulumi-lang-java=\"`units`\">`units`</span>.","items":{"type":"string"},"type":"array"},"modelType":{"description":"The type of the model where the application is deployed. It is a computed field and is needed to determine if the application should be replaced or updated in case of base updates.","type":"string"},"modelUuid":{"type":"string"},"name":{"type":"string"},"registryCredentials":{"additionalProperties":{"$ref":"#/types/juju:index%2FApplicationRegistryCredentials:ApplicationRegistryCredentials"},"description":"OCI image registry credentials for OCI images specified in the charm resources. The map key is the registry URL.\n\n\tIf the charm resource requires authentication, supply a username and password that will be passed to the Juju API and added to the Kubernetes cluster.\n\n\tThe registry credentials will only be used if the URL of the registry is a partial match for the OCI image URL specified in the charm resources.\n\tAn OCI image URL is considered a match for a registry URL if the URL without the OCI image tag matches the registry URL. For example, \n\ta charm OCI resource specified as \"registry.example.com:5000/path/image:tag\" will match a registry entry with key \"registry.example.com:5000/path\" \n\tbut not \"registry.example.com:5000\" nor \"registry.example.com\".","type":"object"},"resources":{"additionalProperties":{"type":"string"},"description":"Charm resources. Must evaluate to a string. A resource could be a resource revision number from CharmHub or a custom OCI image resource.\nSpecify a resource other than the default for a charm. Note that not all charms have resources.\n\nNotes:\n* A resource can be specified by a revision number or by URL to a OCI image repository. Resources of type 'file' can only be specified by revision number. Resources of type 'oci-image' can be specified by revision number or URL.\n* A resource can be added or changed at any time. If the charm has resources and None is specified in the plan, Juju will use the resource defined in the charm's specified channel.\n* If a charm is refreshed, by changing the charm revision or channel and if the resource is specified by a revision in the plan, Juju will use the resource defined in the plan.\n* Resources specified by URL to an OCI image repository will never be refreshed (upgraded) by juju during a charm refresh unless explicitly changed in the plan.","type":"object"},"storageDirectives":{"additionalProperties":{"type":"string"},"description":"Storage directives (constraints) for the juju application. The map key is the label of the storage defined by the charm, the map value is the storage directive in the form [<pool>,][<count>,][<size>]  where at least one constraint must be specified. See https://documentation.ubuntu.com/juju/3.6/reference/storage/ for more details. If a pool is not specified, the model's default pool will be used. Changing an existing key/value pair will cause the application to be replaced. Adding a new key/value pair will add storage to the application on upgrade.","type":"object"},"storages":{"description":"Storage used by the application.","items":{"$ref":"#/types/juju:index%2FApplicationStorage:ApplicationStorage"},"type":"array"},"timeouts":{"$ref":"#/types/juju:index%2FApplicationTimeouts:ApplicationTimeouts"},"trust":{"description":"Set the trust for the application.","type":"boolean"},"unitNumbers":{"description":"The numbers of the units deployed for this application. Ex. [0,1,2]","items":{"type":"string"},"type":"array"},"units":{"description":"The number of application units to deploy for the charm.","type":"number"}},"type":"object"},"type":"object"},"juju:index/cloud:Cloud":{"description":"A resource that represents a Juju Cloud for an existing controller.\n\n","inputProperties":{"authTypes":{"description":"List of supported authentication types by the cloud.\n","items":{"type":"string"},"type":"array"},"caCertificates":{"description":"List of PEM-encoded X509 certificates for the cloud.\n","items":{"type":"string"},"secret":true,"type":"array"},"endpoint":{"description":"Optional global endpoint for the cloud.\n","type":"string"},"identityEndpoint":{"description":"Optional global identity endpoint for the cloud.\n","type":"string"},"name":{"description":"The name of the cloud in Juju.\n","type":"string"},"regions":{"description":"List of regions for the cloud. The first region in the list is the default region for the cloud.\n","items":{"$ref":"#/types/juju:index%2FCloudRegion:CloudRegion"},"type":"array"},"storageEndpoint":{"description":"Optional global storage endpoint for the cloud.\n","type":"string"},"targetController":{"type":"string"},"type":{"description":"The type of the cloud.\n","type":"string"}},"properties":{"authTypes":{"description":"List of supported authentication types by the cloud.\n","items":{"type":"string"},"type":"array"},"caCertificates":{"description":"List of PEM-encoded X509 certificates for the cloud.\n","items":{"type":"string"},"secret":true,"type":"array"},"endpoint":{"description":"Optional global endpoint for the cloud.\n","type":"string"},"identityEndpoint":{"description":"Optional global identity endpoint for the cloud.\n","type":"string"},"name":{"description":"The name of the cloud in Juju.\n","type":"string"},"regions":{"description":"List of regions for the cloud. The first region in the list is the default region for the cloud.\n","items":{"$ref":"#/types/juju:index%2FCloudRegion:CloudRegion"},"type":"array"},"storageEndpoint":{"description":"Optional global storage endpoint for the cloud.\n","type":"string"},"targetController":{"type":"string"},"type":{"description":"The type of the cloud.\n","type":"string"}},"required":["authTypes","name","regions","type"],"requiredInputs":["authTypes","type"],"stateInputs":{"description":"Input properties used for looking up and filtering Cloud resources.\n","properties":{"authTypes":{"description":"List of supported authentication types by the cloud.\n","items":{"type":"string"},"type":"array"},"caCertificates":{"description":"List of PEM-encoded X509 certificates for the cloud.\n","items":{"type":"string"},"secret":true,"type":"array"},"endpoint":{"description":"Optional global endpoint for the cloud.\n","type":"string"},"identityEndpoint":{"description":"Optional global identity endpoint for the cloud.\n","type":"string"},"name":{"description":"The name of the cloud in Juju.\n","type":"string"},"regions":{"description":"List of regions for the cloud. The first region in the list is the default region for the cloud.\n","items":{"$ref":"#/types/juju:index%2FCloudRegion:CloudRegion"},"type":"array"},"storageEndpoint":{"description":"Optional global storage endpoint for the cloud.\n","type":"string"},"targetController":{"type":"string"},"type":{"description":"The type of the cloud.\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/controller:Controller":{"description":"A resource that represents a Juju Controller.\n\n","inputProperties":{"agentVersion":{"description":"Specifies a controller version to bootstrap. If not specified, the latest stable agent version will be used. Updating this value only supports in-place upgrades to higher patch versions within the same major.minor series. The provider does not wait for the upgrade to complete, so we recommend waiting for the upgrade to finish before applying further changes.\n","type":"string"},"bootstrapBase":{"description":"The base for the bootstrap machine.\n","type":"string"},"bootstrapConfig":{"additionalProperties":{"type":"string"},"description":"Configuration options that apply during the bootstrap process.\n","type":"object"},"bootstrapConstraints":{"additionalProperties":{"type":"string"},"description":"Constraints for the bootstrap machine.\n","type":"object"},"cloud":{"$ref":"#/types/juju:index%2FControllerCloud:ControllerCloud","description":"The cloud where the controller will operate.\n"},"cloudCredential":{"$ref":"#/types/juju:index%2FControllerCloudCredential:ControllerCloudCredential","description":"Cloud credentials to use for bootstrapping the controller.\n","secret":true},"controllerConfig":{"additionalProperties":{"type":"string"},"description":"Configuration options for the bootstrapped controller. Note that removing a key from this map will not unset it in the controller, instead it will be left unchanged on the controller.\n","type":"object"},"controllerModelConfig":{"additionalProperties":{"type":"string"},"description":"Configuration options to be set for the controller model.\n","type":"object"},"destroyFlags":{"$ref":"#/types/juju:index%2FControllerDestroyFlags:ControllerDestroyFlags","description":"Additional flags for destroying the controller. Changing any of these values will require applying before they can be taken into account during destroy.\n"},"jujuBinary":{"description":"The path to the juju CLI binary. If you have installed Juju as a snap, use the path `/snap/juju/current/bin/juju` to avoid snap confinement issues.\n","type":"string"},"modelConstraints":{"additionalProperties":{"type":"string"},"description":"Constraints for all workload machines in models.\n","type":"object"},"modelDefault":{"additionalProperties":{"type":"string"},"description":"Configuration options to be set for all models.\n","type":"object"},"name":{"type":"string"},"storagePool":{"$ref":"#/types/juju:index%2FControllerStoragePool:ControllerStoragePool","description":"Options for the initial storage pool\n"}},"properties":{"agentVersion":{"description":"Specifies a controller version to bootstrap. If not specified, the latest stable agent version will be used. Updating this value only supports in-place upgrades to higher patch versions within the same major.minor series. The provider does not wait for the upgrade to complete, so we recommend waiting for the upgrade to finish before applying further changes.\n","type":"string"},"apiAddresses":{"description":"API addresses of the controller.\n","items":{"type":"string"},"type":"array"},"bootstrapBase":{"description":"The base for the bootstrap machine.\n","type":"string"},"bootstrapConfig":{"additionalProperties":{"type":"string"},"description":"Configuration options that apply during the bootstrap process.\n","type":"object"},"bootstrapConstraints":{"additionalProperties":{"type":"string"},"description":"Constraints for the bootstrap machine.\n","type":"object"},"caCert":{"description":"CA certificate for the controller.\n","type":"string"},"cloud":{"$ref":"#/types/juju:index%2FControllerCloud:ControllerCloud","description":"The cloud where the controller will operate.\n"},"cloudCredential":{"$ref":"#/types/juju:index%2FControllerCloudCredential:ControllerCloudCredential","description":"Cloud credentials to use for bootstrapping the controller.\n","secret":true},"controllerConfig":{"additionalProperties":{"type":"string"},"description":"Configuration options for the bootstrapped controller. Note that removing a key from this map will not unset it in the controller, instead it will be left unchanged on the controller.\n","type":"object"},"controllerModelConfig":{"additionalProperties":{"type":"string"},"description":"Configuration options to be set for the controller model.\n","type":"object"},"controllerUuid":{"description":"The UUID of the controller.\n","type":"string"},"destroyFlags":{"$ref":"#/types/juju:index%2FControllerDestroyFlags:ControllerDestroyFlags","description":"Additional flags for destroying the controller. Changing any of these values will require applying before they can be taken into account during destroy.\n"},"jujuBinary":{"description":"The path to the juju CLI binary. If you have installed Juju as a snap, use the path `/snap/juju/current/bin/juju` to avoid snap confinement issues.\n","type":"string"},"modelConstraints":{"additionalProperties":{"type":"string"},"description":"Constraints for all workload machines in models.\n","type":"object"},"modelDefault":{"additionalProperties":{"type":"string"},"description":"Configuration options to be set for all models.\n","type":"object"},"name":{"type":"string"},"password":{"description":"Admin password for the controller.\n","secret":true,"type":"string"},"storagePool":{"$ref":"#/types/juju:index%2FControllerStoragePool:ControllerStoragePool","description":"Options for the initial storage pool\n"},"username":{"description":"Admin username for the controller.\n","type":"string"}},"required":["agentVersion","apiAddresses","caCert","cloud","cloudCredential","controllerUuid","jujuBinary","name","password","username"],"requiredInputs":["cloud","cloudCredential","jujuBinary"],"stateInputs":{"description":"Input properties used for looking up and filtering Controller resources.\n","properties":{"agentVersion":{"description":"Specifies a controller version to bootstrap. If not specified, the latest stable agent version will be used. Updating this value only supports in-place upgrades to higher patch versions within the same major.minor series. The provider does not wait for the upgrade to complete, so we recommend waiting for the upgrade to finish before applying further changes.\n","type":"string"},"apiAddresses":{"description":"API addresses of the controller.\n","items":{"type":"string"},"type":"array"},"bootstrapBase":{"description":"The base for the bootstrap machine.\n","type":"string"},"bootstrapConfig":{"additionalProperties":{"type":"string"},"description":"Configuration options that apply during the bootstrap process.\n","type":"object"},"bootstrapConstraints":{"additionalProperties":{"type":"string"},"description":"Constraints for the bootstrap machine.\n","type":"object"},"caCert":{"description":"CA certificate for the controller.\n","type":"string"},"cloud":{"$ref":"#/types/juju:index%2FControllerCloud:ControllerCloud","description":"The cloud where the controller will operate.\n"},"cloudCredential":{"$ref":"#/types/juju:index%2FControllerCloudCredential:ControllerCloudCredential","description":"Cloud credentials to use for bootstrapping the controller.\n","secret":true},"controllerConfig":{"additionalProperties":{"type":"string"},"description":"Configuration options for the bootstrapped controller. Note that removing a key from this map will not unset it in the controller, instead it will be left unchanged on the controller.\n","type":"object"},"controllerModelConfig":{"additionalProperties":{"type":"string"},"description":"Configuration options to be set for the controller model.\n","type":"object"},"controllerUuid":{"description":"The UUID of the controller.\n","type":"string"},"destroyFlags":{"$ref":"#/types/juju:index%2FControllerDestroyFlags:ControllerDestroyFlags","description":"Additional flags for destroying the controller. Changing any of these values will require applying before they can be taken into account during destroy.\n"},"jujuBinary":{"description":"The path to the juju CLI binary. If you have installed Juju as a snap, use the path `/snap/juju/current/bin/juju` to avoid snap confinement issues.\n","type":"string"},"modelConstraints":{"additionalProperties":{"type":"string"},"description":"Constraints for all workload machines in models.\n","type":"object"},"modelDefault":{"additionalProperties":{"type":"string"},"description":"Configuration options to be set for all models.\n","type":"object"},"name":{"type":"string"},"password":{"description":"Admin password for the controller.\n","secret":true,"type":"string"},"storagePool":{"$ref":"#/types/juju:index%2FControllerStoragePool:ControllerStoragePool","description":"Options for the initial storage pool\n"},"username":{"description":"Admin username for the controller.\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/credential:Credential":{"description":"A resource that represent a credential for a cloud.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst _this = new juju.Credential(\"this\", {\n    name: \"creddev\",\n    clouds: [{\n        name: \"localhost\",\n    }],\n    authType: \"certificate\",\n    attributes: {\n        \"client-cert\": \"/srv/cert.crt\",\n        \"client-key\": \"/srv/cert.key\",\n        \"trust-password\": \"S0m3P@$$w0rd\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nthis = juju.Credential(\"this\",\n    name=\"creddev\",\n    clouds=[{\n        \"name\": \"localhost\",\n    }],\n    auth_type=\"certificate\",\n    attributes={\n        \"client-cert\": \"/srv/cert.crt\",\n        \"client-key\": \"/srv/cert.key\",\n        \"trust-password\": \"S0m3P@$$w0rd\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var @this = new Juju.Credential(\"this\", new()\n    {\n        Name = \"creddev\",\n        Clouds = new[]\n        {\n            new Juju.Inputs.CredentialCloudArgs\n            {\n                Name = \"localhost\",\n            },\n        },\n        AuthType = \"certificate\",\n        Attributes = \n        {\n            { \"client-cert\", \"/srv/cert.crt\" },\n            { \"client-key\", \"/srv/cert.key\" },\n            { \"trust-password\", \"S0m3P@$$w0rd\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewCredential(ctx, \"this\", &juju.CredentialArgs{\n\t\t\tName: pulumi.String(\"creddev\"),\n\t\t\tClouds: juju.CredentialCloudArray{\n\t\t\t\t&juju.CredentialCloudArgs{\n\t\t\t\t\tName: pulumi.String(\"localhost\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAuthType: pulumi.String(\"certificate\"),\n\t\t\tAttributes: pulumi.StringMap{\n\t\t\t\t\"client-cert\":    pulumi.String(\"/srv/cert.crt\"),\n\t\t\t\t\"client-key\":     pulumi.String(\"/srv/cert.key\"),\n\t\t\t\t\"trust-password\": pulumi.String(\"S0m3P@$$w0rd\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.Credential;\nimport com.pulumi.juju.CredentialArgs;\nimport com.pulumi.juju.inputs.CredentialCloudArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var this_ = new Credential(\"this\", CredentialArgs.builder()\n            .name(\"creddev\")\n            .clouds(CredentialCloudArgs.builder()\n                .name(\"localhost\")\n                .build())\n            .authType(\"certificate\")\n            .attributes(Map.ofEntries(\n                Map.entry(\"client-cert\", \"/srv/cert.crt\"),\n                Map.entry(\"client-key\", \"/srv/cert.key\"),\n                Map.entry(\"trust-password\", \"S0m3P@$$w0rd\")\n            ))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  this:\n    type: juju:Credential\n    properties:\n      name: creddev\n      clouds:\n        - name: localhost\n      authType: certificate\n      attributes:\n        client-cert: /srv/cert.crt\n        client-key: /srv/cert.key\n        trust-password: S0m3P@$$w0rd\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nCredentials can be imported by using the following pattern: \n\ncredentialname:cloudname:false:true\n\nWhere false means that is not a client credential\n\nand true means that is a Controller credential\n\n```sh\n$ pulumi import juju:index/credential:Credential credential creddev:localhost:false:true\n```\n\n","inputProperties":{"attributes":{"additionalProperties":{"type":"string"},"description":"Credential attributes accordingly to the cloud\n","secret":true,"type":"object"},"authType":{"description":"Credential authorization type.\n","type":"string"},"clientCredential":{"description":"Add credentials to the client.\n","type":"boolean"},"clouds":{"description":"Juju Cloud where the credentials will be used to access.\n","items":{"$ref":"#/types/juju:index%2FCredentialCloud:CredentialCloud"},"type":"array"},"controllerCredential":{"description":"Add credentials to the controller.\n","type":"boolean"},"name":{"type":"string"}},"properties":{"attributes":{"additionalProperties":{"type":"string"},"description":"Credential attributes accordingly to the cloud\n","secret":true,"type":"object"},"authType":{"description":"Credential authorization type.\n","type":"string"},"clientCredential":{"description":"Add credentials to the client.\n","type":"boolean"},"clouds":{"description":"Juju Cloud where the credentials will be used to access.\n","items":{"$ref":"#/types/juju:index%2FCredentialCloud:CredentialCloud"},"type":"array"},"controllerCredential":{"description":"Add credentials to the controller.\n","type":"boolean"},"name":{"type":"string"}},"required":["authType","clientCredential","controllerCredential","name"],"requiredInputs":["authType"],"stateInputs":{"description":"Input properties used for looking up and filtering Credential resources.\n","properties":{"attributes":{"additionalProperties":{"type":"string"},"description":"Credential attributes accordingly to the cloud\n","secret":true,"type":"object"},"authType":{"description":"Credential authorization type.\n","type":"string"},"clientCredential":{"description":"Add credentials to the client.\n","type":"boolean"},"clouds":{"description":"Juju Cloud where the credentials will be used to access.\n","items":{"$ref":"#/types/juju:index%2FCredentialCloud:CredentialCloud"},"type":"array"},"controllerCredential":{"description":"Add credentials to the controller.\n","type":"boolean"},"name":{"type":"string"}},"type":"object"},"type":"object"},"juju:index/integration:Integration":{"description":"A resource that represents a Juju Integration.\n\n","inputProperties":{"applications":{"description":"The two applications to integrate.\n","items":{"$ref":"#/types/juju:index%2FIntegrationApplication:IntegrationApplication"},"type":"array"},"modelUuid":{"description":"The UUID of the model to operate in.\n","type":"string"},"via":{"description":"A comma separated list of CIDRs for outbound traffic.\n","type":"string"}},"properties":{"applications":{"description":"The two applications to integrate.\n","items":{"$ref":"#/types/juju:index%2FIntegrationApplication:IntegrationApplication"},"type":"array"},"modelUuid":{"description":"The UUID of the model to operate in.\n","type":"string"},"via":{"description":"A comma separated list of CIDRs for outbound traffic.\n","type":"string"}},"required":["modelUuid"],"requiredInputs":["modelUuid"],"stateInputs":{"description":"Input properties used for looking up and filtering Integration resources.\n","properties":{"applications":{"description":"The two applications to integrate.\n","items":{"$ref":"#/types/juju:index%2FIntegrationApplication:IntegrationApplication"},"type":"array"},"modelUuid":{"description":"The UUID of the model to operate in.\n","type":"string"},"via":{"description":"A comma separated list of CIDRs for outbound traffic.\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/jaasAccessCloud:JaasAccessCloud":{"description":"A resource that represents access to a cloud when using JAAS.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst development = new juju.JaasAccessCloud(\"development\", {\n    cloudName: \"aws\",\n    access: \"can_addmodel\",\n    users: [\"foo@domain.com\"],\n    groups: [developmentJujuJaasGroup.uuid],\n    idpGroups: [\"engineering\"],\n    serviceAccounts: [\n        \"Client-ID-1\",\n        \"Client-ID-2\",\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\ndevelopment = juju.JaasAccessCloud(\"development\",\n    cloud_name=\"aws\",\n    access=\"can_addmodel\",\n    users=[\"foo@domain.com\"],\n    groups=[development_juju_jaas_group[\"uuid\"]],\n    idp_groups=[\"engineering\"],\n    service_accounts=[\n        \"Client-ID-1\",\n        \"Client-ID-2\",\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var development = new Juju.JaasAccessCloud(\"development\", new()\n    {\n        CloudName = \"aws\",\n        Access = \"can_addmodel\",\n        Users = new[]\n        {\n            \"foo@domain.com\",\n        },\n        Groups = new[]\n        {\n            developmentJujuJaasGroup.Uuid,\n        },\n        IdpGroups = new[]\n        {\n            \"engineering\",\n        },\n        ServiceAccounts = new[]\n        {\n            \"Client-ID-1\",\n            \"Client-ID-2\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewJaasAccessCloud(ctx, \"development\", &juju.JaasAccessCloudArgs{\n\t\t\tCloudName: pulumi.String(\"aws\"),\n\t\t\tAccess:    pulumi.String(\"can_addmodel\"),\n\t\t\tUsers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"foo@domain.com\"),\n\t\t\t},\n\t\t\tGroups: pulumi.StringArray{\n\t\t\t\tdevelopmentJujuJaasGroup.Uuid,\n\t\t\t},\n\t\t\tIdpGroups: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"engineering\"),\n\t\t\t},\n\t\t\tServiceAccounts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"Client-ID-1\"),\n\t\t\t\tpulumi.String(\"Client-ID-2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JaasAccessCloud;\nimport com.pulumi.juju.JaasAccessCloudArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var development = new JaasAccessCloud(\"development\", JaasAccessCloudArgs.builder()\n            .cloudName(\"aws\")\n            .access(\"can_addmodel\")\n            .users(\"foo@domain.com\")\n            .groups(developmentJujuJaasGroup.uuid())\n            .idpGroups(\"engineering\")\n            .serviceAccounts(            \n                \"Client-ID-1\",\n                \"Client-ID-2\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  development:\n    type: juju:JaasAccessCloud\n    properties:\n      cloudName: aws\n      access: can_addmodel\n      users:\n        - foo@domain.com\n      groups:\n        - ${developmentJujuJaasGroup.uuid}\n      idpGroups:\n        - engineering\n      serviceAccounts:\n        - Client-ID-1\n        - Client-ID-2\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nJAAS cloud access can be imported using the cloud name and access level\n\n```sh\n$ pulumi import juju:index/jaasAccessCloud:JaasAccessCloud development aws:can_addmodel\n```\n\n","inputProperties":{"access":{"type":"string"},"cloudName":{"description":"The name of the cloud for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"roles":{"description":"List of roles UUIDs to grant access.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"properties":{"access":{"type":"string"},"cloudName":{"description":"The name of the cloud for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"roles":{"description":"List of roles UUIDs to grant access.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"required":["access","cloudName"],"requiredInputs":["access","cloudName"],"stateInputs":{"description":"Input properties used for looking up and filtering JaasAccessCloud resources.\n","properties":{"access":{"type":"string"},"cloudName":{"description":"The name of the cloud for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"roles":{"description":"List of roles UUIDs to grant access.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"type":"object"},"type":"object"},"juju:index/jaasAccessController:JaasAccessController":{"description":"A resource that represents direct access the JAAS controller.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst development = new juju.JaasAccessController(\"development\", {\n    access: \"administrator\",\n    users: [\"foo@domain.com\"],\n    groups: [developmentJujuJaasGroup.uuid],\n    idpGroups: [\"engineering\"],\n    serviceAccounts: [\n        \"Client-ID-1\",\n        \"Client-ID-2\",\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\ndevelopment = juju.JaasAccessController(\"development\",\n    access=\"administrator\",\n    users=[\"foo@domain.com\"],\n    groups=[development_juju_jaas_group[\"uuid\"]],\n    idp_groups=[\"engineering\"],\n    service_accounts=[\n        \"Client-ID-1\",\n        \"Client-ID-2\",\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var development = new Juju.JaasAccessController(\"development\", new()\n    {\n        Access = \"administrator\",\n        Users = new[]\n        {\n            \"foo@domain.com\",\n        },\n        Groups = new[]\n        {\n            developmentJujuJaasGroup.Uuid,\n        },\n        IdpGroups = new[]\n        {\n            \"engineering\",\n        },\n        ServiceAccounts = new[]\n        {\n            \"Client-ID-1\",\n            \"Client-ID-2\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewJaasAccessController(ctx, \"development\", &juju.JaasAccessControllerArgs{\n\t\t\tAccess: pulumi.String(\"administrator\"),\n\t\t\tUsers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"foo@domain.com\"),\n\t\t\t},\n\t\t\tGroups: pulumi.StringArray{\n\t\t\t\tdevelopmentJujuJaasGroup.Uuid,\n\t\t\t},\n\t\t\tIdpGroups: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"engineering\"),\n\t\t\t},\n\t\t\tServiceAccounts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"Client-ID-1\"),\n\t\t\t\tpulumi.String(\"Client-ID-2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JaasAccessController;\nimport com.pulumi.juju.JaasAccessControllerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var development = new JaasAccessController(\"development\", JaasAccessControllerArgs.builder()\n            .access(\"administrator\")\n            .users(\"foo@domain.com\")\n            .groups(developmentJujuJaasGroup.uuid())\n            .idpGroups(\"engineering\")\n            .serviceAccounts(            \n                \"Client-ID-1\",\n                \"Client-ID-2\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  development:\n    type: juju:JaasAccessController\n    properties:\n      access: administrator\n      users:\n        - foo@domain.com\n      groups:\n        - ${developmentJujuJaasGroup.uuid}\n      idpGroups:\n        - engineering\n      serviceAccounts:\n        - Client-ID-1\n        - Client-ID-2\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nJAAS controller access can be imported using the fixed JAAS controller name and access level\n\nI.e. in this case jimm is the only valid controller name.\n\n```sh\n$ pulumi import juju:index/jaasAccessController:JaasAccessController development jimm:administrator\n```\n\n","inputProperties":{"access":{"type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"roles":{"description":"List of roles UUIDs to grant access.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"properties":{"access":{"type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"roles":{"description":"List of roles UUIDs to grant access.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"required":["access"],"requiredInputs":["access"],"stateInputs":{"description":"Input properties used for looking up and filtering JaasAccessController resources.\n","properties":{"access":{"type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"roles":{"description":"List of roles UUIDs to grant access.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"type":"object"},"type":"object"},"juju:index/jaasAccessGroup:JaasAccessGroup":{"description":"A resource that represents access to a group when using JAAS.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst development = new juju.JaasAccessGroup(\"development\", {\n    groupId: target_group.uuid,\n    access: \"member\",\n    users: [\"foo@domain.com\"],\n    groups: [developmentJujuJaasGroup.uuid],\n    serviceAccounts: [\n        \"Client-ID-1\",\n        \"Client-ID-2\",\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\ndevelopment = juju.JaasAccessGroup(\"development\",\n    group_id=target_group[\"uuid\"],\n    access=\"member\",\n    users=[\"foo@domain.com\"],\n    groups=[development_juju_jaas_group[\"uuid\"]],\n    service_accounts=[\n        \"Client-ID-1\",\n        \"Client-ID-2\",\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var development = new Juju.JaasAccessGroup(\"development\", new()\n    {\n        GroupId = target_group.Uuid,\n        Access = \"member\",\n        Users = new[]\n        {\n            \"foo@domain.com\",\n        },\n        Groups = new[]\n        {\n            developmentJujuJaasGroup.Uuid,\n        },\n        ServiceAccounts = new[]\n        {\n            \"Client-ID-1\",\n            \"Client-ID-2\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewJaasAccessGroup(ctx, \"development\", &juju.JaasAccessGroupArgs{\n\t\t\tGroupId: pulumi.Any(target_group.Uuid),\n\t\t\tAccess:  pulumi.String(\"member\"),\n\t\t\tUsers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"foo@domain.com\"),\n\t\t\t},\n\t\t\tGroups: pulumi.StringArray{\n\t\t\t\tdevelopmentJujuJaasGroup.Uuid,\n\t\t\t},\n\t\t\tServiceAccounts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"Client-ID-1\"),\n\t\t\t\tpulumi.String(\"Client-ID-2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JaasAccessGroup;\nimport com.pulumi.juju.JaasAccessGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var development = new JaasAccessGroup(\"development\", JaasAccessGroupArgs.builder()\n            .groupId(target_group.uuid())\n            .access(\"member\")\n            .users(\"foo@domain.com\")\n            .groups(developmentJujuJaasGroup.uuid())\n            .serviceAccounts(            \n                \"Client-ID-1\",\n                \"Client-ID-2\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  development:\n    type: juju:JaasAccessGroup\n    properties:\n      groupId: ${[\"target-group\"].uuid}\n      access: member\n      users:\n        - foo@domain.com\n      groups:\n        - ${developmentJujuJaasGroup.uuid}\n      serviceAccounts:\n        - Client-ID-1\n        - Client-ID-2\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nJAAS group access can be imported using the group UUID and access level\n\n```sh\n$ pulumi import juju:index/jaasAccessGroup:JaasAccessGroup development UUID:member\n```\n\n","inputProperties":{"access":{"type":"string"},"groupId":{"description":"The ID of the group for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"properties":{"access":{"type":"string"},"groupId":{"description":"The ID of the group for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"required":["access","groupId"],"requiredInputs":["access","groupId"],"stateInputs":{"description":"Input properties used for looking up and filtering JaasAccessGroup resources.\n","properties":{"access":{"type":"string"},"groupId":{"description":"The ID of the group for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"type":"object"},"type":"object"},"juju:index/jaasAccessModel:JaasAccessModel":{"description":"A resource that represent access to a model when using JAAS.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst development = new juju.JaasAccessModel(\"development\", {\n    modelUuid: developmentJujuModel.uuid,\n    access: \"administrator\",\n    users: [\"foo@domain.com\"],\n    groups: [developmentJujuJaasGroup.uuid],\n    idpGroups: [\"engineering\"],\n    serviceAccounts: [\n        \"Client-ID-1\",\n        \"Client-ID-2\",\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\ndevelopment = juju.JaasAccessModel(\"development\",\n    model_uuid=development_juju_model[\"uuid\"],\n    access=\"administrator\",\n    users=[\"foo@domain.com\"],\n    groups=[development_juju_jaas_group[\"uuid\"]],\n    idp_groups=[\"engineering\"],\n    service_accounts=[\n        \"Client-ID-1\",\n        \"Client-ID-2\",\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var development = new Juju.JaasAccessModel(\"development\", new()\n    {\n        ModelUuid = developmentJujuModel.Uuid,\n        Access = \"administrator\",\n        Users = new[]\n        {\n            \"foo@domain.com\",\n        },\n        Groups = new[]\n        {\n            developmentJujuJaasGroup.Uuid,\n        },\n        IdpGroups = new[]\n        {\n            \"engineering\",\n        },\n        ServiceAccounts = new[]\n        {\n            \"Client-ID-1\",\n            \"Client-ID-2\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewJaasAccessModel(ctx, \"development\", &juju.JaasAccessModelArgs{\n\t\t\tModelUuid: pulumi.Any(developmentJujuModel.Uuid),\n\t\t\tAccess:    pulumi.String(\"administrator\"),\n\t\t\tUsers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"foo@domain.com\"),\n\t\t\t},\n\t\t\tGroups: pulumi.StringArray{\n\t\t\t\tdevelopmentJujuJaasGroup.Uuid,\n\t\t\t},\n\t\t\tIdpGroups: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"engineering\"),\n\t\t\t},\n\t\t\tServiceAccounts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"Client-ID-1\"),\n\t\t\t\tpulumi.String(\"Client-ID-2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JaasAccessModel;\nimport com.pulumi.juju.JaasAccessModelArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var development = new JaasAccessModel(\"development\", JaasAccessModelArgs.builder()\n            .modelUuid(developmentJujuModel.uuid())\n            .access(\"administrator\")\n            .users(\"foo@domain.com\")\n            .groups(developmentJujuJaasGroup.uuid())\n            .idpGroups(\"engineering\")\n            .serviceAccounts(            \n                \"Client-ID-1\",\n                \"Client-ID-2\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  development:\n    type: juju:JaasAccessModel\n    properties:\n      modelUuid: ${developmentJujuModel.uuid}\n      access: administrator\n      users:\n        - foo@domain.com\n      groups:\n        - ${developmentJujuJaasGroup.uuid}\n      idpGroups:\n        - engineering\n      serviceAccounts:\n        - Client-ID-1\n        - Client-ID-2\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nJAAS model access can be imported using the model name and access level\n\n```sh\n$ pulumi import juju:index/jaasAccessModel:JaasAccessModel development development:can_addmodel\n```\n\n","inputProperties":{"access":{"type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"modelUuid":{"description":"The uuid of the model for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"roles":{"description":"List of roles UUIDs to grant access.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"properties":{"access":{"type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"modelUuid":{"description":"The uuid of the model for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"roles":{"description":"List of roles UUIDs to grant access.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"required":["access","modelUuid"],"requiredInputs":["access","modelUuid"],"stateInputs":{"description":"Input properties used for looking up and filtering JaasAccessModel resources.\n","properties":{"access":{"type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"modelUuid":{"description":"The uuid of the model for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"roles":{"description":"List of roles UUIDs to grant access.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"type":"object"},"type":"object"},"juju:index/jaasAccessOffer:JaasAccessOffer":{"description":"A resource that represent access to an offer when using JAAS.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst development = new juju.JaasAccessOffer(\"development\", {\n    offerUrl: myoffer.url,\n    access: \"consumer\",\n    users: [\"foo@domain.com\"],\n    groups: [developmentJujuJaasGroup.uuid],\n    idpGroups: [\"engineering\"],\n    serviceAccounts: [\n        \"Client-ID-1\",\n        \"Client-ID-2\",\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\ndevelopment = juju.JaasAccessOffer(\"development\",\n    offer_url=myoffer[\"url\"],\n    access=\"consumer\",\n    users=[\"foo@domain.com\"],\n    groups=[development_juju_jaas_group[\"uuid\"]],\n    idp_groups=[\"engineering\"],\n    service_accounts=[\n        \"Client-ID-1\",\n        \"Client-ID-2\",\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var development = new Juju.JaasAccessOffer(\"development\", new()\n    {\n        OfferUrl = myoffer.Url,\n        Access = \"consumer\",\n        Users = new[]\n        {\n            \"foo@domain.com\",\n        },\n        Groups = new[]\n        {\n            developmentJujuJaasGroup.Uuid,\n        },\n        IdpGroups = new[]\n        {\n            \"engineering\",\n        },\n        ServiceAccounts = new[]\n        {\n            \"Client-ID-1\",\n            \"Client-ID-2\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewJaasAccessOffer(ctx, \"development\", &juju.JaasAccessOfferArgs{\n\t\t\tOfferUrl: pulumi.Any(myoffer.Url),\n\t\t\tAccess:   pulumi.String(\"consumer\"),\n\t\t\tUsers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"foo@domain.com\"),\n\t\t\t},\n\t\t\tGroups: pulumi.StringArray{\n\t\t\t\tdevelopmentJujuJaasGroup.Uuid,\n\t\t\t},\n\t\t\tIdpGroups: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"engineering\"),\n\t\t\t},\n\t\t\tServiceAccounts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"Client-ID-1\"),\n\t\t\t\tpulumi.String(\"Client-ID-2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JaasAccessOffer;\nimport com.pulumi.juju.JaasAccessOfferArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var development = new JaasAccessOffer(\"development\", JaasAccessOfferArgs.builder()\n            .offerUrl(myoffer.url())\n            .access(\"consumer\")\n            .users(\"foo@domain.com\")\n            .groups(developmentJujuJaasGroup.uuid())\n            .idpGroups(\"engineering\")\n            .serviceAccounts(            \n                \"Client-ID-1\",\n                \"Client-ID-2\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  development:\n    type: juju:JaasAccessOffer\n    properties:\n      offerUrl: ${myoffer.url}\n      access: consumer\n      users:\n        - foo@domain.com\n      groups:\n        - ${developmentJujuJaasGroup.uuid}\n      idpGroups:\n        - engineering\n      serviceAccounts:\n        - Client-ID-1\n        - Client-ID-2\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nJAAS offer access can be imported by using the URL as in the juju show-offers output and the access level.\n\nExample:\n\n$ juju show-offer mysql\n\nStore            URL             Access  Description                                    Endpoint  Interface  Role\n\nmycontroller     admin/db.mysql  admin   MariaDB Server is one of the most ...          mysql     mysql      provider\n\n```sh\n$ pulumi import juju:index/jaasAccessOffer:JaasAccessOffer db admin/db.mysql:consumer\n```\n\n","inputProperties":{"access":{"type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"offerUrl":{"description":"The url of the offer for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"roles":{"description":"List of roles UUIDs to grant access.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"properties":{"access":{"type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"offerUrl":{"description":"The url of the offer for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"roles":{"description":"List of roles UUIDs to grant access.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"required":["access","offerUrl"],"requiredInputs":["access","offerUrl"],"stateInputs":{"description":"Input properties used for looking up and filtering JaasAccessOffer resources.\n","properties":{"access":{"type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"offerUrl":{"description":"The url of the offer for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"roles":{"description":"List of roles UUIDs to grant access.\n","items":{"type":"string"},"type":"array"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"type":"object"},"type":"object"},"juju:index/jaasAccessRole:JaasAccessRole":{"description":"A resource that represents access to a role when using JAAS.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```yaml\nresources:\n  development:\n    type: juju:JaasAccessRole\n    properties:\n      roleId: ${[\"target-role\"].uuid}\n      access: assignee\n      users:\n        - foo@domain.com\n      roles:\n        - ${developmentJujuJaasRole.uuid}\n      idpGroups:\n        - engineering\n      serviceAccounts:\n        - Client-ID-1\n        - Client-ID-2\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nJAAS role access can be imported using the role UUID and access level\n\n```sh\n$ pulumi import juju:index/jaasAccessRole:JaasAccessRole development UUID:assignee\n```\n\n","inputProperties":{"access":{"type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"roleId":{"description":"The UUID of the role for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"properties":{"access":{"type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"roleId":{"description":"The UUID of the role for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"required":["access","roleId"],"requiredInputs":["access","roleId"],"stateInputs":{"description":"Input properties used for looking up and filtering JaasAccessRole resources.\n","properties":{"access":{"type":"string"},"groups":{"description":"List of groups to grant access. A valid group ID is the group's UUID.\n","items":{"type":"string"},"type":"array"},"idpGroups":{"description":"List of identity provider groups to grant access. IdP groups have no provider-side format restriction.\n","items":{"type":"string"},"type":"array"},"roleId":{"description":"The UUID of the role for access management. If this is changed the resource will be deleted and a new resource will be created.\n","type":"string"},"serviceAccounts":{"description":"List of service accounts to grant access. A valid service account is the service account's name.\n","items":{"type":"string"},"type":"array"},"users":{"description":"List of users to grant access. A valid user is the user's name or email.\n","items":{"type":"string"},"type":"array"}},"type":"object"},"type":"object"},"juju:index/jaasController:JaasController":{"description":"A resource that represents a controller registered in JAAS (JIMM).\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst _this = new juju.Controller(\"this\", {name: \"my-controller\"});\nconst jaas = new juju.JaasController(\"jaas\", {\n    name: _this.name,\n    uuid: _this.controllerUuid,\n    apiAddresses: _this.apiAddresses,\n    caCertificate: _this.caCert,\n    username: _this.username,\n    password: _this.password,\n    tlsHostname: \"juju-apiserver\",\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nthis = juju.Controller(\"this\", name=\"my-controller\")\njaas = juju.JaasController(\"jaas\",\n    name=this.name,\n    uuid=this.controller_uuid,\n    api_addresses=this.api_addresses,\n    ca_certificate=this.ca_cert,\n    username=this.username,\n    password=this.password,\n    tls_hostname=\"juju-apiserver\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var @this = new Juju.Controller(\"this\", new()\n    {\n        Name = \"my-controller\",\n    });\n\n    var jaas = new Juju.JaasController(\"jaas\", new()\n    {\n        Name = @this.Name,\n        Uuid = @this.ControllerUuid,\n        ApiAddresses = @this.ApiAddresses,\n        CaCertificate = @this.CaCert,\n        Username = @this.Username,\n        Password = @this.Password,\n        TlsHostname = \"juju-apiserver\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tthis, err := juju.NewController(ctx, \"this\", &juju.ControllerArgs{\n\t\t\tName: pulumi.String(\"my-controller\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = juju.NewJaasController(ctx, \"jaas\", &juju.JaasControllerArgs{\n\t\t\tName:          this.Name,\n\t\t\tUuid:          this.ControllerUuid,\n\t\t\tApiAddresses:  this.ApiAddresses,\n\t\t\tCaCertificate: this.CaCert,\n\t\t\tUsername:      this.Username,\n\t\t\tPassword:      this.Password,\n\t\t\tTlsHostname:   pulumi.String(\"juju-apiserver\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.Controller;\nimport com.pulumi.juju.ControllerArgs;\nimport com.pulumi.juju.JaasController;\nimport com.pulumi.juju.JaasControllerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var this_ = new Controller(\"this\", ControllerArgs.builder()\n            .name(\"my-controller\")\n            .build());\n\n        var jaas = new JaasController(\"jaas\", JaasControllerArgs.builder()\n            .name(this_.name())\n            .uuid(this_.controllerUuid())\n            .apiAddresses(this_.apiAddresses())\n            .caCertificate(this_.caCert())\n            .username(this_.username())\n            .password(this_.password())\n            .tlsHostname(\"juju-apiserver\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  this:\n    type: juju:Controller\n    properties:\n      name: my-controller\n  jaas:\n    type: juju:JaasController\n    properties:\n      name: ${this.name}\n      uuid: ${this.controllerUuid}\n      apiAddresses: ${this.apiAddresses}\n      caCertificate: ${this.caCert}\n      username: ${this.username}\n      password: ${this.password}\n      tlsHostname: juju-apiserver\n```\n<!--End PulumiCodeChooser -->\n","inputProperties":{"apiAddresses":{"description":"API addresses of the controller. If the controller is HA, only 1 address needs to be provided but multiple addresses are also accepted.\n","items":{"type":"string"},"type":"array"},"caCertificate":{"description":"CA certificate for the controller.\n","type":"string"},"force":{"description":"Force removal when deleting (only required when the controller is still available).\n","type":"boolean"},"name":{"description":"Name of the controller to register.\n","type":"string"},"password":{"description":"Password that JIMM should use to connect to the controller.\n","secret":true,"type":"string"},"publicAddress":{"description":"Public address of the controller (typically host:port) to be used instead of providing api_addresses.\n","type":"string"},"tlsHostname":{"description":"Hostname used for TLS verification. When connecting directly to a controller, you may need to specify a TLS hostname for SNI purposes that matches the controller's self-signed certificate.\n","type":"string"},"username":{"description":"Username that JIMM should use to connect to the controller.\n","secret":true,"type":"string"},"uuid":{"description":"UUID of the controller.\n","type":"string"}},"properties":{"apiAddresses":{"description":"API addresses of the controller. If the controller is HA, only 1 address needs to be provided but multiple addresses are also accepted.\n","items":{"type":"string"},"type":"array"},"caCertificate":{"description":"CA certificate for the controller.\n","type":"string"},"force":{"description":"Force removal when deleting (only required when the controller is still available).\n","type":"boolean"},"name":{"description":"Name of the controller to register.\n","type":"string"},"password":{"description":"Password that JIMM should use to connect to the controller.\n","secret":true,"type":"string"},"publicAddress":{"description":"Public address of the controller (typically host:port) to be used instead of providing api_addresses.\n","type":"string"},"status":{"description":"Status of the controller (available/deprecated/unavailable).\n","type":"string"},"tlsHostname":{"description":"Hostname used for TLS verification. When connecting directly to a controller, you may need to specify a TLS hostname for SNI purposes that matches the controller's self-signed certificate.\n","type":"string"},"username":{"description":"Username that JIMM should use to connect to the controller.\n","secret":true,"type":"string"},"uuid":{"description":"UUID of the controller.\n","type":"string"}},"required":["name","password","publicAddress","status","username","uuid"],"requiredInputs":["password","username","uuid"],"stateInputs":{"description":"Input properties used for looking up and filtering JaasController resources.\n","properties":{"apiAddresses":{"description":"API addresses of the controller. If the controller is HA, only 1 address needs to be provided but multiple addresses are also accepted.\n","items":{"type":"string"},"type":"array"},"caCertificate":{"description":"CA certificate for the controller.\n","type":"string"},"force":{"description":"Force removal when deleting (only required when the controller is still available).\n","type":"boolean"},"name":{"description":"Name of the controller to register.\n","type":"string"},"password":{"description":"Password that JIMM should use to connect to the controller.\n","secret":true,"type":"string"},"publicAddress":{"description":"Public address of the controller (typically host:port) to be used instead of providing api_addresses.\n","type":"string"},"status":{"description":"Status of the controller (available/deprecated/unavailable).\n","type":"string"},"tlsHostname":{"description":"Hostname used for TLS verification. When connecting directly to a controller, you may need to specify a TLS hostname for SNI purposes that matches the controller's self-signed certificate.\n","type":"string"},"username":{"description":"Username that JIMM should use to connect to the controller.\n","secret":true,"type":"string"},"uuid":{"description":"UUID of the controller.\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/jaasGroup:JaasGroup":{"description":"A resource that represents a group in JAAS\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst development = new juju.JaasGroup(\"development\", {name: \"devops-team\"});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\ndevelopment = juju.JaasGroup(\"development\", name=\"devops-team\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var development = new Juju.JaasGroup(\"development\", new()\n    {\n        Name = \"devops-team\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewJaasGroup(ctx, \"development\", &juju.JaasGroupArgs{\n\t\t\tName: pulumi.String(\"devops-team\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JaasGroup;\nimport com.pulumi.juju.JaasGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var development = new JaasGroup(\"development\", JaasGroupArgs.builder()\n            .name(\"devops-team\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  development:\n    type: juju:JaasGroup\n    properties:\n      name: devops-team\n```\n<!--End PulumiCodeChooser -->\n","inputProperties":{"name":{"description":"Name of the group\n","type":"string"}},"properties":{"name":{"description":"Name of the group\n","type":"string"},"uuid":{"description":"UUID of the group\n","type":"string"}},"required":["name","uuid"],"stateInputs":{"description":"Input properties used for looking up and filtering JaasGroup resources.\n","properties":{"name":{"description":"Name of the group\n","type":"string"},"uuid":{"description":"UUID of the group\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/jaasRole:JaasRole":{"description":"A resource that represents a role in JAAS\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst development = new juju.JaasRole(\"development\", {name: \"devops-team\"});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\ndevelopment = juju.JaasRole(\"development\", name=\"devops-team\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var development = new Juju.JaasRole(\"development\", new()\n    {\n        Name = \"devops-team\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewJaasRole(ctx, \"development\", &juju.JaasRoleArgs{\n\t\t\tName: pulumi.String(\"devops-team\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.JaasRole;\nimport com.pulumi.juju.JaasRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var development = new JaasRole(\"development\", JaasRoleArgs.builder()\n            .name(\"devops-team\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  development:\n    type: juju:JaasRole\n    properties:\n      name: devops-team\n```\n<!--End PulumiCodeChooser -->\n","inputProperties":{"name":{"description":"Name of the role\n","type":"string"}},"properties":{"name":{"description":"Name of the role\n","type":"string"},"uuid":{"description":"UUID of the role\n","type":"string"}},"required":["name","uuid"],"stateInputs":{"description":"Input properties used for looking up and filtering JaasRole resources.\n","properties":{"name":{"description":"Name of the role\n","type":"string"},"uuid":{"description":"UUID of the role\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/kubernetesCloud:KubernetesCloud":{"description":"A resource that represent a Juju Cloud for existing controller.\n\n","inputProperties":{"kubernetesConfig":{"description":"The kubernetes config file path for the cloud. Cloud credentials will be added to the Juju controller for you.\n","secret":true,"type":"string"},"name":{"type":"string"},"parentCloudName":{"type":"string"},"parentCloudRegion":{"type":"string"},"skipServiceAccountCreation":{"type":"boolean"},"storageClassName":{"description":"Specify the Kubernetes storage class name for workload and operator storage.\n","type":"string"}},"properties":{"credential":{"description":"The name of the credential created for this cloud.","type":"string"},"kubernetesConfig":{"description":"The kubernetes config file path for the cloud. Cloud credentials will be added to the Juju controller for you.\n","secret":true,"type":"string"},"name":{"type":"string"},"parentCloudName":{"type":"string"},"parentCloudRegion":{"type":"string"},"skipServiceAccountCreation":{"type":"boolean"},"storageClassName":{"description":"Specify the Kubernetes storage class name for workload and operator storage.\n","type":"string"}},"required":["credential","name"],"stateInputs":{"description":"Input properties used for looking up and filtering KubernetesCloud resources.\n","properties":{"credential":{"description":"The name of the credential created for this cloud.","type":"string"},"kubernetesConfig":{"description":"The kubernetes config file path for the cloud. Cloud credentials will be added to the Juju controller for you.\n","secret":true,"type":"string"},"name":{"type":"string"},"parentCloudName":{"type":"string"},"parentCloudRegion":{"type":"string"},"skipServiceAccountCreation":{"type":"boolean"},"storageClassName":{"description":"Specify the Kubernetes storage class name for workload and operator storage.\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/machine:Machine":{"description":"A resource that represents a Juju machine deployment. Refer to the juju add-machine CLI command for more information and limitations.\n\n## Import\n\nMachines can be imported using the format: `model_uuid:machine_id:machine_name`.\n\nThe value of machine_id is the Juju Machine ID. machine_name is an optional \n\nname you can define in Terraform for the machine. It is not used in Juju.\n\nHere is an example to import a machine from a model with machine ID 1 and a \n\nname \"machine_one\":\n\n```sh\n$ pulumi import juju:index/machine:Machine machine_one 4ffb2226-6ced-458b-8b38-5143ca190f75:1:machine_one\n```\n\n","inputProperties":{"annotations":{"additionalProperties":{"type":"string"},"description":"Annotations are key/value pairs that can be used to store additional information about the machine. May not contain dots (.) in keys.\n","type":"object"},"base":{"type":"string"},"constraints":{"type":"string"},"disks":{"type":"string"},"modelUuid":{"type":"string"},"name":{"type":"string"},"placement":{"type":"string"},"privateKeyFile":{"description":"The file path to read the private key from.\n","type":"string"},"publicKeyFile":{"description":"The file path to read the public key from.\n","type":"string"},"sshAddress":{"type":"string"},"timeouts":{"$ref":"#/types/juju:index%2FMachineTimeouts:MachineTimeouts"},"waitForHostname":{"description":"If true, waits for the machine's hostname to be set during creation. A side effect is that this also waits for the machine to reach 'active' state in Juju.\n","type":"boolean"}},"properties":{"annotations":{"additionalProperties":{"type":"string"},"description":"Annotations are key/value pairs that can be used to store additional information about the machine. May not contain dots (.) in keys.\n","type":"object"},"base":{"type":"string"},"constraints":{"type":"string"},"disks":{"type":"string"},"hostname":{"description":"The machine's hostname. This is set only if 'wait*for*hostname' is true.\n","type":"string"},"instanceId":{"description":"The provider-specific instance id of the machine Juju creates.\n","type":"string"},"machineId":{"description":"The id of the machine Juju creates.\n","type":"string"},"modelUuid":{"type":"string"},"name":{"type":"string"},"placement":{"type":"string"},"privateKeyFile":{"description":"The file path to read the private key from.\n","type":"string"},"publicKeyFile":{"description":"The file path to read the public key from.\n","type":"string"},"sshAddress":{"type":"string"},"timeouts":{"$ref":"#/types/juju:index%2FMachineTimeouts:MachineTimeouts"},"waitForHostname":{"description":"If true, waits for the machine's hostname to be set during creation. A side effect is that this also waits for the machine to reach 'active' state in Juju.\n","type":"boolean"}},"required":["base","constraints","hostname","instanceId","machineId","modelUuid","name"],"requiredInputs":["modelUuid"],"stateInputs":{"description":"Input properties used for looking up and filtering Machine resources.\n","properties":{"annotations":{"additionalProperties":{"type":"string"},"description":"Annotations are key/value pairs that can be used to store additional information about the machine. May not contain dots (.) in keys.\n","type":"object"},"base":{"type":"string"},"constraints":{"type":"string"},"disks":{"type":"string"},"hostname":{"description":"The machine's hostname. This is set only if 'wait*for*hostname' is true.\n","type":"string"},"instanceId":{"description":"The provider-specific instance id of the machine Juju creates.\n","type":"string"},"machineId":{"description":"The id of the machine Juju creates.\n","type":"string"},"modelUuid":{"type":"string"},"name":{"type":"string"},"placement":{"type":"string"},"privateKeyFile":{"description":"The file path to read the private key from.\n","type":"string"},"publicKeyFile":{"description":"The file path to read the public key from.\n","type":"string"},"sshAddress":{"type":"string"},"timeouts":{"$ref":"#/types/juju:index%2FMachineTimeouts:MachineTimeouts"},"waitForHostname":{"description":"If true, waits for the machine's hostname to be set during creation. A side effect is that this also waits for the machine to reach 'active' state in Juju.\n","type":"boolean"}},"type":"object"},"type":"object"},"juju:index/model:Model":{"description":"A resource that represent a Juju Model.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst _this = new juju.Model(\"this\", {\n    name: \"development\",\n    clouds: [{\n        name: \"aws\",\n        region: \"eu-west-1\",\n    }],\n    config: {\n        \"logging-config\": \"<root>=INFO\",\n        development: \"true\",\n        \"no-proxy\": \"jujucharms.com\",\n        \"update-status-hook-interval\": \"5m\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nthis = juju.Model(\"this\",\n    name=\"development\",\n    clouds=[{\n        \"name\": \"aws\",\n        \"region\": \"eu-west-1\",\n    }],\n    config={\n        \"logging-config\": \"<root>=INFO\",\n        \"development\": \"true\",\n        \"no-proxy\": \"jujucharms.com\",\n        \"update-status-hook-interval\": \"5m\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var @this = new Juju.Model(\"this\", new()\n    {\n        Name = \"development\",\n        Clouds = new[]\n        {\n            new Juju.Inputs.ModelCloudArgs\n            {\n                Name = \"aws\",\n                Region = \"eu-west-1\",\n            },\n        },\n        Config = \n        {\n            { \"logging-config\", \"<root>=INFO\" },\n            { \"development\", \"true\" },\n            { \"no-proxy\", \"jujucharms.com\" },\n            { \"update-status-hook-interval\", \"5m\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewModel(ctx, \"this\", &juju.ModelArgs{\n\t\t\tName: pulumi.String(\"development\"),\n\t\t\tClouds: juju.ModelCloudArray{\n\t\t\t\t&juju.ModelCloudArgs{\n\t\t\t\t\tName:   pulumi.String(\"aws\"),\n\t\t\t\t\tRegion: pulumi.String(\"eu-west-1\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tConfig: pulumi.StringMap{\n\t\t\t\t\"logging-config\":              pulumi.String(\"<root>=INFO\"),\n\t\t\t\t\"development\":                 pulumi.String(\"true\"),\n\t\t\t\t\"no-proxy\":                    pulumi.String(\"jujucharms.com\"),\n\t\t\t\t\"update-status-hook-interval\": pulumi.String(\"5m\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.Model;\nimport com.pulumi.juju.ModelArgs;\nimport com.pulumi.juju.inputs.ModelCloudArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var this_ = new Model(\"this\", ModelArgs.builder()\n            .name(\"development\")\n            .clouds(ModelCloudArgs.builder()\n                .name(\"aws\")\n                .region(\"eu-west-1\")\n                .build())\n            .config(Map.ofEntries(\n                Map.entry(\"logging-config\", \"<root>=INFO\"),\n                Map.entry(\"development\", \"true\"),\n                Map.entry(\"no-proxy\", \"jujucharms.com\"),\n                Map.entry(\"update-status-hook-interval\", \"5m\")\n            ))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  this:\n    type: juju:Model\n    properties:\n      name: development\n      clouds:\n        - name: aws\n          region: eu-west-1\n      config:\n        logging-config: <root>=INFO\n        development: true\n        no-proxy: jujucharms.com\n        update-status-hook-interval: 5m\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\n### Limitations of Import\n\nAny entries of the `config` attribute specified in the Terraform configuration are ignored. You can add entries to the `config` map and manage them using Terraform after import.\n\nOnce imported you must add the desired model configuration and run a pulumi up. This will report no changes but Terraform will be tracking the specified model configuration.\n\nThe limitation is intentional. It exists as, without it, Terraform would import all model configuration including defaults. It may not be desirable to manage defaults using Terraform.\n\n","inputProperties":{"agentVersion":{"description":"The model's Juju agent version. This is computed from the controller and can be set on an existing model to request an upgrade.\n","type":"string"},"annotations":{"additionalProperties":{"type":"string"},"description":"Annotations for the model\n","type":"object"},"clouds":{"items":{"$ref":"#/types/juju:index%2FModelCloud:ModelCloud"},"type":"array"},"config":{"additionalProperties":{"type":"string"},"description":"Override default model configuration. You may also set the 'secret-backend' key here for backward compatibility with Juju 3, but the recommended approach is to use the<span pulumi-lang-nodejs=\" secretBackend \" pulumi-lang-dotnet=\" SecretBackend \" pulumi-lang-go=\" secretBackend \" pulumi-lang-python=\" secret_backend \" pulumi-lang-yaml=\" secretBackend \" pulumi-lang-java=\" secretBackend \"> secret_backend </span>attribute.\n","type":"object"},"constraints":{"description":"Constraints imposed to this model\n","type":"string"},"credential":{"description":"Credential used to add the model\n","type":"string"},"name":{"type":"string"},"secretBackend":{"description":"The name of the secret backend to use for this model. On Juju 4+, this uses the dedicated model-secret-backend API. On Juju 3, it falls back to setting the 'secret-backend' model config key. Use this instead of setting 'secret-backend' in the config block.\n","type":"string"},"targetController":{"description":"Only useful with JAAS - the backing controller where the model will be created. If not set, a random controller the user has access to supporting the desired cloud will be used.\n","type":"string"}},"properties":{"agentVersion":{"description":"The model's Juju agent version. This is computed from the controller and can be set on an existing model to request an upgrade.\n","type":"string"},"annotations":{"additionalProperties":{"type":"string"},"description":"Annotations for the model\n","type":"object"},"clouds":{"items":{"$ref":"#/types/juju:index%2FModelCloud:ModelCloud"},"type":"array"},"config":{"additionalProperties":{"type":"string"},"description":"Override default model configuration. You may also set the 'secret-backend' key here for backward compatibility with Juju 3, but the recommended approach is to use the<span pulumi-lang-nodejs=\" secretBackend \" pulumi-lang-dotnet=\" SecretBackend \" pulumi-lang-go=\" secretBackend \" pulumi-lang-python=\" secret_backend \" pulumi-lang-yaml=\" secretBackend \" pulumi-lang-java=\" secretBackend \"> secret_backend </span>attribute.\n","type":"object"},"constraints":{"description":"Constraints imposed to this model\n","type":"string"},"credential":{"description":"Credential used to add the model\n","type":"string"},"name":{"type":"string"},"secretBackend":{"description":"The name of the secret backend to use for this model. On Juju 4+, this uses the dedicated model-secret-backend API. On Juju 3, it falls back to setting the 'secret-backend' model config key. Use this instead of setting 'secret-backend' in the config block.\n","type":"string"},"targetController":{"description":"Only useful with JAAS - the backing controller where the model will be created. If not set, a random controller the user has access to supporting the desired cloud will be used.\n","type":"string"},"type":{"description":"Type of the model. Set by the Juju's API server\n","type":"string"},"uuid":{"description":"The uuid of the model\n","type":"string"}},"required":["agentVersion","credential","name","type","uuid"],"stateInputs":{"description":"Input properties used for looking up and filtering Model resources.\n","properties":{"agentVersion":{"description":"The model's Juju agent version. This is computed from the controller and can be set on an existing model to request an upgrade.\n","type":"string"},"annotations":{"additionalProperties":{"type":"string"},"description":"Annotations for the model\n","type":"object"},"clouds":{"items":{"$ref":"#/types/juju:index%2FModelCloud:ModelCloud"},"type":"array"},"config":{"additionalProperties":{"type":"string"},"description":"Override default model configuration. You may also set the 'secret-backend' key here for backward compatibility with Juju 3, but the recommended approach is to use the<span pulumi-lang-nodejs=\" secretBackend \" pulumi-lang-dotnet=\" SecretBackend \" pulumi-lang-go=\" secretBackend \" pulumi-lang-python=\" secret_backend \" pulumi-lang-yaml=\" secretBackend \" pulumi-lang-java=\" secretBackend \"> secret_backend </span>attribute.\n","type":"object"},"constraints":{"description":"Constraints imposed to this model\n","type":"string"},"credential":{"description":"Credential used to add the model\n","type":"string"},"name":{"type":"string"},"secretBackend":{"description":"The name of the secret backend to use for this model. On Juju 4+, this uses the dedicated model-secret-backend API. On Juju 3, it falls back to setting the 'secret-backend' model config key. Use this instead of setting 'secret-backend' in the config block.\n","type":"string"},"targetController":{"description":"Only useful with JAAS - the backing controller where the model will be created. If not set, a random controller the user has access to supporting the desired cloud will be used.\n","type":"string"},"type":{"description":"Type of the model. Set by the Juju's API server\n","type":"string"},"uuid":{"description":"The uuid of the model\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/offer:Offer":{"description":"A resource that represent a Juju Offer.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst myoffer = new juju.Offer(\"myoffer\", {\n    modelUuid: development.uuid,\n    applicationName: percona_cluster.name,\n    endpoints: [\"server\"],\n});\n// an offer can then be used in an cross model integration as below:\nconst myintegration = new juju.Integration(\"myintegration\", {\n    modelUuid: development_destination.name,\n    applications: [\n        {\n            name: wordpress.name,\n            endpoint: \"db\",\n        },\n        {\n            offerUrl: myoffer.url,\n        },\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nmyoffer = juju.Offer(\"myoffer\",\n    model_uuid=development[\"uuid\"],\n    application_name=percona_cluster[\"name\"],\n    endpoints=[\"server\"])\n# an offer can then be used in an cross model integration as below:\nmyintegration = juju.Integration(\"myintegration\",\n    model_uuid=development_destination[\"name\"],\n    applications=[\n        {\n            \"name\": wordpress[\"name\"],\n            \"endpoint\": \"db\",\n        },\n        {\n            \"offer_url\": myoffer.url,\n        },\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var myoffer = new Juju.Offer(\"myoffer\", new()\n    {\n        ModelUuid = development.Uuid,\n        ApplicationName = percona_cluster.Name,\n        Endpoints = new[]\n        {\n            \"server\",\n        },\n    });\n\n    // an offer can then be used in an cross model integration as below:\n    var myintegration = new Juju.Integration(\"myintegration\", new()\n    {\n        ModelUuid = development_destination.Name,\n        Applications = new[]\n        {\n            new Juju.Inputs.IntegrationApplicationArgs\n            {\n                Name = wordpress.Name,\n                Endpoint = \"db\",\n            },\n            new Juju.Inputs.IntegrationApplicationArgs\n            {\n                OfferUrl = myoffer.Url,\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyoffer, err := juju.NewOffer(ctx, \"myoffer\", &juju.OfferArgs{\n\t\t\tModelUuid:       pulumi.Any(development.Uuid),\n\t\t\tApplicationName: pulumi.Any(percona_cluster.Name),\n\t\t\tEndpoints: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"server\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// an offer can then be used in an cross model integration as below:\n\t\t_, err = juju.NewIntegration(ctx, \"myintegration\", &juju.IntegrationArgs{\n\t\t\tModelUuid: pulumi.Any(development_destination.Name),\n\t\t\tApplications: juju.IntegrationApplicationArray{\n\t\t\t\t&juju.IntegrationApplicationArgs{\n\t\t\t\t\tName:     pulumi.Any(wordpress.Name),\n\t\t\t\t\tEndpoint: pulumi.String(\"db\"),\n\t\t\t\t},\n\t\t\t\t&juju.IntegrationApplicationArgs{\n\t\t\t\t\tOfferUrl: myoffer.Url,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.Offer;\nimport com.pulumi.juju.OfferArgs;\nimport com.pulumi.juju.Integration;\nimport com.pulumi.juju.IntegrationArgs;\nimport com.pulumi.juju.inputs.IntegrationApplicationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var myoffer = new Offer(\"myoffer\", OfferArgs.builder()\n            .modelUuid(development.uuid())\n            .applicationName(percona_cluster.name())\n            .endpoints(\"server\")\n            .build());\n\n        // an offer can then be used in an cross model integration as below:\n        var myintegration = new Integration(\"myintegration\", IntegrationArgs.builder()\n            .modelUuid(development_destination.name())\n            .applications(            \n                IntegrationApplicationArgs.builder()\n                    .name(wordpress.name())\n                    .endpoint(\"db\")\n                    .build(),\n                IntegrationApplicationArgs.builder()\n                    .offerUrl(myoffer.url())\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  myoffer:\n    type: juju:Offer\n    properties:\n      modelUuid: ${development.uuid}\n      applicationName: ${[\"percona-cluster\"].name}\n      endpoints:\n        - server\n  # an offer can then be used in an cross model integration as below:\n  myintegration:\n    type: juju:Integration\n    properties:\n      modelUuid: ${[\"development-destination\"].name}\n      applications:\n        - name: ${wordpress.name}\n          endpoint: db\n        - offerUrl: ${myoffer.url}\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nOffers can be imported by using the URL as in the juju show-offers output.\n\nExample:\n\n$juju show-offer mysql\n\nStore            URL             Access  Description                                    Endpoint  Interface  Role\n\nmycontroller     admin/db.mysql  admin   MariaDB Server is one of the most ...          mysql     mysql      provider\n\n```sh\n$ pulumi import juju:index/offer:Offer db admin/db.mysql\n```\n\n","inputProperties":{"allowForceDestroy":{"description":"Allows the offer to be force-destroyed if it has active connections. Force destroy may not actually be used if not necessary.\n","type":"boolean"},"applicationName":{"type":"string"},"endpoints":{"items":{"type":"string"},"type":"array"},"modelUuid":{"type":"string"},"name":{"type":"string"},"timeouts":{"$ref":"#/types/juju:index%2FOfferTimeouts:OfferTimeouts"}},"properties":{"allowForceDestroy":{"description":"Allows the offer to be force-destroyed if it has active connections. Force destroy may not actually be used if not necessary.\n","type":"boolean"},"applicationName":{"type":"string"},"endpoints":{"items":{"type":"string"},"type":"array"},"modelUuid":{"type":"string"},"name":{"type":"string"},"timeouts":{"$ref":"#/types/juju:index%2FOfferTimeouts:OfferTimeouts"},"url":{"description":"The offer URL.\n","type":"string"}},"required":["allowForceDestroy","applicationName","endpoints","modelUuid","name","url"],"requiredInputs":["applicationName","endpoints","modelUuid"],"stateInputs":{"description":"Input properties used for looking up and filtering Offer resources.\n","properties":{"allowForceDestroy":{"description":"Allows the offer to be force-destroyed if it has active connections. Force destroy may not actually be used if not necessary.\n","type":"boolean"},"applicationName":{"type":"string"},"endpoints":{"items":{"type":"string"},"type":"array"},"modelUuid":{"type":"string"},"name":{"type":"string"},"timeouts":{"$ref":"#/types/juju:index%2FOfferTimeouts:OfferTimeouts"},"url":{"description":"The offer URL.\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/secret:Secret":{"description":"A resource that represents a Juju secret.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst my_secret = new juju.Secret(\"my-secret\", {\n    modelUuid: development.uuid,\n    name: \"my_secret_name\",\n    value: {\n        key1: \"value1\",\n        key2: \"value2\",\n    },\n    info: \"This is the secret\",\n});\nconst my_application = new juju.Application(\"my-application\", {config: {\n    secret: my_secret.secretId,\n}});\n// Write-only secret value. The value is supplied via value_wo, which is never\n// stored in Terraform state. Bumping value_wo_version triggers an update of the\n// secret value. This requires Terraform >= 1.11 and pairs well with ephemeral\n// resources/values.\nconst my_wo_secret = new juju.Secret(\"my-wo-secret\", {\n    modelUuid: development.uuid,\n    name: \"my_wo_secret_name\",\n    valueWo: {\n        key1: \"value1\",\n        key2: \"value2\",\n    },\n    valueWoVersion: 1,\n    info: \"This is a write-only secret\",\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nmy_secret = juju.Secret(\"my-secret\",\n    model_uuid=development[\"uuid\"],\n    name=\"my_secret_name\",\n    value={\n        \"key1\": \"value1\",\n        \"key2\": \"value2\",\n    },\n    info=\"This is the secret\")\nmy_application = juju.Application(\"my-application\", config={\n    \"secret\": my_secret.secret_id,\n})\n# Write-only secret value. The value is supplied via value_wo, which is never\n# stored in Terraform state. Bumping value_wo_version triggers an update of the\n# secret value. This requires Terraform >= 1.11 and pairs well with ephemeral\n# resources/values.\nmy_wo_secret = juju.Secret(\"my-wo-secret\",\n    model_uuid=development[\"uuid\"],\n    name=\"my_wo_secret_name\",\n    value_wo={\n        \"key1\": \"value1\",\n        \"key2\": \"value2\",\n    },\n    value_wo_version=1,\n    info=\"This is a write-only secret\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var my_secret = new Juju.Secret(\"my-secret\", new()\n    {\n        ModelUuid = development.Uuid,\n        Name = \"my_secret_name\",\n        Value = \n        {\n            { \"key1\", \"value1\" },\n            { \"key2\", \"value2\" },\n        },\n        Info = \"This is the secret\",\n    });\n\n    var my_application = new Juju.Application(\"my-application\", new()\n    {\n        Config = \n        {\n            { \"secret\", my_secret.SecretId },\n        },\n    });\n\n    // Write-only secret value. The value is supplied via value_wo, which is never\n    // stored in Terraform state. Bumping value_wo_version triggers an update of the\n    // secret value. This requires Terraform >= 1.11 and pairs well with ephemeral\n    // resources/values.\n    var my_wo_secret = new Juju.Secret(\"my-wo-secret\", new()\n    {\n        ModelUuid = development.Uuid,\n        Name = \"my_wo_secret_name\",\n        ValueWo = \n        {\n            { \"key1\", \"value1\" },\n            { \"key2\", \"value2\" },\n        },\n        ValueWoVersion = 1,\n        Info = \"This is a write-only secret\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmy_secret, err := juju.NewSecret(ctx, \"my-secret\", &juju.SecretArgs{\n\t\t\tModelUuid: pulumi.Any(development.Uuid),\n\t\t\tName:      pulumi.String(\"my_secret_name\"),\n\t\t\tValue: pulumi.StringMap{\n\t\t\t\t\"key1\": pulumi.String(\"value1\"),\n\t\t\t\t\"key2\": pulumi.String(\"value2\"),\n\t\t\t},\n\t\t\tInfo: pulumi.String(\"This is the secret\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = juju.NewApplication(ctx, \"my-application\", &juju.ApplicationArgs{\n\t\t\tConfig: pulumi.StringMap{\n\t\t\t\t\"secret\": my_secret.SecretId,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Write-only secret value. The value is supplied via value_wo, which is never\n\t\t// stored in Terraform state. Bumping value_wo_version triggers an update of the\n\t\t// secret value. This requires Terraform >= 1.11 and pairs well with ephemeral\n\t\t// resources/values.\n\t\t_, err = juju.NewSecret(ctx, \"my-wo-secret\", &juju.SecretArgs{\n\t\t\tModelUuid: pulumi.Any(development.Uuid),\n\t\t\tName:      pulumi.String(\"my_wo_secret_name\"),\n\t\t\tValueWo: pulumi.StringMap{\n\t\t\t\t\"key1\": pulumi.String(\"value1\"),\n\t\t\t\t\"key2\": pulumi.String(\"value2\"),\n\t\t\t},\n\t\t\tValueWoVersion: pulumi.Float64(1),\n\t\t\tInfo:           pulumi.String(\"This is a write-only secret\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.Secret;\nimport com.pulumi.juju.SecretArgs;\nimport com.pulumi.juju.Application;\nimport com.pulumi.juju.ApplicationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var my_secret = new Secret(\"my-secret\", SecretArgs.builder()\n            .modelUuid(development.uuid())\n            .name(\"my_secret_name\")\n            .value(Map.ofEntries(\n                Map.entry(\"key1\", \"value1\"),\n                Map.entry(\"key2\", \"value2\")\n            ))\n            .info(\"This is the secret\")\n            .build());\n\n        var my_application = new Application(\"my-application\", ApplicationArgs.builder()\n            .config(Map.of(\"secret\", my_secret.secretId()))\n            .build());\n\n        // Write-only secret value. The value is supplied via value_wo, which is never\n        // stored in Terraform state. Bumping value_wo_version triggers an update of the\n        // secret value. This requires Terraform >= 1.11 and pairs well with ephemeral\n        // resources/values.\n        var my_wo_secret = new Secret(\"my-wo-secret\", SecretArgs.builder()\n            .modelUuid(development.uuid())\n            .name(\"my_wo_secret_name\")\n            .valueWo(Map.ofEntries(\n                Map.entry(\"key1\", \"value1\"),\n                Map.entry(\"key2\", \"value2\")\n            ))\n            .valueWoVersion(1.0)\n            .info(\"This is a write-only secret\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  my-secret:\n    type: juju:Secret\n    properties:\n      modelUuid: ${development.uuid}\n      name: my_secret_name\n      value:\n        key1: value1\n        key2: value2\n      info: This is the secret\n  my-application:\n    type: juju:Application\n    properties:\n      config:\n        secret: ${[\"my-secret\"].secretId}\n  # Write-only secret value. The value is supplied via value_wo, which is never\n  # stored in Terraform state. Bumping value_wo_version triggers an update of the\n  # secret value. This requires Terraform >= 1.11 and pairs well with ephemeral\n  # resources/values.\n  my-wo-secret:\n    type: juju:Secret\n    properties:\n      modelUuid: ${development.uuid}\n      name: my_wo_secret_name\n      valueWo:\n        key1: value1\n        key2: value2\n      valueWoVersion: 1\n      info: This is a write-only secret\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nSecrets can be imported by using the model and secret names.\n\n```sh\n$ pulumi import juju:index/secret:Secret secret-name testmodel:secret-name\n```\n\n","inputProperties":{"info":{"description":"The description of the secret.","type":"string"},"modelUuid":{"type":"string"},"name":{"description":"The name of the secret.","type":"string"},"value":{"additionalProperties":{"type":"string"},"secret":true,"type":"object"},"valueWo":{"additionalProperties":{"type":"string"},"secret":true,"type":"object"},"valueWoVersion":{"description":"The version of value_wo. Increment this value to trigger an update of the write-only secret value.","type":"number"}},"properties":{"info":{"description":"The description of the secret.","type":"string"},"modelUuid":{"type":"string"},"name":{"description":"The name of the secret.","type":"string"},"secretId":{"description":"The ID of the secret. E.g. coj8mulh8b41e8nv6p90","type":"string"},"secretUri":{"description":"The URI of the secret. E.g. secret:coj8mulh8b41e8nv6p90","type":"string"},"value":{"additionalProperties":{"type":"string"},"secret":true,"type":"object"},"valueWo":{"additionalProperties":{"type":"string"},"secret":true,"type":"object"},"valueWoVersion":{"description":"The version of value_wo. Increment this value to trigger an update of the write-only secret value.","type":"number"}},"required":["modelUuid","name","secretId","secretUri"],"requiredInputs":["modelUuid"],"stateInputs":{"description":"Input properties used for looking up and filtering Secret resources.\n","properties":{"info":{"description":"The description of the secret.","type":"string"},"modelUuid":{"type":"string"},"name":{"description":"The name of the secret.","type":"string"},"secretId":{"description":"The ID of the secret. E.g. coj8mulh8b41e8nv6p90","type":"string"},"secretUri":{"description":"The URI of the secret. E.g. secret:coj8mulh8b41e8nv6p90","type":"string"},"value":{"additionalProperties":{"type":"string"},"secret":true,"type":"object"},"valueWo":{"additionalProperties":{"type":"string"},"secret":true,"type":"object"},"valueWoVersion":{"description":"The version of value_wo. Increment this value to trigger an update of the write-only secret value.","type":"number"}},"type":"object"},"type":"object"},"juju:index/secretBackend:SecretBackend":{"description":"A resource that represents a Juju secret backend.\n\nSecret backends store secret content. To learn more about secret backends, please visit: https://canonical.com/juju/docs/juju-cli/3.6/howto/manage-secret-backends/\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst myvault = new juju.SecretBackend(\"myvault\", {\n    name: \"myvault\",\n    backendType: \"vault\",\n    configWo: {\n        endpoint: \"https://vault.example.com:8200\",\n        token: \"s.exampletoken\",\n    },\n    configWoVersion: 1,\n    tokenRotateInterval: \"24h\",\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nmyvault = juju.SecretBackend(\"myvault\",\n    name=\"myvault\",\n    backend_type=\"vault\",\n    config_wo={\n        \"endpoint\": \"https://vault.example.com:8200\",\n        \"token\": \"s.exampletoken\",\n    },\n    config_wo_version=1,\n    token_rotate_interval=\"24h\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var myvault = new Juju.SecretBackend(\"myvault\", new()\n    {\n        Name = \"myvault\",\n        BackendType = \"vault\",\n        ConfigWo = \n        {\n            { \"endpoint\", \"https://vault.example.com:8200\" },\n            { \"token\", \"s.exampletoken\" },\n        },\n        ConfigWoVersion = 1,\n        TokenRotateInterval = \"24h\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewSecretBackend(ctx, \"myvault\", &juju.SecretBackendArgs{\n\t\t\tName:        pulumi.String(\"myvault\"),\n\t\t\tBackendType: pulumi.String(\"vault\"),\n\t\t\tConfigWo: pulumi.StringMap{\n\t\t\t\t\"endpoint\": pulumi.String(\"https://vault.example.com:8200\"),\n\t\t\t\t\"token\":    pulumi.String(\"s.exampletoken\"),\n\t\t\t},\n\t\t\tConfigWoVersion:     pulumi.Float64(1),\n\t\t\tTokenRotateInterval: pulumi.String(\"24h\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.SecretBackend;\nimport com.pulumi.juju.SecretBackendArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var myvault = new SecretBackend(\"myvault\", SecretBackendArgs.builder()\n            .name(\"myvault\")\n            .backendType(\"vault\")\n            .configWo(Map.ofEntries(\n                Map.entry(\"endpoint\", \"https://vault.example.com:8200\"),\n                Map.entry(\"token\", \"s.exampletoken\")\n            ))\n            .configWoVersion(1.0)\n            .tokenRotateInterval(\"24h\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  myvault:\n    type: juju:SecretBackend\n    properties:\n      name: myvault\n      backendType: vault\n      configWo:\n        endpoint: https://vault.example.com:8200\n        token: s.exampletoken\n      configWoVersion: 1\n      tokenRotateInterval: 24h\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nSecret backends can be imported using their name.\n\n```sh\n$ pulumi import juju:index/secretBackend:SecretBackend my_backend my-backend-name\n```\n\n","inputProperties":{"backendType":{"description":"The type of the secret backend (e.g., 'vault', 'kubernetes').","type":"string"},"configWo":{"additionalProperties":{"type":"string"},"secret":true,"type":"object"},"configWoVersion":{"description":"The version of config_wo. Increment this value to trigger an update of the write-only backend configuration.","type":"number"},"name":{"description":"The name of the secret backend.","type":"string"},"tokenRotateInterval":{"description":"The interval at which the backend's access credential/token should be rotated. Must be a duration string parsable by Go's time.ParseDuration (e.g., '10m', '1h', '24h').","type":"string"}},"properties":{"backendType":{"description":"The type of the secret backend (e.g., 'vault', 'kubernetes').","type":"string"},"configWo":{"additionalProperties":{"type":"string"},"secret":true,"type":"object"},"configWoVersion":{"description":"The version of config_wo. Increment this value to trigger an update of the write-only backend configuration.","type":"number"},"name":{"description":"The name of the secret backend.","type":"string"},"tokenRotateInterval":{"description":"The interval at which the backend's access credential/token should be rotated. Must be a duration string parsable by Go's time.ParseDuration (e.g., '10m', '1h', '24h').","type":"string"}},"required":["backendType","configWo","configWoVersion","name"],"requiredInputs":["backendType","configWo","configWoVersion"],"stateInputs":{"description":"Input properties used for looking up and filtering SecretBackend resources.\n","properties":{"backendType":{"description":"The type of the secret backend (e.g., 'vault', 'kubernetes').","type":"string"},"configWo":{"additionalProperties":{"type":"string"},"secret":true,"type":"object"},"configWoVersion":{"description":"The version of config_wo. Increment this value to trigger an update of the write-only backend configuration.","type":"number"},"name":{"description":"The name of the secret backend.","type":"string"},"tokenRotateInterval":{"description":"The interval at which the backend's access credential/token should be rotated. Must be a duration string parsable by Go's time.ParseDuration (e.g., '10m', '1h', '24h').","type":"string"}},"type":"object"},"type":"object"},"juju:index/space:Space":{"description":"A resource that represents a Juju space.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst development = new juju.Model(\"development\", {name: \"development\"});\nconst developmentSpace = new juju.Space(\"development\", {\n    modelUuid: development.uuid,\n    name: \"development\",\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\ndevelopment = juju.Model(\"development\", name=\"development\")\ndevelopment_space = juju.Space(\"development\",\n    model_uuid=development.uuid,\n    name=\"development\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var development = new Juju.Model(\"development\", new()\n    {\n        Name = \"development\",\n    });\n\n    var developmentSpace = new Juju.Space(\"development\", new()\n    {\n        ModelUuid = development.Uuid,\n        Name = \"development\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdevelopment, err := juju.NewModel(ctx, \"development\", &juju.ModelArgs{\n\t\t\tName: pulumi.String(\"development\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = juju.NewSpace(ctx, \"development\", &juju.SpaceArgs{\n\t\t\tModelUuid: development.Uuid,\n\t\t\tName:      pulumi.String(\"development\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.Model;\nimport com.pulumi.juju.ModelArgs;\nimport com.pulumi.juju.Space;\nimport com.pulumi.juju.SpaceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var development = new Model(\"development\", ModelArgs.builder()\n            .name(\"development\")\n            .build());\n\n        var developmentSpace = new Space(\"developmentSpace\", SpaceArgs.builder()\n            .modelUuid(development.uuid())\n            .name(\"development\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  development:\n    type: juju:Model\n    properties:\n      name: development\n  developmentSpace:\n    type: juju:Space\n    name: development\n    properties:\n      modelUuid: ${development.uuid}\n      name: development\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nSpaces can be imported using the format: model_uuid:space_name\n\n```sh\n$ pulumi import juju:index/space:Space development a3c2c72a-75f6-43b9-9b2d-d85d5449cb2f:development\n```\n\n","inputProperties":{"modelUuid":{"description":"The UUID of the model where the space belongs.\n","type":"string"},"name":{"description":"The name of the space. Changing this value forces replacement.\n","type":"string"}},"properties":{"modelUuid":{"description":"The UUID of the model where the space belongs.\n","type":"string"},"name":{"description":"The name of the space. Changing this value forces replacement.\n","type":"string"}},"required":["modelUuid","name"],"requiredInputs":["modelUuid"],"stateInputs":{"description":"Input properties used for looking up and filtering Space resources.\n","properties":{"modelUuid":{"description":"The UUID of the model where the space belongs.\n","type":"string"},"name":{"description":"The name of the space. Changing this value forces replacement.\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/sshKey:SshKey":{"description":"Resource representing an SSH key.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst mykey = new juju.SshKey(\"mykey\", {\n    modelUuid: development.uuid,\n    payload: \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC1I8QDP79MaHEIAlfh933zqcE8LyUt9doytF3YySBUDWippk8MAaKAJJtNb+Qsi+Kx/RsSY02VxMy9xRTp9d/Vr+U5BctKqhqf3ZkJdTIcy+z4hYpFS8A4bECJFHOnKIekIHD9glHkqzS5Vm6E4g/KMNkKylHKlDXOafhNZAiJ1ynxaZIuedrceFJNC47HnocQEtusPKpR09HGXXYhKMEubgF5tsTO4ks6pplMPvbdjxYcVOg4Wv0N/LJ4ffAucG9edMcKOTnKqZycqqZPE6KsTpSZMJi2Kl3mBrJE7JbR1YMlNwG6NlUIdIqVoTLZgLsTEkHqWi6OExykbVTqFuoWJJY3BmRAcP9H3FdLYbqcajfWshwvPM2AmYb8V3zBvzEKL1rpvG26fd3kGhk3Vu07qAUhHLMi3P0McEky4cLiEWgI7UyHFLI2yMRZgz23UUtxhRSkvCJagRlVG/s4yoylzBQJir8G3qmb36WjBXxpqAGHfLxw05EQI1JGV3ReYOs= user@somewhere\",\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nmykey = juju.SshKey(\"mykey\",\n    model_uuid=development[\"uuid\"],\n    payload=\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC1I8QDP79MaHEIAlfh933zqcE8LyUt9doytF3YySBUDWippk8MAaKAJJtNb+Qsi+Kx/RsSY02VxMy9xRTp9d/Vr+U5BctKqhqf3ZkJdTIcy+z4hYpFS8A4bECJFHOnKIekIHD9glHkqzS5Vm6E4g/KMNkKylHKlDXOafhNZAiJ1ynxaZIuedrceFJNC47HnocQEtusPKpR09HGXXYhKMEubgF5tsTO4ks6pplMPvbdjxYcVOg4Wv0N/LJ4ffAucG9edMcKOTnKqZycqqZPE6KsTpSZMJi2Kl3mBrJE7JbR1YMlNwG6NlUIdIqVoTLZgLsTEkHqWi6OExykbVTqFuoWJJY3BmRAcP9H3FdLYbqcajfWshwvPM2AmYb8V3zBvzEKL1rpvG26fd3kGhk3Vu07qAUhHLMi3P0McEky4cLiEWgI7UyHFLI2yMRZgz23UUtxhRSkvCJagRlVG/s4yoylzBQJir8G3qmb36WjBXxpqAGHfLxw05EQI1JGV3ReYOs= user@somewhere\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var mykey = new Juju.SshKey(\"mykey\", new()\n    {\n        ModelUuid = development.Uuid,\n        Payload = \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC1I8QDP79MaHEIAlfh933zqcE8LyUt9doytF3YySBUDWippk8MAaKAJJtNb+Qsi+Kx/RsSY02VxMy9xRTp9d/Vr+U5BctKqhqf3ZkJdTIcy+z4hYpFS8A4bECJFHOnKIekIHD9glHkqzS5Vm6E4g/KMNkKylHKlDXOafhNZAiJ1ynxaZIuedrceFJNC47HnocQEtusPKpR09HGXXYhKMEubgF5tsTO4ks6pplMPvbdjxYcVOg4Wv0N/LJ4ffAucG9edMcKOTnKqZycqqZPE6KsTpSZMJi2Kl3mBrJE7JbR1YMlNwG6NlUIdIqVoTLZgLsTEkHqWi6OExykbVTqFuoWJJY3BmRAcP9H3FdLYbqcajfWshwvPM2AmYb8V3zBvzEKL1rpvG26fd3kGhk3Vu07qAUhHLMi3P0McEky4cLiEWgI7UyHFLI2yMRZgz23UUtxhRSkvCJagRlVG/s4yoylzBQJir8G3qmb36WjBXxpqAGHfLxw05EQI1JGV3ReYOs= user@somewhere\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewSshKey(ctx, \"mykey\", &juju.SshKeyArgs{\n\t\t\tModelUuid: pulumi.Any(development.Uuid),\n\t\t\tPayload:   pulumi.String(\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC1I8QDP79MaHEIAlfh933zqcE8LyUt9doytF3YySBUDWippk8MAaKAJJtNb+Qsi+Kx/RsSY02VxMy9xRTp9d/Vr+U5BctKqhqf3ZkJdTIcy+z4hYpFS8A4bECJFHOnKIekIHD9glHkqzS5Vm6E4g/KMNkKylHKlDXOafhNZAiJ1ynxaZIuedrceFJNC47HnocQEtusPKpR09HGXXYhKMEubgF5tsTO4ks6pplMPvbdjxYcVOg4Wv0N/LJ4ffAucG9edMcKOTnKqZycqqZPE6KsTpSZMJi2Kl3mBrJE7JbR1YMlNwG6NlUIdIqVoTLZgLsTEkHqWi6OExykbVTqFuoWJJY3BmRAcP9H3FdLYbqcajfWshwvPM2AmYb8V3zBvzEKL1rpvG26fd3kGhk3Vu07qAUhHLMi3P0McEky4cLiEWgI7UyHFLI2yMRZgz23UUtxhRSkvCJagRlVG/s4yoylzBQJir8G3qmb36WjBXxpqAGHfLxw05EQI1JGV3ReYOs= user@somewhere\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.SshKey;\nimport com.pulumi.juju.SshKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var mykey = new SshKey(\"mykey\", SshKeyArgs.builder()\n            .modelUuid(development.uuid())\n            .payload(\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC1I8QDP79MaHEIAlfh933zqcE8LyUt9doytF3YySBUDWippk8MAaKAJJtNb+Qsi+Kx/RsSY02VxMy9xRTp9d/Vr+U5BctKqhqf3ZkJdTIcy+z4hYpFS8A4bECJFHOnKIekIHD9glHkqzS5Vm6E4g/KMNkKylHKlDXOafhNZAiJ1ynxaZIuedrceFJNC47HnocQEtusPKpR09HGXXYhKMEubgF5tsTO4ks6pplMPvbdjxYcVOg4Wv0N/LJ4ffAucG9edMcKOTnKqZycqqZPE6KsTpSZMJi2Kl3mBrJE7JbR1YMlNwG6NlUIdIqVoTLZgLsTEkHqWi6OExykbVTqFuoWJJY3BmRAcP9H3FdLYbqcajfWshwvPM2AmYb8V3zBvzEKL1rpvG26fd3kGhk3Vu07qAUhHLMi3P0McEky4cLiEWgI7UyHFLI2yMRZgz23UUtxhRSkvCJagRlVG/s4yoylzBQJir8G3qmb36WjBXxpqAGHfLxw05EQI1JGV3ReYOs= user@somewhere\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  mykey:\n    type: juju:SshKey\n    properties:\n      modelUuid: ${development.uuid}\n      payload: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC1I8QDP79MaHEIAlfh933zqcE8LyUt9doytF3YySBUDWippk8MAaKAJJtNb+Qsi+Kx/RsSY02VxMy9xRTp9d/Vr+U5BctKqhqf3ZkJdTIcy+z4hYpFS8A4bECJFHOnKIekIHD9glHkqzS5Vm6E4g/KMNkKylHKlDXOafhNZAiJ1ynxaZIuedrceFJNC47HnocQEtusPKpR09HGXXYhKMEubgF5tsTO4ks6pplMPvbdjxYcVOg4Wv0N/LJ4ffAucG9edMcKOTnKqZycqqZPE6KsTpSZMJi2Kl3mBrJE7JbR1YMlNwG6NlUIdIqVoTLZgLsTEkHqWi6OExykbVTqFuoWJJY3BmRAcP9H3FdLYbqcajfWshwvPM2AmYb8V3zBvzEKL1rpvG26fd3kGhk3Vu07qAUhHLMi3P0McEky4cLiEWgI7UyHFLI2yMRZgz23UUtxhRSkvCJagRlVG/s4yoylzBQJir8G3qmb36WjBXxpqAGHfLxw05EQI1JGV3ReYOs= user@somewhere\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nKeys can be imported with the UUID of the model and the username of the key\n\n```sh\n$ pulumi import juju:index/sshKey:SshKey dev-user ssh_key:1d10a751-02c1-43d5-b46b-d84fe04d6fde:dev-user\n```\n\n","inputProperties":{"modelUuid":{"description":"The UUID of the model to operate in.\n","type":"string"},"payload":{"description":"SSH key payload.\n","type":"string"}},"properties":{"modelUuid":{"description":"The UUID of the model to operate in.\n","type":"string"},"payload":{"description":"SSH key payload.\n","type":"string"}},"required":["modelUuid","payload"],"requiredInputs":["modelUuid","payload"],"stateInputs":{"description":"Input properties used for looking up and filtering SshKey resources.\n","properties":{"modelUuid":{"description":"The UUID of the model to operate in.\n","type":"string"},"payload":{"description":"SSH key payload.\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/storagePool:StoragePool":{"description":"A resource that represents a Juju storage pool.\n\t\t\nTo learn more about storage pools, please visit: https://documentation.ubuntu.com/juju/3.6/reference/storage/#storage-pool\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst mypool = new juju.StoragePool(\"mypool\", {\n    name: \"mypool\",\n    modelUuid: development.uuid,\n    storageProvider: \"tmpfs\",\n    attributes: {\n        a: \"b\",\n        c: \"d\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\nmypool = juju.StoragePool(\"mypool\",\n    name=\"mypool\",\n    model_uuid=development[\"uuid\"],\n    storage_provider=\"tmpfs\",\n    attributes={\n        \"a\": \"b\",\n        \"c\": \"d\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var mypool = new Juju.StoragePool(\"mypool\", new()\n    {\n        Name = \"mypool\",\n        ModelUuid = development.Uuid,\n        StorageProvider = \"tmpfs\",\n        Attributes = \n        {\n            { \"a\", \"b\" },\n            { \"c\", \"d\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := juju.NewStoragePool(ctx, \"mypool\", &juju.StoragePoolArgs{\n\t\t\tName:            pulumi.String(\"mypool\"),\n\t\t\tModelUuid:       pulumi.Any(development.Uuid),\n\t\t\tStorageProvider: pulumi.String(\"tmpfs\"),\n\t\t\tAttributes: pulumi.StringMap{\n\t\t\t\t\"a\": pulumi.String(\"b\"),\n\t\t\t\t\"c\": pulumi.String(\"d\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.StoragePool;\nimport com.pulumi.juju.StoragePoolArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var mypool = new StoragePool(\"mypool\", StoragePoolArgs.builder()\n            .name(\"mypool\")\n            .modelUuid(development.uuid())\n            .storageProvider(\"tmpfs\")\n            .attributes(Map.ofEntries(\n                Map.entry(\"a\", \"b\"),\n                Map.entry(\"c\", \"d\")\n            ))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  mypool:\n    type: juju:StoragePool\n    properties:\n      name: mypool\n      modelUuid: ${development.uuid}\n      storageProvider: tmpfs\n      attributes:\n        a: b\n        c: d\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nStorage pools can be imported with the UUID of the model and the name of the pool.\n\n```sh\n$ pulumi import juju:index/storagePool:StoragePool my_pool 1d10a751-02c1-43d5-b46b-d84fe04d6fde:my_pool\n```\n\n","inputProperties":{"attributes":{"additionalProperties":{"type":"string"},"description":"Attributes for the storage pool.\n","type":"object"},"modelUuid":{"description":"The UUID of the model where the storage pool will be created.\n","type":"string"},"name":{"description":"The name of the storage pool.\n","type":"string"},"storageProvider":{"description":"The storage provider type (e.g., 'rootfs', 'tmpfs', 'loop', or a cloud specific provider).\n","type":"string"}},"properties":{"attributes":{"additionalProperties":{"type":"string"},"description":"Attributes for the storage pool.\n","type":"object"},"modelUuid":{"description":"The UUID of the model where the storage pool will be created.\n","type":"string"},"name":{"description":"The name of the storage pool.\n","type":"string"},"storageProvider":{"description":"The storage provider type (e.g., 'rootfs', 'tmpfs', 'loop', or a cloud specific provider).\n","type":"string"}},"required":["modelUuid","name","storageProvider"],"requiredInputs":["modelUuid","storageProvider"],"stateInputs":{"description":"Input properties used for looking up and filtering StoragePool resources.\n","properties":{"attributes":{"additionalProperties":{"type":"string"},"description":"Attributes for the storage pool.\n","type":"object"},"modelUuid":{"description":"The UUID of the model where the storage pool will be created.\n","type":"string"},"name":{"description":"The name of the storage pool.\n","type":"string"},"storageProvider":{"description":"The storage provider type (e.g., 'rootfs', 'tmpfs', 'loop', or a cloud specific provider).\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/subnet:Subnet":{"description":"A resource that represents assignment of a subnet to a Juju space.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as juju from \"@pulumi/juju\";\n\nconst development = new juju.Model(\"development\", {name: \"development\"});\nconst developmentSpace = new juju.Space(\"development\", {\n    modelUuid: development.uuid,\n    name: \"development\",\n});\nconst developmentSubnet = new juju.Subnet(\"development\", {\n    modelUuid: development.uuid,\n    cidr: \"10.0.0.0/24\",\n    spaceName: developmentSpace.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_juju as juju\n\ndevelopment = juju.Model(\"development\", name=\"development\")\ndevelopment_space = juju.Space(\"development\",\n    model_uuid=development.uuid,\n    name=\"development\")\ndevelopment_subnet = juju.Subnet(\"development\",\n    model_uuid=development.uuid,\n    cidr=\"10.0.0.0/24\",\n    space_name=development_space.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Juju = Pulumi.Juju;\n\nreturn await Deployment.RunAsync(() => \n{\n    var development = new Juju.Model(\"development\", new()\n    {\n        Name = \"development\",\n    });\n\n    var developmentSpace = new Juju.Space(\"development\", new()\n    {\n        ModelUuid = development.Uuid,\n        Name = \"development\",\n    });\n\n    var developmentSubnet = new Juju.Subnet(\"development\", new()\n    {\n        ModelUuid = development.Uuid,\n        Cidr = \"10.0.0.0/24\",\n        SpaceName = developmentSpace.Name,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/juju/v2/juju\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdevelopment, err := juju.NewModel(ctx, \"development\", &juju.ModelArgs{\n\t\t\tName: pulumi.String(\"development\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdevelopmentSpace, err := juju.NewSpace(ctx, \"development\", &juju.SpaceArgs{\n\t\t\tModelUuid: development.Uuid,\n\t\t\tName:      pulumi.String(\"development\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = juju.NewSubnet(ctx, \"development\", &juju.SubnetArgs{\n\t\t\tModelUuid: development.Uuid,\n\t\t\tCidr:      pulumi.String(\"10.0.0.0/24\"),\n\t\t\tSpaceName: developmentSpace.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.juju.Model;\nimport com.pulumi.juju.ModelArgs;\nimport com.pulumi.juju.Space;\nimport com.pulumi.juju.SpaceArgs;\nimport com.pulumi.juju.Subnet;\nimport com.pulumi.juju.SubnetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var development = new Model(\"development\", ModelArgs.builder()\n            .name(\"development\")\n            .build());\n\n        var developmentSpace = new Space(\"developmentSpace\", SpaceArgs.builder()\n            .modelUuid(development.uuid())\n            .name(\"development\")\n            .build());\n\n        var developmentSubnet = new Subnet(\"developmentSubnet\", SubnetArgs.builder()\n            .modelUuid(development.uuid())\n            .cidr(\"10.0.0.0/24\")\n            .spaceName(developmentSpace.name())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  development:\n    type: juju:Model\n    properties:\n      name: development\n  developmentSpace:\n    type: juju:Space\n    name: development\n    properties:\n      modelUuid: ${development.uuid}\n      name: development\n  developmentSubnet:\n    type: juju:Subnet\n    name: development\n    properties:\n      modelUuid: ${development.uuid}\n      cidr: 10.0.0.0/24\n      spaceName: ${developmentSpace.name}\n```\n<!--End PulumiCodeChooser -->\n\n## Import\n\nThe `pulumi import` command can be used, for example:\n\nSubnets can be imported using the format: model_uuid:cidr\n\n```sh\n$ pulumi import juju:index/subnet:Subnet development a3c2c72a-75f6-43b9-9b2d-d85d5449cb2f:10.0.0.0/24\n```\n\n","inputProperties":{"cidr":{"description":"The subnet CIDR. Changing this value forces replacement.\n","type":"string"},"modelUuid":{"description":"The UUID of the model where the subnet exists.\n","type":"string"},"spaceName":{"description":"The target space for this subnet.\n","type":"string"}},"properties":{"cidr":{"description":"The subnet CIDR. Changing this value forces replacement.\n","type":"string"},"modelUuid":{"description":"The UUID of the model where the subnet exists.\n","type":"string"},"spaceName":{"description":"The target space for this subnet.\n","type":"string"}},"required":["cidr","modelUuid","spaceName"],"requiredInputs":["cidr","modelUuid","spaceName"],"stateInputs":{"description":"Input properties used for looking up and filtering Subnet resources.\n","properties":{"cidr":{"description":"The subnet CIDR. Changing this value forces replacement.\n","type":"string"},"modelUuid":{"description":"The UUID of the model where the subnet exists.\n","type":"string"},"spaceName":{"description":"The target space for this subnet.\n","type":"string"}},"type":"object"},"type":"object"},"juju:index/user:User":{"description":"A resource that represents a Juju User.\n","inputProperties":{"displayName":{"description":"The display name to be assigned to the user (optional).\n","type":"string"},"name":{"type":"string"},"password":{"description":"The password to be assigned to the user.\n","secret":true,"type":"string"}},"properties":{"displayName":{"description":"The display name to be assigned to the user (optional).\n","type":"string"},"name":{"type":"string"},"password":{"description":"The password to be assigned to the user.\n","secret":true,"type":"string"}},"required":["name","password"],"requiredInputs":["password"],"stateInputs":{"description":"Input properties used for looking up and filtering User resources.\n","properties":{"displayName":{"description":"The display name to be assigned to the user (optional).\n","type":"string"},"name":{"type":"string"},"password":{"description":"The password to be assigned to the user.\n","secret":true,"type":"string"}},"type":"object"},"type":"object"}},"types":{"juju:config/defaultTimeouts:defaultTimeouts":{"properties":{"create":{"description":"Default maximum time to wait for resources to become ready after creation. Defaults to 30 minutes.\n","type":"string"},"delete":{"description":"Default maximum time to wait for resources to be deleted. Defaults to 15 minutes.\n","type":"string"},"read":{"description":"Default maximum time to wait for data source reads. Defaults to 30 minutes.\n","type":"string"},"update":{"description":"Default maximum time to wait for resources to become ready after an update. Defaults to 30 minutes.\n","type":"string"}},"type":"object"},"juju:config/offeringControllers:offeringControllers":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"caCertificate":{"description":"CA certificate for the controller if using a self-signed certificate.\n","type":"string"},"clientId":{"description":"The client ID (OAuth2.0, created by the external identity provider) to be used.\n","type":"string"},"clientSecret":{"description":"The client secret (OAuth2.0, created by the external identity provider) to be used.\n","secret":true,"type":"string"},"controllerAddresses":{"description":"Controller addresses to connect to. Multiple addresses can be provided in this format: <host>:<port>,<host>:<port>,....\n","type":"string"},"password":{"description":"Password for the controller username.\n","secret":true,"type":"string"},"username":{"description":"Username registered with the controller.\n","type":"string"}},"required":["controllerAddresses"],"type":"object"},"juju:index/ApplicationCharm:ApplicationCharm":{"language":{"nodejs":{"requiredOutputs":["base","channel","name","revision"]}},"properties":{"base":{"type":"string"},"channel":{"description":"The channel to use when deploying a charm. Specified as \\<track>/\\<risk>/\\<branch>.\n","type":"string"},"name":{"type":"string"},"revision":{"description":"The revision of the charm to deploy. During the update phase, the charm revision should be update before config update, to avoid issues with config parameters parsing.\n","type":"number"}},"required":["name"],"type":"object"},"juju:index/ApplicationEndpointBinding:ApplicationEndpointBinding":{"properties":{"endpoint":{"description":"Name of the endpoint to bind to a space. Keep null (or undefined) to define default binding.\n","type":"string"},"space":{"description":"Name of the space to bind the endpoint to.\n","type":"string"}},"required":["space"],"type":"object"},"juju:index/ApplicationExpose:ApplicationExpose":{"properties":{"cidrs":{"description":"A comma-delimited list of CIDRs that should be able to access the application ports once exposed.\n","type":"string"},"endpoints":{"description":"Expose only the ports that charms have opened for this comma-delimited list of endpoints\n","type":"string"},"spaces":{"description":"A comma-delimited list of spaces that should be able to access the application ports once exposed.\n","type":"string"}},"type":"object"},"juju:index/ApplicationRegistryCredentials:ApplicationRegistryCredentials":{"properties":{"password":{"description":"The password for authenticating to the registry.\n","secret":true,"type":"string"},"username":{"description":"The username for authenticating to the registry.\n","type":"string"}},"required":["password","username"],"type":"object"},"juju:index/ApplicationStorage:ApplicationStorage":{"language":{"nodejs":{"requiredOutputs":["count","label","pool","size"]}},"properties":{"count":{"description":"The number of volumes.\n","type":"number"},"label":{"description":"The specific storage option defined in the charm.\n","type":"string"},"pool":{"description":"Name of the storage pool.\n","type":"string"},"size":{"description":"The size of each volume.\n","type":"string"}},"type":"object"},"juju:index/ApplicationTimeouts:ApplicationTimeouts":{"properties":{"create":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"}},"type":"object"},"juju:index/CloudRegion:CloudRegion":{"properties":{"endpoint":{"description":"Region-specific endpoint.\n","type":"string"},"identityEndpoint":{"description":"Region-specific identity endpoint.\n","type":"string"},"name":{"description":"Name of the region.\n","type":"string"},"storageEndpoint":{"description":"Region-specific storage endpoint.\n","type":"string"}},"required":["name"],"type":"object"},"juju:index/ControllerCloud:ControllerCloud":{"properties":{"authTypes":{"description":"The authentication type(s) supported by the cloud.\n","items":{"type":"string"},"type":"array"},"caCertificates":{"description":"CA certificates for the cloud.\n","items":{"type":"string"},"type":"array"},"config":{"additionalProperties":{"type":"string"},"description":"Configuration options for the cloud.\n","type":"object"},"endpoint":{"description":"The API endpoint for the cloud.\n","type":"string"},"hostCloudRegion":{"description":"The host cloud region for the cloud.\n","type":"string"},"name":{"description":"The name of the cloud\n","type":"string"},"region":{"$ref":"#/types/juju:index%2FControllerCloudRegion:ControllerCloudRegion","description":"The cloud region where the controller will operate.\n"},"type":{"description":"The type of the cloud .\n","type":"string"}},"required":["authTypes","name","type"],"type":"object"},"juju:index/ControllerCloudCredential:ControllerCloudCredential":{"properties":{"attributes":{"additionalProperties":{"type":"string"},"description":"Authentication attributes (key-value pairs specific to the auth type).\n","type":"object"},"authType":{"description":"The authentication type (e.g., 'userpass', 'oauth2', 'access-key').\n","type":"string"},"name":{"description":"The name of the credential.\n","type":"string"}},"required":["attributes","authType","name"],"type":"object"},"juju:index/ControllerCloudRegion:ControllerCloudRegion":{"properties":{"endpoint":{"description":"The API endpoint for the region.\n","type":"string"},"identityEndpoint":{"description":"The identity endpoint for the region.\n","type":"string"},"name":{"description":"The name of the region.\n","type":"string"},"storageEndpoint":{"description":"The storage endpoint for the region.\n","type":"string"}},"required":["name"],"type":"object"},"juju:index/ControllerDestroyFlags:ControllerDestroyFlags":{"properties":{"destroyAllModels":{"description":"Destroy all models in the controller.\n","type":"boolean"},"destroyStorage":{"description":"Destroy all storage instances managed by the controller.\n","type":"boolean"},"force":{"description":"Force destroy models ignoring any errors.\n","type":"boolean"},"modelTimeout":{"description":"Timeout for each step of force model destruction.\n","type":"number"},"releaseStorage":{"description":"Release all storage instances from management of the controller, without destroying them.\n","type":"boolean"}},"type":"object"},"juju:index/ControllerStoragePool:ControllerStoragePool":{"properties":{"attributes":{"additionalProperties":{"type":"string"},"description":"Additional storage pool attributes.\n","type":"object"},"name":{"description":"The name of the storage pool.\n","type":"string"},"type":{"description":"The storage pool type\n","type":"string"}},"required":["name","type"],"type":"object"},"juju:index/CredentialCloud:CredentialCloud":{"properties":{"name":{"description":"The name of the cloud\n","type":"string"}},"required":["name"],"type":"object"},"juju:index/IntegrationApplication:IntegrationApplication":{"language":{"nodejs":{"requiredOutputs":["endpoint","name"]}},"properties":{"endpoint":{"description":"The endpoint name. This attribute may not be used at the same time as the offer_url.\n","type":"string"},"name":{"description":"The name of the application. This attribute may not be used at the same time as the offer_url.\n","type":"string"},"offerUrl":{"description":"The URL of a remote application. This attribute may not be used at the same time as name and endpoint.\n","type":"string"},"offeringController":{"description":"The name of the offering controller where the remote application is hosted. This is required when using<span pulumi-lang-nodejs=\" offerUrl \" pulumi-lang-dotnet=\" OfferUrl \" pulumi-lang-go=\" offerUrl \" pulumi-lang-python=\" offer_url \" pulumi-lang-yaml=\" offerUrl \" pulumi-lang-java=\" offerUrl \"> offer_url </span>to consume an offer from a different controller.\n","type":"string"}},"type":"object"},"juju:index/MachineTimeouts:MachineTimeouts":{"properties":{"create":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"}},"type":"object"},"juju:index/ModelCloud:ModelCloud":{"language":{"nodejs":{"requiredOutputs":["name","region"]}},"properties":{"name":{"description":"The name of the cloud\n","type":"string"},"region":{"description":"The region of the cloud\n","type":"string"}},"required":["name"],"type":"object"},"juju:index/OfferTimeouts:OfferTimeouts":{"properties":{"create":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"},"delete":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n","type":"string"}},"type":"object"},"juju:index/ProviderDefaultTimeouts:ProviderDefaultTimeouts":{"properties":{"create":{"description":"Default maximum time to wait for resources to become ready after creation. Defaults to 30 minutes.\n","type":"string"},"delete":{"description":"Default maximum time to wait for resources to be deleted. Defaults to 15 minutes.\n","type":"string"},"read":{"description":"Default maximum time to wait for data source reads. Defaults to 30 minutes.\n","type":"string"},"update":{"description":"Default maximum time to wait for resources to become ready after an update. Defaults to 30 minutes.\n","type":"string"}},"type":"object"},"juju:index/ProviderOfferingControllers:ProviderOfferingControllers":{"language":{"nodejs":{"requiredOutputs":[]}},"properties":{"caCertificate":{"description":"CA certificate for the controller if using a self-signed certificate.\n","type":"string"},"clientId":{"description":"The client ID (OAuth2.0, created by the external identity provider) to be used.\n","type":"string"},"clientSecret":{"description":"The client secret (OAuth2.0, created by the external identity provider) to be used.\n","secret":true,"type":"string"},"controllerAddresses":{"description":"Controller addresses to connect to. Multiple addresses can be provided in this format: <host>:<port>,<host>:<port>,....\n","type":"string"},"password":{"description":"Password for the controller username.\n","secret":true,"type":"string"},"username":{"description":"Username registered with the controller.\n","type":"string"}},"required":["controllerAddresses"],"type":"object"},"juju:index/getSubnetsSubnets:getSubnetsSubnets":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"cidr":{"type":"string"},"life":{"type":"string"},"providerId":{"type":"string"},"providerNetworkId":{"type":"string"},"providerSpaceId":{"type":"string"},"spaceName":{"type":"string"},"vlanTag":{"type":"number"},"zones":{"items":{"type":"string"},"type":"array"}},"required":["cidr","life","providerId","providerNetworkId","providerSpaceId","spaceName","vlanTag","zones"],"type":"object"}},"version":"2.3.1"}
