{
  "name": "etcd",
  "version": "0.11.0",
  "description": "A Pulumi provider dynamically bridged from etcd.",
  "attribution": "This Pulumi package is based on the [`etcd` Terraform Provider](https://github.com/ferlab-ste-justine/terraform-provider-etcd).",
  "repository": "https://github.com/ferlab-ste-justine/terraform-provider-etcd",
  "publisher": "ferlab-ste-justine",
  "meta": {
    "moduleFormat": "(.*)(?:/[^/]*)"
  },
  "language": {
    "csharp": {
      "compatibility": "tfbridge20",
      "liftSingleValueMethodReturns": true,
      "respectSchemaVersion": true
    },
    "go": {
      "generateExtraInputTypes": true,
      "importBasePath": "github.com/pulumi/pulumi-terraform-provider/sdks/go/etcd/etcd",
      "liftSingleValueMethodReturns": true,
      "respectSchemaVersion": true,
      "rootPackageName": "etcd"
    },
    "java": {
      "basePackage": "",
      "buildFiles": "",
      "gradleNexusPublishPluginVersion": "",
      "gradleTest": ""
    },
    "nodejs": {
      "compatibility": "tfbridge20",
      "disableUnionOutputTypes": true,
      "liftSingleValueMethodReturns": true,
      "packageDescription": "A Pulumi provider dynamically bridged from etcd.",
      "readme": "> This provider is a derived work of the [Terraform Provider](https://github.com/ferlab-ste-justine/terraform-provider-etcd)\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-etcd` repo](https://github.com/ferlab-ste-justine/terraform-provider-etcd/issues).",
      "respectSchemaVersion": true
    },
    "python": {
      "compatibility": "tfbridge20",
      "pyproject": {
        "enabled": true
      },
      "readme": "> This provider is a derived work of the [Terraform Provider](https://github.com/ferlab-ste-justine/terraform-provider-etcd)\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-etcd` repo](https://github.com/ferlab-ste-justine/terraform-provider-etcd/issues).",
      "respectSchemaVersion": true
    }
  },
  "config": {
    "variables": {
      "caCert": {
        "type": "string",
        "description": "File that contains the CA certificate that signed the etcd servers' certificates. Can alternatively be set with the\nETCDCTL_CACERT environment variable. Can also be omitted.\n"
      },
      "cert": {
        "type": "string",
        "description": "File that contains the client certificate used to authentify the user. Can alternatively be set with the ETCDCTL_CERT\nenvironment variable. Can be omitted if password authentication is used.\n"
      },
      "connectionTimeout": {
        "type": "string",
        "description": "Timeout to establish the etcd servers connection as a duration. Defaults to 10s.\n"
      },
      "endpoints": {
        "type": "string",
        "description": "Endpoints of the etcd servers. The entry of each server should follow the ip:port format and be coma separated. Can\nalternatively be set with the ETCDCTL_ENDPOINTS environment variable.\n"
      },
      "key": {
        "type": "string",
        "description": "File that contains the client encryption key used to authentify the user. Can alternatively be set with the ETCDCTL_KEY\nenvironment variable. Can be omitted if password authentication is used.\n"
      },
      "password": {
        "type": "string",
        "description": "Password of the etcd user that will be used to access etcd. Can alternatively be set with the ETCDCTL_PASSWORD\nenvironment variable. Can also be omitted if tls certificate authentication will be used instead.\n",
        "secret": true
      },
      "requestTimeout": {
        "type": "string",
        "description": "Timeout for individual requests the provider makes on the etcd servers as a duration. Defaults to 10s.\n"
      },
      "retries": {
        "type": "number",
        "description": "Number of times operations that result in retriable errors should be re-attempted. Defaults to 10.\n"
      },
      "retryInterval": {
        "type": "string",
        "description": "Duration to wait after a failing etcd request before retrying. Defaults to 100ms.\n"
      },
      "skipTls": {
        "type": "boolean",
        "description": "If set to true, connection to the etcd cluster will be attempted in plaintext without encryption. Default to false\n"
      },
      "username": {
        "type": "string",
        "description": "Name of the etcd user that will be used to access etcd. Can alternatively be set with the ETCDCTL_USERNAME environment\nvariable. Can also be omitted if tls certificate authentication will be used instead as the username will be infered\nfrom the certificate.\n"
      }
    }
  },
  "types": {
    "etcd:index/KeyPrefixKey:KeyPrefixKey": {
      "properties": {
        "key": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "type": "object",
      "required": [
        "key",
        "value"
      ]
    },
    "etcd:index/RolePermission:RolePermission": {
      "properties": {
        "key": {
          "type": "string",
          "description": "Key specifying the beginning of the key range.\n"
        },
        "permission": {
          "type": "string",
          "description": "Permissions to grant to the role on the given key range. Can be: read, write or readwrite\n"
        },
        "rangeEnd": {
          "type": "string",
          "description": "Key specifying the end of the key range (exclusive). To you set it to the value of the key to grant permission on a single key. If you would like the range to be anything prefixed by the key, you can use the etcd*prefix*range_end data helper.\n"
        }
      },
      "type": "object",
      "required": [
        "key",
        "rangeEnd"
      ]
    },
    "etcd:index/getKeyRangeResult:getKeyRangeResult": {
      "properties": {
        "createRevision": {
          "type": "number"
        },
        "key": {
          "type": "string"
        },
        "lease": {
          "type": "number"
        },
        "modRevision": {
          "type": "number"
        },
        "value": {
          "type": "string"
        },
        "version": {
          "type": "number"
        }
      },
      "type": "object",
      "required": [
        "createRevision",
        "key",
        "lease",
        "modRevision",
        "value",
        "version"
      ],
      "language": {
        "nodejs": {
          "requiredInputs": []
        }
      }
    }
  },
  "provider": {
    "description": "The provider type for the etcd 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",
    "properties": {
      "caCert": {
        "type": "string",
        "description": "File that contains the CA certificate that signed the etcd servers' certificates. Can alternatively be set with the\nETCDCTL_CACERT environment variable. Can also be omitted.\n"
      },
      "cert": {
        "type": "string",
        "description": "File that contains the client certificate used to authentify the user. Can alternatively be set with the ETCDCTL_CERT\nenvironment variable. Can be omitted if password authentication is used.\n"
      },
      "connectionTimeout": {
        "type": "string",
        "description": "Timeout to establish the etcd servers connection as a duration. Defaults to 10s.\n"
      },
      "endpoints": {
        "type": "string",
        "description": "Endpoints of the etcd servers. The entry of each server should follow the ip:port format and be coma separated. Can\nalternatively be set with the ETCDCTL_ENDPOINTS environment variable.\n"
      },
      "key": {
        "type": "string",
        "description": "File that contains the client encryption key used to authentify the user. Can alternatively be set with the ETCDCTL_KEY\nenvironment variable. Can be omitted if password authentication is used.\n"
      },
      "password": {
        "type": "string",
        "description": "Password of the etcd user that will be used to access etcd. Can alternatively be set with the ETCDCTL_PASSWORD\nenvironment variable. Can also be omitted if tls certificate authentication will be used instead.\n",
        "secret": true
      },
      "requestTimeout": {
        "type": "string",
        "description": "Timeout for individual requests the provider makes on the etcd servers as a duration. Defaults to 10s.\n"
      },
      "retryInterval": {
        "type": "string",
        "description": "Duration to wait after a failing etcd request before retrying. Defaults to 100ms.\n"
      },
      "username": {
        "type": "string",
        "description": "Name of the etcd user that will be used to access etcd. Can alternatively be set with the ETCDCTL_USERNAME environment\nvariable. Can also be omitted if tls certificate authentication will be used instead as the username will be infered\nfrom the certificate.\n"
      }
    },
    "type": "object",
    "inputProperties": {
      "caCert": {
        "type": "string",
        "description": "File that contains the CA certificate that signed the etcd servers' certificates. Can alternatively be set with the\nETCDCTL_CACERT environment variable. Can also be omitted.\n"
      },
      "cert": {
        "type": "string",
        "description": "File that contains the client certificate used to authentify the user. Can alternatively be set with the ETCDCTL_CERT\nenvironment variable. Can be omitted if password authentication is used.\n"
      },
      "connectionTimeout": {
        "type": "string",
        "description": "Timeout to establish the etcd servers connection as a duration. Defaults to 10s.\n"
      },
      "endpoints": {
        "type": "string",
        "description": "Endpoints of the etcd servers. The entry of each server should follow the ip:port format and be coma separated. Can\nalternatively be set with the ETCDCTL_ENDPOINTS environment variable.\n"
      },
      "key": {
        "type": "string",
        "description": "File that contains the client encryption key used to authentify the user. Can alternatively be set with the ETCDCTL_KEY\nenvironment variable. Can be omitted if password authentication is used.\n"
      },
      "password": {
        "type": "string",
        "description": "Password of the etcd user that will be used to access etcd. Can alternatively be set with the ETCDCTL_PASSWORD\nenvironment variable. Can also be omitted if tls certificate authentication will be used instead.\n",
        "secret": true
      },
      "requestTimeout": {
        "type": "string",
        "description": "Timeout for individual requests the provider makes on the etcd servers as a duration. Defaults to 10s.\n"
      },
      "retries": {
        "type": "number",
        "description": "Number of times operations that result in retriable errors should be re-attempted. Defaults to 10.\n"
      },
      "retryInterval": {
        "type": "string",
        "description": "Duration to wait after a failing etcd request before retrying. Defaults to 100ms.\n"
      },
      "skipTls": {
        "type": "boolean",
        "description": "If set to true, connection to the etcd cluster will be attempted in plaintext without encryption. Default to false\n"
      },
      "username": {
        "type": "string",
        "description": "Name of the etcd user that will be used to access etcd. Can alternatively be set with the ETCDCTL_USERNAME environment\nvariable. Can also be omitted if tls certificate authentication will be used instead as the username will be infered\nfrom the certificate.\n"
      }
    }
  },
  "resources": {
    "etcd:index/auth:Auth": {
      "description": "Controls the authentication status (enabled or disabled) of the etcd cluster.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as etcd from \"@pulumi/etcd\";\n\nconst auth = new etcd.Auth(\"auth\", {enabled: true});\n```\n```python\nimport pulumi\nimport pulumi_etcd as etcd\n\nauth = etcd.Auth(\"auth\", enabled=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Etcd = Pulumi.Etcd;\n\nreturn await Deployment.RunAsync(() => \n{\n    var auth = new Etcd.Auth(\"auth\", new()\n    {\n        Enabled = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/etcd/etcd\"\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 := etcd.NewAuth(ctx, \"auth\", &etcd.AuthArgs{\n\t\t\tEnabled: pulumi.Bool(true),\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.etcd.Auth;\nimport com.pulumi.etcd.AuthArgs;\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 auth = new Auth(\"auth\", AuthArgs.builder()\n            .enabled(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  auth:\n    type: etcd:Auth\n    properties:\n      enabled: true\n```\n<!--End PulumiCodeChooser -->\n",
      "properties": {
        "authId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        },
        "enabled": {
          "type": "boolean",
          "description": "Enable or disable auth on etcd.\n"
        }
      },
      "type": "object",
      "required": [
        "authId",
        "enabled"
      ],
      "inputProperties": {
        "authId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        },
        "enabled": {
          "type": "boolean",
          "description": "Enable or disable auth on etcd.\n"
        }
      },
      "requiredInputs": [
        "enabled"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering Auth resources.\n",
        "properties": {
          "authId": {
            "type": "string",
            "description": "The ID of this resource.\n"
          },
          "enabled": {
            "type": "boolean",
            "description": "Enable or disable auth on etcd.\n"
          }
        },
        "type": "object"
      }
    },
    "etcd:index/key:Key": {
      "description": "Key value for etcd.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as etcd from \"@pulumi/etcd\";\n\nconst helloWorld = new etcd.Key(\"helloWorld\", {\n    key: \"/hello\",\n    value: \"world\",\n});\n```\n```python\nimport pulumi\nimport pulumi_etcd as etcd\n\nhello_world = etcd.Key(\"helloWorld\",\n    key=\"/hello\",\n    value=\"world\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Etcd = Pulumi.Etcd;\n\nreturn await Deployment.RunAsync(() => \n{\n    var helloWorld = new Etcd.Key(\"helloWorld\", new()\n    {\n        Key = \"/hello\",\n        Value = \"world\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/etcd/etcd\"\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 := etcd.NewKey(ctx, \"helloWorld\", &etcd.KeyArgs{\n\t\t\tKey:   pulumi.String(\"/hello\"),\n\t\t\tValue: pulumi.String(\"world\"),\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.etcd.Key;\nimport com.pulumi.etcd.KeyArgs;\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 helloWorld = new Key(\"helloWorld\", KeyArgs.builder()\n            .key(\"/hello\")\n            .value(\"world\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  helloWorld:\n    type: etcd:Key\n    properties:\n      key: /hello\n      value: world\n```\n<!--End PulumiCodeChooser -->\n",
      "properties": {
        "clearOnDeletion": {
          "type": "boolean"
        },
        "key": {
          "type": "string",
          "description": "Key to set.\n"
        },
        "keyId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        },
        "value": {
          "type": "string",
          "description": "Value to store in the key.\n"
        }
      },
      "type": "object",
      "required": [
        "key",
        "keyId",
        "value"
      ],
      "inputProperties": {
        "clearOnDeletion": {
          "type": "boolean"
        },
        "key": {
          "type": "string",
          "description": "Key to set.\n"
        },
        "keyId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        },
        "value": {
          "type": "string",
          "description": "Value to store in the key.\n"
        }
      },
      "requiredInputs": [
        "key",
        "value"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering Key resources.\n",
        "properties": {
          "clearOnDeletion": {
            "type": "boolean"
          },
          "key": {
            "type": "string",
            "description": "Key to set.\n"
          },
          "keyId": {
            "type": "string",
            "description": "The ID of this resource.\n"
          },
          "value": {
            "type": "string",
            "description": "Value to store in the key.\n"
          }
        },
        "type": "object"
      }
    },
    "etcd:index/keyPrefix:KeyPrefix": {
      "description": "Resource to manage all the keys contained within a specified prefix.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as etcd from \"@pulumi/etcd\";\n\nconst helloWorld = new etcd.KeyPrefix(\"helloWorld\", {\n    clearOnDeletion: true,\n    keys: [\n        {\n            key: \"hello\",\n            value: \"hello\",\n        },\n        {\n            key: \"world\",\n            value: \"world\",\n        },\n    ],\n    prefix: \"/hello_world/\",\n});\n```\n```python\nimport pulumi\nimport pulumi_etcd as etcd\n\nhello_world = etcd.KeyPrefix(\"helloWorld\",\n    clear_on_deletion=True,\n    keys=[\n        {\n            \"key\": \"hello\",\n            \"value\": \"hello\",\n        },\n        {\n            \"key\": \"world\",\n            \"value\": \"world\",\n        },\n    ],\n    prefix=\"/hello_world/\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Etcd = Pulumi.Etcd;\n\nreturn await Deployment.RunAsync(() => \n{\n    var helloWorld = new Etcd.KeyPrefix(\"helloWorld\", new()\n    {\n        ClearOnDeletion = true,\n        Keys = new[]\n        {\n            new Etcd.Inputs.KeyPrefixKeyArgs\n            {\n                Key = \"hello\",\n                Value = \"hello\",\n            },\n            new Etcd.Inputs.KeyPrefixKeyArgs\n            {\n                Key = \"world\",\n                Value = \"world\",\n            },\n        },\n        Prefix = \"/hello_world/\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/etcd/etcd\"\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 := etcd.NewKeyPrefix(ctx, \"helloWorld\", &etcd.KeyPrefixArgs{\n\t\t\tClearOnDeletion: pulumi.Bool(true),\n\t\t\tKeys: etcd.KeyPrefixKeyArray{\n\t\t\t\t&etcd.KeyPrefixKeyArgs{\n\t\t\t\t\tKey:   pulumi.String(\"hello\"),\n\t\t\t\t\tValue: pulumi.String(\"hello\"),\n\t\t\t\t},\n\t\t\t\t&etcd.KeyPrefixKeyArgs{\n\t\t\t\t\tKey:   pulumi.String(\"world\"),\n\t\t\t\t\tValue: pulumi.String(\"world\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPrefix: pulumi.String(\"/hello_world/\"),\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.etcd.KeyPrefix;\nimport com.pulumi.etcd.KeyPrefixArgs;\nimport com.pulumi.etcd.inputs.KeyPrefixKeyArgs;\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 helloWorld = new KeyPrefix(\"helloWorld\", KeyPrefixArgs.builder()\n            .clearOnDeletion(true)\n            .keys(            \n                KeyPrefixKeyArgs.builder()\n                    .key(\"hello\")\n                    .value(\"hello\")\n                    .build(),\n                KeyPrefixKeyArgs.builder()\n                    .key(\"world\")\n                    .value(\"world\")\n                    .build())\n            .prefix(\"/hello_world/\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  helloWorld:\n    type: etcd:KeyPrefix\n    properties:\n      clearOnDeletion: true\n      keys:\n        - key: hello\n          value: hello\n        - key: world\n          value: world\n      prefix: /hello_world/\n```\n<!--End PulumiCodeChooser -->\n",
      "properties": {
        "clearOnDeletion": {
          "type": "boolean",
          "description": "Whether to clear all existing keys with the prefix when the resource is deleted.\n"
        },
        "keyPrefixId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        },
        "keys": {
          "type": "array",
          "items": {
            "$ref": "#/types/etcd:index%2FKeyPrefixKey:KeyPrefixKey"
          },
          "description": "Keys to define in the prefix.\n"
        },
        "prefix": {
          "type": "string",
          "description": "Prefix of keys to set.\n"
        }
      },
      "type": "object",
      "required": [
        "keyPrefixId",
        "keys",
        "prefix"
      ],
      "inputProperties": {
        "clearOnDeletion": {
          "type": "boolean",
          "description": "Whether to clear all existing keys with the prefix when the resource is deleted.\n"
        },
        "keyPrefixId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        },
        "keys": {
          "type": "array",
          "items": {
            "$ref": "#/types/etcd:index%2FKeyPrefixKey:KeyPrefixKey"
          },
          "description": "Keys to define in the prefix.\n"
        },
        "prefix": {
          "type": "string",
          "description": "Prefix of keys to set.\n"
        }
      },
      "requiredInputs": [
        "keys",
        "prefix"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering KeyPrefix resources.\n",
        "properties": {
          "clearOnDeletion": {
            "type": "boolean",
            "description": "Whether to clear all existing keys with the prefix when the resource is deleted.\n"
          },
          "keyPrefixId": {
            "type": "string",
            "description": "The ID of this resource.\n"
          },
          "keys": {
            "type": "array",
            "items": {
              "$ref": "#/types/etcd:index%2FKeyPrefixKey:KeyPrefixKey"
            },
            "description": "Keys to define in the prefix.\n"
          },
          "prefix": {
            "type": "string",
            "description": "Prefix of keys to set.\n"
          }
        },
        "type": "object"
      }
    },
    "etcd:index/rangeScopedState:RangeScopedState": {
      "description": "Resource to manage the lifecycle of a state scoped by a key range.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as etcd from \"@pulumi/etcd\";\n\nconst patroniPrefixRangeEnd = etcd.getPrefixRangeEnd({\n    key: \"/patroni/\",\n});\nconst patroniRangeScopedState = new etcd.RangeScopedState(\"patroniRangeScopedState\", {\n    key: patroniPrefixRangeEnd.then(patroniPrefixRangeEnd => patroniPrefixRangeEnd.key),\n    rangeEnd: patroniPrefixRangeEnd.then(patroniPrefixRangeEnd => patroniPrefixRangeEnd.rangeEnd),\n    clearOnCreation: false,\n    clearOnDeletion: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_etcd as etcd\n\npatroni_prefix_range_end = etcd.get_prefix_range_end(key=\"/patroni/\")\npatroni_range_scoped_state = etcd.RangeScopedState(\"patroniRangeScopedState\",\n    key=patroni_prefix_range_end.key,\n    range_end=patroni_prefix_range_end.range_end,\n    clear_on_creation=False,\n    clear_on_deletion=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Etcd = Pulumi.Etcd;\n\nreturn await Deployment.RunAsync(() => \n{\n    var patroniPrefixRangeEnd = Etcd.GetPrefixRangeEnd.Invoke(new()\n    {\n        Key = \"/patroni/\",\n    });\n\n    var patroniRangeScopedState = new Etcd.RangeScopedState(\"patroniRangeScopedState\", new()\n    {\n        Key = patroniPrefixRangeEnd.Apply(getPrefixRangeEndResult => getPrefixRangeEndResult.Key),\n        RangeEnd = patroniPrefixRangeEnd.Apply(getPrefixRangeEndResult => getPrefixRangeEndResult.RangeEnd),\n        ClearOnCreation = false,\n        ClearOnDeletion = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/etcd/etcd\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpatroniPrefixRangeEnd, err := etcd.GetPrefixRangeEnd(ctx, &etcd.GetPrefixRangeEndArgs{\n\t\t\tKey: \"/patroni/\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = etcd.NewRangeScopedState(ctx, \"patroniRangeScopedState\", &etcd.RangeScopedStateArgs{\n\t\t\tKey:             pulumi.String(patroniPrefixRangeEnd.Key),\n\t\t\tRangeEnd:        pulumi.String(patroniPrefixRangeEnd.RangeEnd),\n\t\t\tClearOnCreation: pulumi.Bool(false),\n\t\t\tClearOnDeletion: pulumi.Bool(true),\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.etcd.EtcdFunctions;\nimport com.pulumi.etcd.inputs.GetPrefixRangeEndArgs;\nimport com.pulumi.etcd.RangeScopedState;\nimport com.pulumi.etcd.RangeScopedStateArgs;\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 patroniPrefixRangeEnd = EtcdFunctions.getPrefixRangeEnd(GetPrefixRangeEndArgs.builder()\n            .key(\"/patroni/\")\n            .build());\n\n        var patroniRangeScopedState = new RangeScopedState(\"patroniRangeScopedState\", RangeScopedStateArgs.builder()\n            .key(patroniPrefixRangeEnd.applyValue(getPrefixRangeEndResult -> getPrefixRangeEndResult.key()))\n            .rangeEnd(patroniPrefixRangeEnd.applyValue(getPrefixRangeEndResult -> getPrefixRangeEndResult.rangeEnd()))\n            .clearOnCreation(false)\n            .clearOnDeletion(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  patroniRangeScopedState:\n    type: etcd:RangeScopedState\n    properties:\n      key: ${patroniPrefixRangeEnd.key}\n      rangeEnd: ${patroniPrefixRangeEnd.rangeEnd}\n      clearOnCreation: false\n      clearOnDeletion: true\nvariables:\n  patroniPrefixRangeEnd:\n    fn::invoke:\n      function: etcd:getPrefixRangeEnd\n      arguments:\n        key: /patroni/\n```\n<!--End PulumiCodeChooser -->\n",
      "properties": {
        "clearOnCreation": {
          "type": "boolean",
          "description": "Whether to clear all pre-existing keys in the range when the resource is created.\n"
        },
        "clearOnDeletion": {
          "type": "boolean",
          "description": "Whether to clear all existing keys in the range when the resource is deleted.\n"
        },
        "key": {
          "type": "string",
          "description": "Key specifying the beginning of the key range.\n"
        },
        "rangeEnd": {
          "type": "string",
          "description": "Key specifying the end of the key range (exclusive). To you set it to the value of the key scopes the range to a single key. If you would like the range to be anything prefixed by the key, you can use the etcd*prefix*range_end data helper.\n"
        },
        "rangeScopedStateId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        }
      },
      "type": "object",
      "required": [
        "key",
        "rangeEnd",
        "rangeScopedStateId"
      ],
      "inputProperties": {
        "clearOnCreation": {
          "type": "boolean",
          "description": "Whether to clear all pre-existing keys in the range when the resource is created.\n"
        },
        "clearOnDeletion": {
          "type": "boolean",
          "description": "Whether to clear all existing keys in the range when the resource is deleted.\n"
        },
        "key": {
          "type": "string",
          "description": "Key specifying the beginning of the key range.\n"
        },
        "rangeEnd": {
          "type": "string",
          "description": "Key specifying the end of the key range (exclusive). To you set it to the value of the key scopes the range to a single key. If you would like the range to be anything prefixed by the key, you can use the etcd*prefix*range_end data helper.\n"
        },
        "rangeScopedStateId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        }
      },
      "requiredInputs": [
        "key",
        "rangeEnd"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering RangeScopedState resources.\n",
        "properties": {
          "clearOnCreation": {
            "type": "boolean",
            "description": "Whether to clear all pre-existing keys in the range when the resource is created.\n"
          },
          "clearOnDeletion": {
            "type": "boolean",
            "description": "Whether to clear all existing keys in the range when the resource is deleted.\n"
          },
          "key": {
            "type": "string",
            "description": "Key specifying the beginning of the key range.\n"
          },
          "rangeEnd": {
            "type": "string",
            "description": "Key specifying the end of the key range (exclusive). To you set it to the value of the key scopes the range to a single key. If you would like the range to be anything prefixed by the key, you can use the etcd*prefix*range_end data helper.\n"
          },
          "rangeScopedStateId": {
            "type": "string",
            "description": "The ID of this resource.\n"
          }
        },
        "type": "object"
      }
    },
    "etcd:index/role:Role": {
      "description": "User role for etcd to define access control.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as etcd from \"@pulumi/etcd\";\n\nconst confFiles = etcd.getPrefixRangeEnd({\n    key: \"/confs/\",\n});\nconst configurator = new etcd.Role(\"configurator\", {permissions: [\n    {\n        permission: \"readwrite\",\n        key: confFiles.then(confFiles => confFiles.key),\n        rangeEnd: confFiles.then(confFiles => confFiles.rangeEnd),\n    },\n    {\n        permission: \"read\",\n        key: \"/summary.txt\",\n        rangeEnd: \"/summary.txt\",\n    },\n]});\n```\n```python\nimport pulumi\nimport pulumi_etcd as etcd\n\nconf_files = etcd.get_prefix_range_end(key=\"/confs/\")\nconfigurator = etcd.Role(\"configurator\", permissions=[\n    {\n        \"permission\": \"readwrite\",\n        \"key\": conf_files.key,\n        \"range_end\": conf_files.range_end,\n    },\n    {\n        \"permission\": \"read\",\n        \"key\": \"/summary.txt\",\n        \"range_end\": \"/summary.txt\",\n    },\n])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Etcd = Pulumi.Etcd;\n\nreturn await Deployment.RunAsync(() => \n{\n    var confFiles = Etcd.GetPrefixRangeEnd.Invoke(new()\n    {\n        Key = \"/confs/\",\n    });\n\n    var configurator = new Etcd.Role(\"configurator\", new()\n    {\n        Permissions = new[]\n        {\n            new Etcd.Inputs.RolePermissionArgs\n            {\n                Permission = \"readwrite\",\n                Key = confFiles.Apply(getPrefixRangeEndResult => getPrefixRangeEndResult.Key),\n                RangeEnd = confFiles.Apply(getPrefixRangeEndResult => getPrefixRangeEndResult.RangeEnd),\n            },\n            new Etcd.Inputs.RolePermissionArgs\n            {\n                Permission = \"read\",\n                Key = \"/summary.txt\",\n                RangeEnd = \"/summary.txt\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/etcd/etcd\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tconfFiles, err := etcd.GetPrefixRangeEnd(ctx, &etcd.GetPrefixRangeEndArgs{\n\t\t\tKey: \"/confs/\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = etcd.NewRole(ctx, \"configurator\", &etcd.RoleArgs{\n\t\t\tPermissions: etcd.RolePermissionArray{\n\t\t\t\t&etcd.RolePermissionArgs{\n\t\t\t\t\tPermission: pulumi.String(\"readwrite\"),\n\t\t\t\t\tKey:        pulumi.String(confFiles.Key),\n\t\t\t\t\tRangeEnd:   pulumi.String(confFiles.RangeEnd),\n\t\t\t\t},\n\t\t\t\t&etcd.RolePermissionArgs{\n\t\t\t\t\tPermission: pulumi.String(\"read\"),\n\t\t\t\t\tKey:        pulumi.String(\"/summary.txt\"),\n\t\t\t\t\tRangeEnd:   pulumi.String(\"/summary.txt\"),\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.etcd.EtcdFunctions;\nimport com.pulumi.etcd.inputs.GetPrefixRangeEndArgs;\nimport com.pulumi.etcd.Role;\nimport com.pulumi.etcd.RoleArgs;\nimport com.pulumi.etcd.inputs.RolePermissionArgs;\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 confFiles = EtcdFunctions.getPrefixRangeEnd(GetPrefixRangeEndArgs.builder()\n            .key(\"/confs/\")\n            .build());\n\n        var configurator = new Role(\"configurator\", RoleArgs.builder()\n            .permissions(            \n                RolePermissionArgs.builder()\n                    .permission(\"readwrite\")\n                    .key(confFiles.applyValue(getPrefixRangeEndResult -> getPrefixRangeEndResult.key()))\n                    .rangeEnd(confFiles.applyValue(getPrefixRangeEndResult -> getPrefixRangeEndResult.rangeEnd()))\n                    .build(),\n                RolePermissionArgs.builder()\n                    .permission(\"read\")\n                    .key(\"/summary.txt\")\n                    .rangeEnd(\"/summary.txt\")\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  configurator:\n    type: etcd:Role\n    properties:\n      permissions:\n        - permission: readwrite\n          key: ${confFiles.key}\n          rangeEnd: ${confFiles.rangeEnd}\n        - permission: read\n          key: /summary.txt\n          rangeEnd: /summary.txt\nvariables:\n  confFiles:\n    fn::invoke:\n      function: etcd:getPrefixRangeEnd\n      arguments:\n        key: /confs/\n```\n<!--End PulumiCodeChooser -->\n",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the role. Changing this will delete the role and create a new one.\n"
        },
        "permissions": {
          "type": "array",
          "items": {
            "$ref": "#/types/etcd:index%2FRolePermission:RolePermission"
          },
          "description": "Permissions to grant to the role on various etcd key ranges.\n"
        },
        "roleId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        }
      },
      "type": "object",
      "required": [
        "name",
        "roleId"
      ],
      "inputProperties": {
        "name": {
          "type": "string",
          "description": "Name of the role. Changing this will delete the role and create a new one.\n"
        },
        "permissions": {
          "type": "array",
          "items": {
            "$ref": "#/types/etcd:index%2FRolePermission:RolePermission"
          },
          "description": "Permissions to grant to the role on various etcd key ranges.\n"
        },
        "roleId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        }
      },
      "stateInputs": {
        "description": "Input properties used for looking up and filtering Role resources.\n",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the role. Changing this will delete the role and create a new one.\n"
          },
          "permissions": {
            "type": "array",
            "items": {
              "$ref": "#/types/etcd:index%2FRolePermission:RolePermission"
            },
            "description": "Permissions to grant to the role on various etcd key ranges.\n"
          },
          "roleId": {
            "type": "string",
            "description": "The ID of this resource.\n"
          }
        },
        "type": "object"
      }
    },
    "etcd:index/synchronizedDirectory:SynchronizedDirectory": {
      "description": "Synchronizes the content of an key prefix and directory. Note that etcd is has a default max object size of 1.5MiB and is most suitable for keys that are bounded to a small size like configurations. Use another solution for larger files. Also, currently, only file systems following the unix convention are supported.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as etcd from \"@pulumi/etcd\";\n\n//Upload some prometheus configs\nconst prometheusConfs = new etcd.SynchronizedDirectory(\"prometheusConfs\", {\n    directory: `${path.module}/prometheus-confs`,\n    keyPrefix: \"/prometheus-confs/\",\n    source: \"directory\",\n    recurrence: \"once\",\n}, {\n    provider: etcdnew,\n});\n//sync key range in etcdnew with the one in etcdold\nconst source = new etcd.SynchronizedDirectory(\"source\", {\n    directory: \"/tmp/prefix-to-transfer\",\n    keyPrefix: \"/prefix-to-transfer/\",\n    source: \"key-prefix\",\n    recurrence: \"once\",\n}, {\n    provider: etcdold,\n});\nconst destination = new etcd.SynchronizedDirectory(\"destination\", {\n    directory: \"/tmp/prefix-to-transfer\",\n    keyPrefix: \"/prefix-to-transfer/\",\n    source: \"directory\",\n    recurrence: \"once\",\n}, {\n    provider: etcdnew,\n    dependsOn: [source],\n});\n```\n```python\nimport pulumi\nimport pulumi_etcd as etcd\n\n#Upload some prometheus configs\nprometheus_confs = etcd.SynchronizedDirectory(\"prometheusConfs\",\n    directory=f\"{path['module']}/prometheus-confs\",\n    key_prefix=\"/prometheus-confs/\",\n    source=\"directory\",\n    recurrence=\"once\",\n    opts = pulumi.ResourceOptions(provider=etcdnew))\n#sync key range in etcdnew with the one in etcdold\nsource = etcd.SynchronizedDirectory(\"source\",\n    directory=\"/tmp/prefix-to-transfer\",\n    key_prefix=\"/prefix-to-transfer/\",\n    source=\"key-prefix\",\n    recurrence=\"once\",\n    opts = pulumi.ResourceOptions(provider=etcdold))\ndestination = etcd.SynchronizedDirectory(\"destination\",\n    directory=\"/tmp/prefix-to-transfer\",\n    key_prefix=\"/prefix-to-transfer/\",\n    source=\"directory\",\n    recurrence=\"once\",\n    opts = pulumi.ResourceOptions(provider=etcdnew,\n        depends_on=[source]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Etcd = Pulumi.Etcd;\n\nreturn await Deployment.RunAsync(() => \n{\n    //Upload some prometheus configs\n    var prometheusConfs = new Etcd.SynchronizedDirectory(\"prometheusConfs\", new()\n    {\n        Directory = $\"{path.Module}/prometheus-confs\",\n        KeyPrefix = \"/prometheus-confs/\",\n        Source = \"directory\",\n        Recurrence = \"once\",\n    }, new CustomResourceOptions\n    {\n        Provider = etcdnew,\n    });\n\n    //sync key range in etcdnew with the one in etcdold\n    var source = new Etcd.SynchronizedDirectory(\"source\", new()\n    {\n        Directory = \"/tmp/prefix-to-transfer\",\n        KeyPrefix = \"/prefix-to-transfer/\",\n        Source = \"key-prefix\",\n        Recurrence = \"once\",\n    }, new CustomResourceOptions\n    {\n        Provider = etcdold,\n    });\n\n    var destination = new Etcd.SynchronizedDirectory(\"destination\", new()\n    {\n        Directory = \"/tmp/prefix-to-transfer\",\n        KeyPrefix = \"/prefix-to-transfer/\",\n        Source = \"directory\",\n        Recurrence = \"once\",\n    }, new CustomResourceOptions\n    {\n        Provider = etcdnew,\n        DependsOn =\n        {\n            source,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/etcd/etcd\"\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// Upload some prometheus configs\n\t\t_, err := etcd.NewSynchronizedDirectory(ctx, \"prometheusConfs\", &etcd.SynchronizedDirectoryArgs{\n\t\t\tDirectory:  pulumi.Sprintf(\"%v/prometheus-confs\", path.Module),\n\t\t\tKeyPrefix:  pulumi.String(\"/prometheus-confs/\"),\n\t\t\tSource:     pulumi.String(\"directory\"),\n\t\t\tRecurrence: pulumi.String(\"once\"),\n\t\t}, pulumi.Provider(etcdnew))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// sync key range in etcdnew with the one in etcdold\n\t\tsource, err := etcd.NewSynchronizedDirectory(ctx, \"source\", &etcd.SynchronizedDirectoryArgs{\n\t\t\tDirectory:  pulumi.String(\"/tmp/prefix-to-transfer\"),\n\t\t\tKeyPrefix:  pulumi.String(\"/prefix-to-transfer/\"),\n\t\t\tSource:     pulumi.String(\"key-prefix\"),\n\t\t\tRecurrence: pulumi.String(\"once\"),\n\t\t}, pulumi.Provider(etcdold))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = etcd.NewSynchronizedDirectory(ctx, \"destination\", &etcd.SynchronizedDirectoryArgs{\n\t\t\tDirectory:  pulumi.String(\"/tmp/prefix-to-transfer\"),\n\t\t\tKeyPrefix:  pulumi.String(\"/prefix-to-transfer/\"),\n\t\t\tSource:     pulumi.String(\"directory\"),\n\t\t\tRecurrence: pulumi.String(\"once\"),\n\t\t}, pulumi.Provider(etcdnew), pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsource,\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.etcd.SynchronizedDirectory;\nimport com.pulumi.etcd.SynchronizedDirectoryArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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        //Upload some prometheus configs\n        var prometheusConfs = new SynchronizedDirectory(\"prometheusConfs\", SynchronizedDirectoryArgs.builder()\n            .directory(String.format(\"%s/prometheus-confs\", path.module()))\n            .keyPrefix(\"/prometheus-confs/\")\n            .source(\"directory\")\n            .recurrence(\"once\")\n            .build(), CustomResourceOptions.builder()\n                .provider(etcdnew)\n                .build());\n\n        //sync key range in etcdnew with the one in etcdold\n        var source = new SynchronizedDirectory(\"source\", SynchronizedDirectoryArgs.builder()\n            .directory(\"/tmp/prefix-to-transfer\")\n            .keyPrefix(\"/prefix-to-transfer/\")\n            .source(\"key-prefix\")\n            .recurrence(\"once\")\n            .build(), CustomResourceOptions.builder()\n                .provider(etcdold)\n                .build());\n\n        var destination = new SynchronizedDirectory(\"destination\", SynchronizedDirectoryArgs.builder()\n            .directory(\"/tmp/prefix-to-transfer\")\n            .keyPrefix(\"/prefix-to-transfer/\")\n            .source(\"directory\")\n            .recurrence(\"once\")\n            .build(), CustomResourceOptions.builder()\n                .provider(etcdnew)\n                .dependsOn(source)\n                .build());\n\n    }\n}\n```\n```yaml\nresources:\n  # Upload some prometheus configs\n  prometheusConfs:\n    type: etcd:SynchronizedDirectory\n    properties:\n      directory: ${path.module}/prometheus-confs\n      keyPrefix: /prometheus-confs/\n      source: directory\n      recurrence: once\n    options:\n      provider: ${etcdnew}\n  # sync key range in etcdnew with the one in etcdold\n  source:\n    type: etcd:SynchronizedDirectory\n    properties:\n      directory: /tmp/prefix-to-transfer\n      keyPrefix: /prefix-to-transfer/\n      source: key-prefix\n      recurrence: once\n    options:\n      provider: ${etcdold}\n  destination:\n    type: etcd:SynchronizedDirectory\n    properties:\n      directory: /tmp/prefix-to-transfer\n      keyPrefix: /prefix-to-transfer/\n      source: directory\n      recurrence: once\n    options:\n      provider: ${etcdnew}\n      dependsOn:\n        - ${source}\n```\n<!--End PulumiCodeChooser -->\n",
      "properties": {
        "directory": {
          "type": "string",
          "description": "Directory to synchronize with the key prefix.\n"
        },
        "directoryPermission": {
          "type": "string",
          "description": "Permission of generated directories if the directory is the destination and missing.\n"
        },
        "filesPermission": {
          "type": "string",
          "description": "Permission of generated files in the case where the directory is the destination.\n"
        },
        "keyPrefix": {
          "type": "string",
          "description": "Key prefix to synchronize with the directory.\n"
        },
        "recurrence": {
          "type": "string"
        },
        "source": {
          "type": "string",
          "description": "Authoritative source of data during the sync (data will move from the source to the destination). Can be one of: directory, key-prefix\n"
        },
        "synchronizedDirectoryId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        }
      },
      "type": "object",
      "required": [
        "directory",
        "keyPrefix",
        "source",
        "synchronizedDirectoryId"
      ],
      "inputProperties": {
        "directory": {
          "type": "string",
          "description": "Directory to synchronize with the key prefix.\n"
        },
        "directoryPermission": {
          "type": "string",
          "description": "Permission of generated directories if the directory is the destination and missing.\n"
        },
        "filesPermission": {
          "type": "string",
          "description": "Permission of generated files in the case where the directory is the destination.\n"
        },
        "keyPrefix": {
          "type": "string",
          "description": "Key prefix to synchronize with the directory.\n"
        },
        "recurrence": {
          "type": "string"
        },
        "source": {
          "type": "string",
          "description": "Authoritative source of data during the sync (data will move from the source to the destination). Can be one of: directory, key-prefix\n"
        },
        "synchronizedDirectoryId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        }
      },
      "requiredInputs": [
        "directory",
        "keyPrefix",
        "source"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering SynchronizedDirectory resources.\n",
        "properties": {
          "directory": {
            "type": "string",
            "description": "Directory to synchronize with the key prefix.\n"
          },
          "directoryPermission": {
            "type": "string",
            "description": "Permission of generated directories if the directory is the destination and missing.\n"
          },
          "filesPermission": {
            "type": "string",
            "description": "Permission of generated files in the case where the directory is the destination.\n"
          },
          "keyPrefix": {
            "type": "string",
            "description": "Key prefix to synchronize with the directory.\n"
          },
          "recurrence": {
            "type": "string"
          },
          "source": {
            "type": "string",
            "description": "Authoritative source of data during the sync (data will move from the source to the destination). Can be one of: directory, key-prefix\n"
          },
          "synchronizedDirectoryId": {
            "type": "string",
            "description": "The ID of this resource.\n"
          }
        },
        "type": "object"
      }
    },
    "etcd:index/synchronizedKeyPrefixes:SynchronizedKeyPrefixes": {
      "description": "Synchronizes a source key prefix with a destination key prefix either once when the resources is created or whenever the resource is applied. Note that the resource assumes that the destination is not being written to during synchronization.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as etcd from \"@pulumi/etcd\";\n\nconst syncMyApp = new etcd.SynchronizedKeyPrefixes(\"syncMyApp\", {\n    destinationPrefix: \"/my-app-state-with-the-prefix-i-want/\",\n    recurrence: \"onchange\",\n    sourcePrefix: \"/my-app-state-with-bad-prefix/\",\n});\n```\n```python\nimport pulumi\nimport pulumi_etcd as etcd\n\nsync_my_app = etcd.SynchronizedKeyPrefixes(\"syncMyApp\",\n    destination_prefix=\"/my-app-state-with-the-prefix-i-want/\",\n    recurrence=\"onchange\",\n    source_prefix=\"/my-app-state-with-bad-prefix/\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Etcd = Pulumi.Etcd;\n\nreturn await Deployment.RunAsync(() => \n{\n    var syncMyApp = new Etcd.SynchronizedKeyPrefixes(\"syncMyApp\", new()\n    {\n        DestinationPrefix = \"/my-app-state-with-the-prefix-i-want/\",\n        Recurrence = \"onchange\",\n        SourcePrefix = \"/my-app-state-with-bad-prefix/\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/etcd/etcd\"\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 := etcd.NewSynchronizedKeyPrefixes(ctx, \"syncMyApp\", &etcd.SynchronizedKeyPrefixesArgs{\n\t\t\tDestinationPrefix: pulumi.String(\"/my-app-state-with-the-prefix-i-want/\"),\n\t\t\tRecurrence:        pulumi.String(\"onchange\"),\n\t\t\tSourcePrefix:      pulumi.String(\"/my-app-state-with-bad-prefix/\"),\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.etcd.SynchronizedKeyPrefixes;\nimport com.pulumi.etcd.SynchronizedKeyPrefixesArgs;\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 syncMyApp = new SynchronizedKeyPrefixes(\"syncMyApp\", SynchronizedKeyPrefixesArgs.builder()\n            .destinationPrefix(\"/my-app-state-with-the-prefix-i-want/\")\n            .recurrence(\"onchange\")\n            .sourcePrefix(\"/my-app-state-with-bad-prefix/\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  syncMyApp:\n    type: etcd:SynchronizedKeyPrefixes\n    properties:\n      destinationPrefix: /my-app-state-with-the-prefix-i-want/\n      recurrence: onchange\n      sourcePrefix: /my-app-state-with-bad-prefix/\n```\n<!--End PulumiCodeChooser -->\n",
      "properties": {
        "destinationPrefix": {
          "type": "string",
          "description": "Destination key prefix to synchronize to.\n"
        },
        "recurrence": {
          "type": "string"
        },
        "sourcePrefix": {
          "type": "string",
          "description": "Source key prefix to synchronize from.\n"
        },
        "synchronizedKeyPrefixesId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        }
      },
      "type": "object",
      "required": [
        "destinationPrefix",
        "sourcePrefix",
        "synchronizedKeyPrefixesId"
      ],
      "inputProperties": {
        "destinationPrefix": {
          "type": "string",
          "description": "Destination key prefix to synchronize to.\n"
        },
        "recurrence": {
          "type": "string"
        },
        "sourcePrefix": {
          "type": "string",
          "description": "Source key prefix to synchronize from.\n"
        },
        "synchronizedKeyPrefixesId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        }
      },
      "requiredInputs": [
        "destinationPrefix",
        "sourcePrefix"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering SynchronizedKeyPrefixes resources.\n",
        "properties": {
          "destinationPrefix": {
            "type": "string",
            "description": "Destination key prefix to synchronize to.\n"
          },
          "recurrence": {
            "type": "string"
          },
          "sourcePrefix": {
            "type": "string",
            "description": "Source key prefix to synchronize from.\n"
          },
          "synchronizedKeyPrefixesId": {
            "type": "string",
            "description": "The ID of this resource.\n"
          }
        },
        "type": "object"
      }
    },
    "etcd:index/user:User": {
      "description": "User that can access etcd.\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as etcd from \"@pulumi/etcd\";\n\nconst summaryReader = new etcd.Role(\"summaryReader\", {permissions: [{\n    permission: \"read\",\n    key: \"/summary.txt\",\n    rangeEnd: \"/summary.txt\",\n}]});\nconst bob = new etcd.User(\"bob\", {\n    username: \"bob\",\n    password: \"1234\",\n    roles: [summaryReader.name],\n});\n```\n```python\nimport pulumi\nimport pulumi_etcd as etcd\n\nsummary_reader = etcd.Role(\"summaryReader\", permissions=[{\n    \"permission\": \"read\",\n    \"key\": \"/summary.txt\",\n    \"range_end\": \"/summary.txt\",\n}])\nbob = etcd.User(\"bob\",\n    username=\"bob\",\n    password=\"1234\",\n    roles=[summary_reader.name])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Etcd = Pulumi.Etcd;\n\nreturn await Deployment.RunAsync(() => \n{\n    var summaryReader = new Etcd.Role(\"summaryReader\", new()\n    {\n        Permissions = new[]\n        {\n            new Etcd.Inputs.RolePermissionArgs\n            {\n                Permission = \"read\",\n                Key = \"/summary.txt\",\n                RangeEnd = \"/summary.txt\",\n            },\n        },\n    });\n\n    var bob = new Etcd.User(\"bob\", new()\n    {\n        Username = \"bob\",\n        Password = \"1234\",\n        Roles = new[]\n        {\n            summaryReader.Name,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/etcd/etcd\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsummaryReader, err := etcd.NewRole(ctx, \"summaryReader\", &etcd.RoleArgs{\n\t\t\tPermissions: etcd.RolePermissionArray{\n\t\t\t\t&etcd.RolePermissionArgs{\n\t\t\t\t\tPermission: pulumi.String(\"read\"),\n\t\t\t\t\tKey:        pulumi.String(\"/summary.txt\"),\n\t\t\t\t\tRangeEnd:   pulumi.String(\"/summary.txt\"),\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\t_, err = etcd.NewUser(ctx, \"bob\", &etcd.UserArgs{\n\t\t\tUsername: pulumi.String(\"bob\"),\n\t\t\tPassword: pulumi.String(\"1234\"),\n\t\t\tRoles: pulumi.StringArray{\n\t\t\t\tsummaryReader.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.etcd.Role;\nimport com.pulumi.etcd.RoleArgs;\nimport com.pulumi.etcd.inputs.RolePermissionArgs;\nimport com.pulumi.etcd.User;\nimport com.pulumi.etcd.UserArgs;\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 summaryReader = new Role(\"summaryReader\", RoleArgs.builder()\n            .permissions(RolePermissionArgs.builder()\n                .permission(\"read\")\n                .key(\"/summary.txt\")\n                .rangeEnd(\"/summary.txt\")\n                .build())\n            .build());\n\n        var bob = new User(\"bob\", UserArgs.builder()\n            .username(\"bob\")\n            .password(\"1234\")\n            .roles(summaryReader.name())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  summaryReader:\n    type: etcd:Role\n    properties:\n      permissions:\n        - permission: read\n          key: /summary.txt\n          rangeEnd: /summary.txt\n  bob:\n    type: etcd:User\n    properties:\n      username: bob\n      password: '1234'\n      roles:\n        - ${summaryReader.name}\n```\n<!--End PulumiCodeChooser -->\n",
      "properties": {
        "password": {
          "type": "string",
          "description": "Password of the user. Can be omitted for a user that you wish to authenticate strictly with tls certificate authentication.\n",
          "secret": true
        },
        "roles": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Roles of the user, to define his access.\n"
        },
        "userId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        },
        "username": {
          "type": "string",
          "description": "Name of the user. Changing this will delete the user and create a new one.\n"
        }
      },
      "type": "object",
      "required": [
        "userId",
        "username"
      ],
      "inputProperties": {
        "password": {
          "type": "string",
          "description": "Password of the user. Can be omitted for a user that you wish to authenticate strictly with tls certificate authentication.\n",
          "secret": true
        },
        "roles": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Roles of the user, to define his access.\n"
        },
        "userId": {
          "type": "string",
          "description": "The ID of this resource.\n"
        },
        "username": {
          "type": "string",
          "description": "Name of the user. Changing this will delete the user and create a new one.\n"
        }
      },
      "requiredInputs": [
        "username"
      ],
      "stateInputs": {
        "description": "Input properties used for looking up and filtering User resources.\n",
        "properties": {
          "password": {
            "type": "string",
            "description": "Password of the user. Can be omitted for a user that you wish to authenticate strictly with tls certificate authentication.\n",
            "secret": true
          },
          "roles": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Roles of the user, to define his access.\n"
          },
          "userId": {
            "type": "string",
            "description": "The ID of this resource.\n"
          },
          "username": {
            "type": "string",
            "description": "Name of the user. Changing this will delete the user and create a new one.\n"
          }
        },
        "type": "object"
      }
    }
  },
  "functions": {
    "etcd:index/getKey:getKey": {
      "description": "Retrieves information about a key.\n",
      "inputs": {
        "description": "A collection of arguments for invoking getKey.\n",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID of this resource.\n"
          },
          "key": {
            "type": "string",
            "description": "Key to retrieve.\n"
          },
          "mustExist": {
            "type": "boolean",
            "description": "Whether to cause an error if the key is not found.\n"
          }
        },
        "type": "object",
        "required": [
          "key"
        ]
      },
      "outputs": {
        "description": "A collection of values returned by getKey.\n",
        "properties": {
          "createRevision": {
            "description": "Revision of the etcd keystore when the key was created\n",
            "type": "number"
          },
          "found": {
            "description": "Whether the key was found.\n",
            "type": "boolean"
          },
          "id": {
            "description": "The ID of this resource.\n",
            "type": "string"
          },
          "key": {
            "description": "Key to retrieve.\n",
            "type": "string"
          },
          "lease": {
            "description": "Id of the lease that the key is attached to. Will be 0 if the key is not attached to a lease.\n",
            "type": "number"
          },
          "modRevision": {
            "description": "Revision of the etcd keystore when the key was last modified\n",
            "type": "number"
          },
          "mustExist": {
            "description": "Whether to cause an error if the key is not found.\n",
            "type": "boolean"
          },
          "value": {
            "description": "Value of the key.\n",
            "type": "string"
          },
          "version": {
            "description": "Current version of the key. Note that version is reset to 0 on deletion\n",
            "type": "number"
          }
        },
        "required": [
          "createRevision",
          "found",
          "id",
          "key",
          "lease",
          "modRevision",
          "value",
          "version"
        ],
        "type": "object"
      }
    },
    "etcd:index/getKeyRange:getKeyRange": {
      "description": "Retrieves information about the keys contained in a given range.\n",
      "inputs": {
        "description": "A collection of arguments for invoking getKeyRange.\n",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID of this resource.\n"
          },
          "key": {
            "type": "string",
            "description": "Key specifying the beginning of the key range.\n"
          },
          "rangeEnd": {
            "type": "string",
            "description": "Key specifying the end of the key range (exclusive). To you set it to the value of the key scopes the range to a single key. If you would like the range to be anything prefixed by the key, you can use the etcd*prefix*range_end data helper.\n"
          }
        },
        "type": "object",
        "required": [
          "key",
          "rangeEnd"
        ]
      },
      "outputs": {
        "description": "A collection of values returned by getKeyRange.\n",
        "properties": {
          "id": {
            "description": "The ID of this resource.\n",
            "type": "string"
          },
          "key": {
            "description": "Key specifying the beginning of the key range.\n",
            "type": "string"
          },
          "rangeEnd": {
            "description": "Key specifying the end of the key range (exclusive). To you set it to the value of the key scopes the range to a single key. If you would like the range to be anything prefixed by the key, you can use the etcd*prefix*range_end data helper.\n",
            "type": "string"
          },
          "results": {
            "description": "List of keys that were read. Note that numerical values returned by etcd are in int64 format which might cause problems in int32 platforms.\n",
            "items": {
              "$ref": "#/types/etcd:index%2FgetKeyRangeResult:getKeyRangeResult"
            },
            "type": "array"
          }
        },
        "required": [
          "id",
          "key",
          "rangeEnd",
          "results"
        ],
        "type": "object"
      }
    },
    "etcd:index/getPrefixRangeEnd:getPrefixRangeEnd": {
      "description": "Helper to retrieve a range end that, combined with the key argument, constitutes a prefix of key.\n",
      "inputs": {
        "description": "A collection of arguments for invoking getPrefixRangeEnd.\n",
        "properties": {
          "id": {
            "type": "string",
            "description": "The ID of this resource.\n"
          },
          "key": {
            "type": "string",
            "description": "Key to get a prefix of.\n"
          }
        },
        "type": "object",
        "required": [
          "key"
        ]
      },
      "outputs": {
        "description": "A collection of values returned by getPrefixRangeEnd.\n",
        "properties": {
          "id": {
            "description": "The ID of this resource.\n",
            "type": "string"
          },
          "key": {
            "description": "Key to get a prefix of.\n",
            "type": "string"
          },
          "rangeEnd": {
            "description": "Computed range end that, combined with the key, constitutes a prefix of the key.\n",
            "type": "string"
          }
        },
        "required": [
          "id",
          "key",
          "rangeEnd"
        ],
        "type": "object"
      }
    }
  },
  "parameterization": {
    "baseProvider": {
      "name": "terraform-provider",
      "version": "0.10.0"
    },
    "parameter": "eyJyZW1vdGUiOnsidXJsIjoicmVnaXN0cnkub3BlbnRvZnUub3JnL2ZlcmxhYi1zdGUtanVzdGluZS9ldGNkIiwidmVyc2lvbiI6IjAuMTEuMCJ9fQ=="
  }
}
