public IDatabaseInstance CreateDatabase(DeputyBase databaseEngineVersion, string identification, string databaseName, double?port, string userName, string secretName, StorageType storageType, InstanceClass instanceClass, InstanceSize instanceSize, IVpc vpc, string securityId, string securityGroupId, string parameterGroupId = null, IRole[] roles = null, double?allocatedStorageGb = 5, RemovalPolicy removalPolicy = RemovalPolicy.DESTROY, bool deleteAutomatedBackups = false, int backupRetentionDays = 1, bool deletionProtection = false, SubnetType subnetType = SubnetType.PRIVATE_ISOLATED, string defaultSubnetDomainSeparator = ",", string subnets = "", bool multiAZEnabled = true, bool autoMinorVersionUpgrade = false, bool?storageEncrypted = true) { BasicDatabaseInfra(vpc, secretName, securityId, securityGroupId, subnetType, defaultSubnetDomainSeparator, subnets, out var securityGroup, out var secret, out var subnetSelection); var engine = GetInstanceEngine(databaseEngineVersion); return(new DatabaseInstance(Scope, identification, new DatabaseInstanceProps { Engine = engine, RemovalPolicy = removalPolicy, DeletionProtection = deletionProtection, Credentials = Credentials.FromPassword(userName, secret.SecretValue), StorageType = storageType, DatabaseName = databaseName, Port = port, VpcSubnets = subnetSelection, Vpc = vpc, SecurityGroups = new[] { securityGroup }, DeleteAutomatedBackups = deleteAutomatedBackups, BackupRetention = Duration.Days(backupRetentionDays), AllocatedStorage = allocatedStorageGb, InstanceType = InstanceType.Of(instanceClass, instanceSize), ParameterGroup = CreateClusterParameterGroup(parameterGroupId, engine, roles), MultiAz = multiAZEnabled, AutoMinorVersionUpgrade = autoMinorVersionUpgrade, StorageEncrypted = storageEncrypted })); }
public IDatabaseInstance CreateDatabaseSqlServer(DeputyBase databaseEngineVersion, string identification, string databaseName, string userName, string password, StorageType storageType, InstanceClass instanceClass, string instanceSize, IVpc vpc, ISecurityGroup security, string securityGroupId, string parameterGroupId = null, IRole[] roles = null, double?allocatedStorageGb = 5, RemovalPolicy removalPolicy = RemovalPolicy.DESTROY, bool deleteAutomatedBackups = false, int backupRetentionDays = 1, bool?deletionProtection = false, SubnetType subnetType = SubnetType.PRIVATE_ISOLATED, string defaultSubnetDomainSeparator = ",", string subnets = "", bool multiAZEnabled = true, bool?autoMinorVersionUpgrade = false, bool?storageEncrypted = true, string licenseOption = "LICENSE_INCLUDED", string edition = "ex") { BasicDatabaseInfraWithHardcodedPassword(vpc, subnetType, defaultSubnetDomainSeparator, subnets, out var subnetSelection); var engine = GetInstanceEngine(databaseEngineVersion, edition); return(new DatabaseInstance(Scope, identification, new DatabaseInstanceProps { Engine = engine, RemovalPolicy = removalPolicy, DeletionProtection = deletionProtection, Credentials = Credentials.FromPassword(userName, SecretValue.PlainText(password)), StorageType = storageType, DatabaseName = licenseOption == LicenseModel.LICENSE_INCLUDED.ToString() ? null : databaseName, VpcSubnets = subnetSelection, Vpc = vpc, SecurityGroups = new[] { security }, DeleteAutomatedBackups = deleteAutomatedBackups, BackupRetention = Duration.Days(backupRetentionDays), AllocatedStorage = allocatedStorageGb, InstanceType = InstanceType.Of(instanceClass, GetInstanceSize(instanceSize)), ParameterGroup = CreateClusterParameterGroup(parameterGroupId, engine, roles), MultiAz = multiAZEnabled, AutoMinorVersionUpgrade = autoMinorVersionUpgrade, StorageEncrypted = storageEncrypted, LicenseModel = GetLicenseModel(licenseOption) })); }
/// <summary> /// AwsCdkDatabaseHandler /// </summary> /// <param name="databaseEngineVersion"></param> /// <param name="identification"></param> /// <param name="clusterIdentifier"></param> /// <param name="instanceIdentifierBase"></param> /// <param name="databaseName"></param> /// <param name="port"></param> /// <param name="instances"></param> /// <param name="userName"></param> /// <param name="secretName"></param> /// <param name="vpc"></param> /// <param name="instanceClass"></param> /// <param name="instanceSize"></param> /// <param name="securityId"></param> /// <param name="securityGroupId"></param> /// <param name="parameterGroupId"></param> /// <param name="roles"></param> /// <param name="storageEncrypted"></param> /// <param name="subnetType"></param> /// <param name="defaultSubnetDomainSeparator"></param> /// <param name="subnets"></param> /// <param name="removalPolicy"></param> /// <param name="backupRetentionDays"></param> /// <param name="deletionProtection"></param> public IDatabaseCluster CreateDatabaseCluster(DeputyBase databaseEngineVersion, string identification, string clusterIdentifier, string instanceIdentifierBase, string databaseName, double?port, double?instances, string userName, string secretName, IVpc vpc, InstanceClass instanceClass, InstanceSize instanceSize, string securityId, string securityGroupId, string parameterGroupId = null, IRole[] roles = null, bool storageEncrypted = true, SubnetType subnetType = SubnetType.PRIVATE_ISOLATED, string defaultSubnetDomainSeparator = ",", string subnets = "", RemovalPolicy removalPolicy = RemovalPolicy.DESTROY, int backupRetentionDays = 1, bool deletionProtection = false) { BasicDatabaseInfra(vpc, secretName, securityId, securityGroupId, subnetType, defaultSubnetDomainSeparator, subnets, out var securityGroup, out var secret, out var subnetSelection); var engine = GetClusterEngine(databaseEngineVersion); return(new DatabaseCluster(Scope, identification, new DatabaseClusterProps { ClusterIdentifier = clusterIdentifier, InstanceIdentifierBase = instanceIdentifierBase, Engine = engine, RemovalPolicy = removalPolicy, DeletionProtection = deletionProtection, Port = port, InstanceProps = new Amazon.CDK.AWS.RDS.InstanceProps { InstanceType = InstanceType.Of(instanceClass, instanceSize), VpcSubnets = subnetSelection, Vpc = vpc, SecurityGroups = new[] { securityGroup } }, StorageEncrypted = storageEncrypted, Instances = instances, Credentials = Credentials.FromPassword(userName, secret.SecretValue), DefaultDatabaseName = databaseName, ParameterGroup = CreateClusterParameterGroup(parameterGroupId, engine, roles), Backup = new BackupProps { Retention = Duration.Days(backupRetentionDays) } })); }
public IDatabaseInstance CreateDatabase(DeputyBase databaseEngineVersion, string identification, string databaseName, double?port, string userName, ISecret passwordSecret, StorageType storageType, InstanceClass instanceClass, InstanceSize instanceSize, IVpc vpc, ISecurityGroup securityGroup, ISubnetGroup subnetGroup, IParameterGroup parameterGroup = null, double?allocatedStorageGb = 5, RemovalPolicy removalPolicy = RemovalPolicy.DESTROY, bool deleteAutomatedBackups = false, int backupRetentionDays = 1, bool deletionProtection = false, string[] logTypes = null, bool?storageEncrypted = null, bool?enableIamAuthentication = false, Duration enhancedMonitoringInterval = null, bool multiAZEnabled = true, bool autoMinorVersionUpgrade = false) { BasicDatabaseInfra(vpc); var engine = GetInstanceEngine(databaseEngineVersion); return(new DatabaseInstance(Scope, identification, new DatabaseInstanceProps { Engine = engine, RemovalPolicy = removalPolicy, DeletionProtection = deletionProtection, Credentials = Credentials.FromPassword(userName, passwordSecret.SecretValue), StorageType = storageType, DatabaseName = databaseName, Port = port, SubnetGroup = subnetGroup, Vpc = vpc, SecurityGroups = new[] { securityGroup }, DeleteAutomatedBackups = deleteAutomatedBackups, BackupRetention = Duration.Days(backupRetentionDays), AllocatedStorage = allocatedStorageGb, InstanceType = InstanceType.Of(instanceClass, instanceSize), ParameterGroup = parameterGroup, CloudwatchLogsExports = logTypes, StorageEncrypted = storageEncrypted, IamAuthentication = enableIamAuthentication, MonitoringInterval = enhancedMonitoringInterval, MultiAz = multiAZEnabled, AutoMinorVersionUpgrade = autoMinorVersionUpgrade })); }
public void AddNativeReference(ByRefValue reference, DeputyBase nativeReference) { if (_references.ContainsKey(reference.Value)) { throw new ArgumentException($"Cannot add reference for {reference.Value}: A reference with this name already exists", nameof(reference)); } _references[reference.Value] = nativeReference; }
public IParameterGroup CreateParameterGroup(DeputyBase databaseEngineVersion, string identification, string parameterGroupName, IDictionary <string, string> parameters = null) { var engine = GetInstanceEngine(databaseEngineVersion); return(new ParameterGroup(Scope, identification, new ParameterGroupProps { Engine = engine, Description = parameterGroupName, Parameters = parameters })); }
private static IInstanceEngine GetInstanceEngine(DeputyBase databaseEngineVersion, string edition = "ex") { var databaseType = databaseEngineVersion.GetType(); if (databaseType == typeof(MysqlEngineVersion)) { return(DatabaseInstanceEngine.Mysql(new MySqlInstanceEngineProps { Version = databaseEngineVersion as MysqlEngineVersion })); } if (databaseType == typeof(PostgresEngineVersion)) { return(DatabaseInstanceEngine.Postgres(new PostgresInstanceEngineProps() { Version = databaseEngineVersion as PostgresEngineVersion })); } if (databaseType == typeof(MariaDbEngineVersion)) { return(DatabaseInstanceEngine.MariaDb(new MariaDbInstanceEngineProps() { Version = databaseEngineVersion as MariaDbEngineVersion })); } if (databaseType == typeof(SqlServerEngineVersion)) { return(edition switch { "ee" => DatabaseInstanceEngine.SqlServerEe(new SqlServerEeInstanceEngineProps() { Version = databaseEngineVersion as SqlServerEngineVersion }), "se" => DatabaseInstanceEngine.SqlServerSe(new SqlServerSeInstanceEngineProps() { Version = databaseEngineVersion as SqlServerEngineVersion }), "ex" => DatabaseInstanceEngine.SqlServerEx(new SqlServerExInstanceEngineProps() { Version = databaseEngineVersion as SqlServerEngineVersion }), "web" => DatabaseInstanceEngine.SqlServerWeb(new SqlServerWebInstanceEngineProps() { Version = databaseEngineVersion as SqlServerEngineVersion }), _ => throw new ArgumentException("The edition of the SQL Server is not recognized."), });
static object InvokeMethod(InvokeRequest request, IReferenceMap referenceMap) { request = request ?? throw new ArgumentNullException(nameof(request)); DeputyBase deputy = referenceMap.GetOrCreateNativeReference(request.ObjectReference); MethodInfo methodInfo = ReflectionUtils.GetNativeMethod(deputy.GetType(), request.Method); if (methodInfo == null) { throw new InvalidOperationException($"Received callback for {deputy.GetType().Name}.{request.Method} getter, but this method does not exist"); } return(methodInfo.Invoke(deputy, request.Arguments)); }
static CallbackResult InvokeMethod(InvokeRequest request, IReferenceMap referenceMap) { request = request ?? throw new ArgumentNullException(nameof(request)); DeputyBase deputy = referenceMap.GetOrCreateNativeReference(request.ObjectReference); MethodInfo methodInfo = ReflectionUtils.GetNativeMethod(deputy.GetType(), request.Method); if (methodInfo == null) { throw new InvalidOperationException($"Received callback for {deputy.GetType().Name}.{request.Method} method, but this method does not exist"); } JsiiMethodAttribute attribute = methodInfo.GetCustomAttribute <JsiiMethodAttribute>(); var returnValue = methodInfo.Invoke(deputy, request.Arguments.Select(arg => FromKernel(arg, referenceMap)).ToArray()); return(attribute?.Returns != null ? new CallbackResult(attribute?.Returns, returnValue) : null); }
private IInstanceEngine GetInstanceEngine(DeputyBase databaseEngineVersion) { var databaseType = databaseEngineVersion.GetType(); if (databaseType == typeof(MysqlEngineVersion)) { return(DatabaseInstanceEngine.Mysql(new MySqlInstanceEngineProps { Version = databaseEngineVersion as MysqlEngineVersion })); } if (databaseType == typeof(PostgresEngineVersion)) { return(DatabaseInstanceEngine.Postgres(new PostgresInstanceEngineProps() { Version = databaseEngineVersion as PostgresEngineVersion })); } if (databaseType == typeof(MariaDbEngineVersion)) { return(DatabaseInstanceEngine.MariaDb(new MariaDbInstanceEngineProps() { Version = databaseEngineVersion as MariaDbEngineVersion })); } if (databaseType == typeof(SqlServerEngineVersion)) { return(DatabaseInstanceEngine.SqlServerEe(new SqlServerEeInstanceEngineProps() { Version = databaseEngineVersion as SqlServerEngineVersion })); } if (databaseType == typeof(OracleEngineVersion)) { return(DatabaseInstanceEngine.OracleEe(new OracleEeInstanceEngineProps() { Version = databaseEngineVersion as OracleEngineVersion })); } throw new ArgumentException("Not supported database option. Try: MysqlEngineVersion, PostgresEngineVersion, MariaDbEngineVersion, SqlServerEngineVersion and OracleEngineVersion"); }
static void InvokeSetter(SetRequest request, IReferenceMap referenceMap) { request = request ?? throw new ArgumentNullException(nameof(request)); DeputyBase deputy = referenceMap.GetOrCreateNativeReference(request.ObjectReference); PropertyInfo propertyInfo = ReflectionUtils.GetNativeProperty(deputy.GetType(), request.Property); if (propertyInfo == null) { throw new InvalidOperationException($"Received callback for {deputy.GetType().Name}.{request.Property} setter, but this property does not exist"); } MethodInfo methodInfo = propertyInfo.GetSetMethod(); if (methodInfo == null) { throw new InvalidOperationException($"Received callback for {deputy.GetType().Name}.{request.Property} setter, but this property does not have a setter"); } methodInfo.Invoke(deputy, new object[] { FromKernel(request.Value, referenceMap) }); }
private static IClusterEngine GetClusterEngine(DeputyBase databaseEngineVersion) { var databaseType = databaseEngineVersion.GetType(); if (databaseType == typeof(AuroraMysqlEngineVersion)) { return(DatabaseClusterEngine.AuroraMysql(new AuroraMysqlClusterEngineProps { Version = databaseEngineVersion as AuroraMysqlEngineVersion })); } if (databaseType == typeof(AuroraPostgresEngineVersion)) { return(DatabaseClusterEngine.AuroraPostgres(new AuroraPostgresClusterEngineProps { Version = databaseEngineVersion as AuroraPostgresEngineVersion })); } throw new ArgumentException("Not supported database cluster option. Try AuroraMysqlEngineVersion or AuroraPostgresEngineVersion"); }
static CallbackResult InvokeGetter(GetRequest request, IReferenceMap referenceMap) { request = request ?? throw new ArgumentNullException(nameof(request)); DeputyBase deputy = referenceMap.GetOrCreateNativeReference(request.ObjectReference); PropertyInfo propertyInfo = ReflectionUtils.GetNativeProperty(deputy.GetType(), request.Property); if (propertyInfo == null) { throw new InvalidOperationException($"Received callback for {deputy.GetType().Name}.{request.Property} getter, but this property does not exist"); } JsiiPropertyAttribute attribute = propertyInfo.GetCustomAttribute <JsiiPropertyAttribute>(); MethodInfo methodInfo = propertyInfo.GetGetMethod(); if (methodInfo == null) { throw new InvalidOperationException($"Received callback for {deputy.GetType().Name}.{request.Property} getter, but this property does not have a getter"); } return(new CallbackResult(attribute, methodInfo.Invoke(deputy, new object[] { }))); }