// This is an automatically generated code sample. 
// To make this code sample work in your Oracle Cloud tenancy, 
// please replace the values for any parameters whose current values do not fit
// your use case (such as resource IDs, strings containing ‘EXAMPLE’ or ‘unique_id’, and 
// boolean, number, and enum parameters with values not fitting your use case).

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Oci.LoadbalancerService;
using Oci.Common;
using Oci.Common.Auth;

namespace Oci.Sdk.DotNet.Example.Loadbalancer
{
    public class CreateLoadBalancerExample
    {
        public static async Task Main()
        {
            // Create a request and dependent object(s).
			var createLoadBalancerDetails = new Oci.LoadbalancerService.Models.CreateLoadBalancerDetails
			{
				CompartmentId = "ocid1.test.oc1..<unique_ID>EXAMPLE-compartmentId-Value",
				DisplayName = "EXAMPLE-displayName-Value",
				ShapeName = "EXAMPLE-shapeName-Value",
				ShapeDetails = new Oci.LoadbalancerService.Models.ShapeDetails
				{
					MinimumBandwidthInMbps = 1910,
					MaximumBandwidthInMbps = 297
				},
				IsPrivate = true,
				IsDeleteProtectionEnabled = true,
				IpMode = Oci.LoadbalancerService.Models.CreateLoadBalancerDetails.IpModeEnum.Ipv6,
				Ipv6SubnetCidr = "EXAMPLE-ipv6SubnetCidr-Value",
				IsRequestIdEnabled = true,
				RequestIdHeader = "EXAMPLE-requestIdHeader-Value",
				ReservedIps = new List<Oci.LoadbalancerService.Models.ReservedIP>
				{
					new Oci.LoadbalancerService.Models.ReservedIP
					{
						Id = "ocid1.test.oc1..<unique_ID>EXAMPLE-id-Value"
					}
				},
				Listeners = new Dictionary<string, Oci.LoadbalancerService.Models.ListenerDetails>()
				{
					{
						"EXAMPLE_KEY_5vdJZ", 
						new Oci.LoadbalancerService.Models.ListenerDetails
						{
							DefaultBackendSetName = "EXAMPLE-defaultBackendSetName-Value",
							Port = 6080,
							Protocol = "EXAMPLE-protocol-Value",
							HostnameNames = new List<string>
							{
								"EXAMPLE--Value"
							},
							PathRouteSetName = "EXAMPLE-pathRouteSetName-Value",
							SslConfiguration = new Oci.LoadbalancerService.Models.SSLConfigurationDetails
							{
								VerifyDepth = 216,
								VerifyPeerCertificate = false,
								HasSessionResumption = true,
								TrustedCertificateAuthorityIds = new List<string>
								{
									"EXAMPLE--Value"
								},
								CertificateIds = new List<string>
								{
									"EXAMPLE--Value"
								},
								CertificateName = "EXAMPLE-certificateName-Value",
								Protocols = new List<string>
								{
									"EXAMPLE--Value"
								},
								CipherSuiteName = "EXAMPLE-cipherSuiteName-Value",
								ServerOrderPreference = Oci.LoadbalancerService.Models.SSLConfigurationDetails.ServerOrderPreferenceEnum.Disabled
							},
							ConnectionConfiguration = new Oci.LoadbalancerService.Models.ConnectionConfiguration
							{
								IdleTimeout = 857,
								BackendTcpProxyProtocolVersion = 1,
								BackendTcpProxyProtocolOptions = new List<Oci.LoadbalancerService.Models.ConnectionConfiguration.BackendTcpProxyProtocolOptionsEnum>
								{
									Oci.LoadbalancerService.Models.ConnectionConfiguration.BackendTcpProxyProtocolOptionsEnum.Pp2TypeAuthority
								}
							},
							RoutingPolicyName = "EXAMPLE-routingPolicyName-Value",
							RuleSetNames = new List<string>
							{
								"EXAMPLE--Value"
							}
						}
					}
				},
				Hostnames = new Dictionary<string, Oci.LoadbalancerService.Models.HostnameDetails>()
				{
					{
						"EXAMPLE_KEY_UzqNH", 
						new Oci.LoadbalancerService.Models.HostnameDetails
						{
							Name = "EXAMPLE-name-Value",
							Hostname = "EXAMPLE-hostname-Value"
						}
					}
				},
				BackendSets = new Dictionary<string, Oci.LoadbalancerService.Models.BackendSetDetails>()
				{
					{
						"EXAMPLE_KEY_gT7hW", 
						new Oci.LoadbalancerService.Models.BackendSetDetails
						{
							Policy = "EXAMPLE-policy-Value",
							Backends = new List<Oci.LoadbalancerService.Models.BackendDetails>
							{
								new Oci.LoadbalancerService.Models.BackendDetails
								{
									IpAddress = "EXAMPLE-ipAddress-Value",
									Port = 5086,
									Weight = 425,
									MaxConnections = 4666,
									Backup = true,
									Drain = false,
									Offline = false
								}
							},
							BackendMaxConnections = 31433,
							HealthChecker = new Oci.LoadbalancerService.Models.HealthCheckerDetails
							{
								Protocol = "EXAMPLE-protocol-Value",
								UrlPath = "EXAMPLE-urlPath-Value",
								Port = 52273,
								ReturnCode = 385,
								Retries = 617,
								TimeoutInMillis = 315042,
								IntervalInMillis = 342702,
								ResponseBodyRegex = "EXAMPLE-responseBodyRegex-Value",
								IsForcePlainText = true
							},
							SslConfiguration = new Oci.LoadbalancerService.Models.SSLConfigurationDetails
							{
								VerifyDepth = 654,
								VerifyPeerCertificate = true,
								HasSessionResumption = false,
								TrustedCertificateAuthorityIds = new List<string>
								{
									"EXAMPLE--Value"
								},
								CertificateIds = new List<string>
								{
									"EXAMPLE--Value"
								},
								CertificateName = "EXAMPLE-certificateName-Value",
								Protocols = new List<string>
								{
									"EXAMPLE--Value"
								},
								CipherSuiteName = "EXAMPLE-cipherSuiteName-Value",
								ServerOrderPreference = Oci.LoadbalancerService.Models.SSLConfigurationDetails.ServerOrderPreferenceEnum.Enabled
							},
							SessionPersistenceConfiguration = new Oci.LoadbalancerService.Models.SessionPersistenceConfigurationDetails
							{
								CookieName = "EXAMPLE-cookieName-Value",
								DisableFallback = false
							},
							LbCookieSessionPersistenceConfiguration = new Oci.LoadbalancerService.Models.LBCookieSessionPersistenceConfigurationDetails
							{
								CookieName = "EXAMPLE-cookieName-Value",
								DisableFallback = true,
								Domain = "EXAMPLE-domain-Value",
								Path = "EXAMPLE-path-Value",
								MaxAgeInSeconds = 403,
								IsSecure = true,
								IsHttpOnly = false
							}
						}
					}
				},
				NetworkSecurityGroupIds = new List<string>
				{
					"EXAMPLE--Value"
				},
				SubnetIds = new List<string>
				{
					"EXAMPLE--Value"
				},
				Certificates = new Dictionary<string, Oci.LoadbalancerService.Models.CertificateDetails>()
				{
					{
						"EXAMPLE_KEY_nrzWp", 
						new Oci.LoadbalancerService.Models.CertificateDetails
						{
							Passphrase = "EXAMPLE-passphrase-Value",
							PrivateKey = "EXAMPLE-privateKey-Value",
							PublicCertificate = "EXAMPLE-publicCertificate-Value",
							CaCertificate = "EXAMPLE-caCertificate-Value",
							CertificateName = "EXAMPLE-certificateName-Value"
						}
					}
				},
				SslCipherSuites = new Dictionary<string, Oci.LoadbalancerService.Models.SSLCipherSuiteDetails>()
				{
					{
						"EXAMPLE_KEY_ASMqq", 
						new Oci.LoadbalancerService.Models.SSLCipherSuiteDetails
						{
							Name = "EXAMPLE-name-Value",
							Ciphers = new List<string>
							{
								"EXAMPLE--Value"
							}
						}
					}
				},
				PathRouteSets = new Dictionary<string, Oci.LoadbalancerService.Models.PathRouteSetDetails>()
				{
					{
						"EXAMPLE_KEY_ojNBd", 
						new Oci.LoadbalancerService.Models.PathRouteSetDetails
						{
							PathRoutes = new List<Oci.LoadbalancerService.Models.PathRoute>
							{
								new Oci.LoadbalancerService.Models.PathRoute
								{
									Path = "EXAMPLE-path-Value",
									PathMatchType = new Oci.LoadbalancerService.Models.PathMatchType
									{
										MatchType = Oci.LoadbalancerService.Models.PathMatchType.MatchTypeEnum.PrefixMatch
									},
									BackendSetName = "EXAMPLE-backendSetName-Value"
								}
							}
						}
					}
				},
				FreeformTags = new Dictionary<string, string>()
				{
					{
						"EXAMPLE_KEY_uEYQx", 
						"EXAMPLE_VALUE_JSupsKKQVP0fAWUZwHx2"
					}
				},
				DefinedTags = new Dictionary<string, Dictionary<string, Object>>()
				{
					{
						"EXAMPLE_KEY_qfBCg", 
						new Dictionary<string, Object>()
						{
							{
								"EXAMPLE_KEY_gdvwp", 
								"EXAMPLE--Value"
							}
						}
					}
				},
				SecurityAttributes = new Dictionary<string, Dictionary<string, Object>>()
				{
					{
						"EXAMPLE_KEY_4r9RE", 
						new Dictionary<string, Object>()
						{
							{
								"EXAMPLE_KEY_EOaQq", 
								"EXAMPLE--Value"
							}
						}
					}
				},
				RuleSets = new Dictionary<string, Oci.LoadbalancerService.Models.RuleSetDetails>()
				{
					{
						"EXAMPLE_KEY_c89pB", 
						new Oci.LoadbalancerService.Models.RuleSetDetails
						{
							Items = new List<Oci.LoadbalancerService.Models.Rule>
							{
								new Oci.LoadbalancerService.Models.RedirectRule
								{
									ResponseCode = 303,
									Conditions = new List<Oci.LoadbalancerService.Models.RuleCondition>
									{
										new Oci.LoadbalancerService.Models.SourceVcnIdCondition
										{
											AttributeValue = "EXAMPLE-attributeValue-Value"
										}
									},
									RedirectUri = new Oci.LoadbalancerService.Models.RedirectUri
									{
										Protocol = "EXAMPLE-protocol-Value",
										Host = "EXAMPLE-host-Value",
										Port = 6684,
										Path = "EXAMPLE-path-Value",
										Query = "EXAMPLE-query-Value"
									}
								}
							}
						}
					}
				}
			};
			var createLoadBalancerRequest = new Oci.LoadbalancerService.Requests.CreateLoadBalancerRequest
			{
				CreateLoadBalancerDetails = createLoadBalancerDetails,
				OpcRequestId = "P2SYUTPVKDUITENVJPKU<unique_ID>",
				OpcRetryToken = "EXAMPLE-opcRetryToken-Value"
			};

            // Create a default authentication provider that uses the DEFAULT
            // profile in the configuration file.
            // Refer to <see href="https://docs.cloud.oracle.com/en-us/iaas/Content/API/Concepts/sdkconfig.htm#SDK_and_CLI_Configuration_File>the public documentation</see> on how to prepare a configuration file. 
            var provider = new ConfigFileAuthenticationDetailsProvider("DEFAULT");
            try
            {
                // Create a service client and send the request.
				using (var client = new LoadBalancerClient(provider, new ClientConfiguration()))
				{
					var response = await client.CreateLoadBalancer(createLoadBalancerRequest);
					// Retrieve value from the response.
					var versionValue = response.httpResponseMessage.Version;
				}
            }
            catch (Exception e)
            {
                Console.WriteLine($"CreateLoadBalancer Failed with {e.Message}");
                throw e;
            }
        }

    }
}

Was this article helpful?