Skip to content
Snippets Groups Projects

Release: Sprint/2022 15 :robot:

Merged Petar Hristov requested to merge dev into main
9 files
+ 582
5
Compare changes
  • Side-by-side
  • Inline
Files
9
using Amazon.S3;
using Coscine.Database.DataModel;
using Coscine.Database.Models;
using Coscine.ECSManager;
using Coscine.ResourceTypes;
using Coscine.ResourceTypes.Base;
using Coscine.ResourceTypes.RdsS3;
using Coscine.ResourceTypes.RdsWorm;
using ResourceTypes.Rds;
namespace IPConnectivityChecker.Implementations
{
public class ECSChecker
{
public async Task<bool> CheckECS()
{
var resourceTypeModel = new ResourceTypeModel();
var resourceTypes = resourceTypeModel.GetAll();
var working = true;
foreach (var resourceType in resourceTypes)
{
if (resourceType.Type.Contains("rds"))
{
Console.WriteLine("Checking resourcetype with type '" + resourceType.Type + "' and specific type '" + resourceType.SpecificType + "'!");
BaseResourceType resourceTypeDefinition;
try
{
resourceTypeDefinition = ResourceTypeFactory.Instance.GetResourceType(resourceType.Type, resourceType.SpecificType);
}
catch (Exception e)
{
Console.WriteLine("Error on resourcetype with type '" + resourceType.Type + "' and specific type '" + resourceType.SpecificType + "'!");
Console.WriteLine(e);
working = false;
continue;
}
if (resourceType.Type == "rds")
{
var rdsResourceTypeDefinition = (RdsResourceType)resourceTypeDefinition;
var rdsResourceTypeConfiguration = rdsResourceTypeDefinition.RdsResourceTypeConfiguration;
working = working && await S3ClientCheck(rdsResourceTypeConfiguration.Endpoint, rdsResourceTypeConfiguration.AccessKey, rdsResourceTypeConfiguration.SecretKey, resourceType);
var ecsManager = new EcsManager
{
EcsManagerConfiguration = rdsResourceTypeConfiguration.EcsManagerConfiguration
};
working = working && await LoginToECS(ecsManager.EcsManagerConfiguration, resourceType);
}
else if (resourceType.Type == "rdss3")
{
var rdss3ResourceTypeDefinition = (RdsS3ResourceType)resourceTypeDefinition;
var rdsS3ResourceTypeConfiguration = rdss3ResourceTypeDefinition.RdsS3ResourceTypeConfiguration;
working = working && await S3ClientCheck(rdsS3ResourceTypeConfiguration.Endpoint, rdsS3ResourceTypeConfiguration.AccessKey, rdsS3ResourceTypeConfiguration.SecretKey, resourceType);
var rdsS3EcsManager = new EcsManager
{
EcsManagerConfiguration = rdsS3ResourceTypeConfiguration.RdsS3EcsManagerConfiguration
};
working = working && await LoginToECS(rdsS3EcsManager.EcsManagerConfiguration, resourceType);
var userEcsManager = new EcsManager
{
EcsManagerConfiguration = rdsS3ResourceTypeConfiguration.UserEcsManagerConfiguration
};
working = working && await LoginToECS(userEcsManager.EcsManagerConfiguration, resourceType);
}
else if (resourceType.Type == "rdss3worm")
{
var rdss3wormResourceTypeDefinition = (RdsS3WormResourceType)resourceTypeDefinition;
var rdsS3WormResourceTypeConfiguration = rdss3wormResourceTypeDefinition.RdsS3WormResourceTypeConfiguration;
working = working && await S3ClientCheck(rdsS3WormResourceTypeConfiguration.Endpoint, rdsS3WormResourceTypeConfiguration.AccessKey, rdsS3WormResourceTypeConfiguration.SecretKey, resourceType);
var rdsS3EcsManager = new EcsManager
{
EcsManagerConfiguration = rdsS3WormResourceTypeConfiguration.RdsS3EcsManagerConfiguration
};
working = working && await LoginToECS(rdsS3EcsManager.EcsManagerConfiguration, resourceType);
var userEcsManager = new EcsManager
{
EcsManagerConfiguration = rdsS3WormResourceTypeConfiguration.UserEcsManagerConfiguration
};
working = working && await LoginToECS(userEcsManager.EcsManagerConfiguration, resourceType);
}
Console.WriteLine();
}
}
return working;
}
private async Task<bool> S3ClientCheck(string endpoint, string accessKey, string secretKey, ResourceType resourceType)
{
try
{
var amazonS3Config = new AmazonS3Config
{
ServiceURL = endpoint,
ForcePathStyle = true
};
using var _s3client = new AmazonS3Client(accessKey, secretKey, amazonS3Config);
await _s3client.ListBucketsAsync();
}
catch (Exception e)
{
Console.WriteLine("S3 Client Check: FAILED for resourcetype with type '" + resourceType.Type + "' and specific type '" + resourceType.SpecificType + "'!");
Console.WriteLine(e);
return false;
}
return true;
}
private async Task<bool> LoginToECS(EcsManagerConfiguration EcsManagerConfiguration, ResourceType resourceType)
{
try
{
// create new management client USING NAMESPACE ADMINISTRATOR to obtain token
using var client = new CoscineECSManagementClient(EcsManagerConfiguration.NamespaceAdminName, EcsManagerConfiguration.NamespaceAdminPassword, EcsManagerConfiguration.ManagerApiEndpoint);
// authenticate
await client.Authenticate();
// log out
await client.LogOut();
}
catch (Exception e)
{
Console.WriteLine("Login Check: FAILED for resourcetype with type '" + resourceType.Type + "' and specific type '" + resourceType.SpecificType + "'!");
Console.WriteLine(e);
return false;
}
return true;
}
}
}
Loading