# OpenSearch.Managed.Ephemeral Bootstrap (download, install, configure) and run OpenSearch clusters with ease. Started nodes are run in a new ephemeral location each time they are started and will clean up after they are disposed. ## EphemeralCluster A `ClusterBase` implementation from `OpenSearch.Managed` that can: * download opensearch versions (stable releases, snapshots, build candidates) * download opensearch plugins (stable releases, snapshots, build candidates) * install opensearch and desired plugins in an ephemeral location. The source downloaded zips are cached on disk (LocalAppData). * Ships with builtin knowledge on how to enable SSL on the running cluster. * Start opensearch using ephemeral locations for OPENSEARCH_HOME and conf/logs/data paths. #### Examples: The easiest way to get started is by simply passing the version you want to be bootstrapped to `EphemeralCluster`. `Start` starts the `OpenSearchNode`'s and waits for them to be started. The default overload waits `2 minutes`. ```csharp using (var cluster = new EphemeralCluster("1.0.0")) { cluster.Start(); } ``` If you want the full configuration possibilities inject a `EphemeralClusterConfiguration` instead: ```csharp var plugins = new OpenSearchPlugins(OpenSearchPlugin.RepositoryAzure, OpenSearchPlugin.IngestAttachment); var config = new EphemeralClusterConfiguration("1.0.0", ServerType.OpenSearch, ClusterFeatures.None, plugins, numberOfNodes: 2); using (var cluster = new EphemeralCluster(config)) { cluster.Start(); var nodes = cluster.NodesUris(); var connectionPool = new StaticConnectionPool(nodes); var settings = new ConnectionSettings(connectionPool).EnableDebugMode(); var client = new OpenSearchClient(settings); Console.Write(client.CatPlugins().DebugInformation); } ``` Here we first create a `OpenSearchPlugins` collection of the plugins that we want to bootstrap. Then we create an instance of `EphemeralClusterConfiguration` that dictates we want a 2 node cluster running opensearch using the previous declared `plugins`. We then Start the node and after its up create a `OSC` client using the `NodeUris()` that the cluster started. We call `/_cat/plugins` and write `OSC`'s debug information to the console. When the cluster exits the using block and disposes the cluster all nodes will be shutdown gracefully.