Пример #1
0
        // TODO : make sovereign cloud available
        public static Task <String> GetContainerSettings(int icm, ShortRDFERoleInstance dep)
        {
            Log.Information("Calling GenevaAction GetContainerSettings with ContainerId: {0}", dep.ContainerID);
            var param = new GenevaOperations.GetContainerSettings
            {
                smefabrichostparam  = dep.Fabric,
                smecontaineridparam = dep.ContainerID.ToString()
            };
            var actionParam = Utility.JsonToObject <Dictionary <string, string> >(Utility.ObjectToJson(param));

            return(new GenevaAction(icm, Constants.GetContainerSettingsExtensionName, Constants.GetContainerSettingsOperatorName, actionParam).GetOperationResultOutputAsync(icm));
        }
Пример #2
0
        private void ExecuteAllActionsForPaaS(RDFEDeployment dep)
        {
            var instance = dep.RoleInstances.Where(x => String.Equals(x.RoleInstanceName, VMName, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

            if (instance?.RoleInstanceName == null)
            {
                instance = dep.RoleInstances.Where(x => String.Equals(x.RoleInstanceName, TryConvertInstanceNameToVMName(this.VMName), StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
            }
            if (instance?.RoleInstanceName == null)
            {
                instance = dep.RoleInstances.Where(x => String.Equals(x.ID.ToString(), VMName)).FirstOrDefault();
            }

            GlobalInfo = new ShortRDFERoleInstance
            {
                Icm            = Id,
                Fabric         = dep.FabricGeoId,
                DeploymentId   = dep.Id,
                DeploymentName = dep.Name,
                ContainerID    = instance.ID,
                InstanceName   = instance.RoleInstanceName
            };

            Task <string> modelTask = null;

            SALsA.GetInstance(Id).TaskManager.AddTask(
                BlobStorageUtility.SaveAndSendBlobTask(Constants.AnalyzerVMScreenshotOutputFilename, GenevaActions.GetClassicVMConsoleScreenshot(Id, GlobalInfo), Id),
                BlobStorageUtility.SaveAndSendBlobTask(Constants.AnalyzerNodeDiagnosticsFilename, GenevaActions.GetNodeDiagnosticsFilesByDeploymentIdorVMName(Id, GlobalInfo), Id),
                BlobStorageUtility.SaveAndSendBlobTask(Constants.AnalyzerContainerSettings, modelTask = GenevaActions.GetContainerSettings(Id, GlobalInfo), Id)
                );

            try
            {
                var model = Utility.JsonToObject <Json2Class.ContainerSettings>(modelTask.Result);
                GlobalInfo.NodeId = new Guid(model.NodeId);
            }
            catch (Exception ex)
            {
                Log.Critical("Failed to populate NodeId");
                Log.Exception(ex);
            }
            finally
            {
                SALsA.GetInstance(Id)?.ICM.QueueICMDiscussion(GlobalInfo.ToString());
            }
        }
        // TODO : make sovereign cloud available
        public static Task <Image> GetClassicVMConsoleScreenshot(int icm, ShortRDFERoleInstance instance)
        {
            Log.Information("Calling GenevaAction GetARMSubscription with params {0}", instance);
            var param = new GenevaOperations.GetClassicVMScreenshot
            {
                smefabrichostparam     = instance.Fabric,
                smescreenshotsizeparam = Constants.GetClassicVMClassicScreenshotSize,
                smetenantnameparam     = instance.DeploymentId,
                smevmnameparam         = instance.InstanceName
            };
            var actionParam = Utility.JsonToObject <Dictionary <string, string> >(Utility.ObjectToJson(param));
            var task        = new GenevaAction(icm, Constants.GetClassicVMClassicScreenshotExtensionName, Constants.GetClassicVMClassicScreenshotOperatorName, actionParam).GetOperationFileOutputAsync(icm);

            // VMConsoleSerialLog contain only one file, compressed in a zip.
            return(Task.Run(() => (
                                task.Result != null ? Image.FromStream(Utility.ExtractZip(task.Result).Entries.Where(x => x.Name != "").First().Open()) : null
                                )));
        }
Пример #4
0
        public Analyzer(int Id, object manualRun)
        {
            this.IsCustomRun = true;
            this.Id          = Id;
            StartTime        = SALsA.GetInstance(Id).ICM.CurrentICM.CreateDate;
            Log.Information("Received ManualRun order type {0} with param {1} : ",
                            manualRun.GetType(), Utility.ObjectToJson(manualRun));
            if (manualRun.GetType() == typeof(ManualRun_ICM))
            {
                ManualRun_ICM manualArm = (ManualRun_ICM)manualRun;

                SubscriptionId    = manualArm.SubscriptionID;
                ResourceGroupName = manualArm.ResourceGroupName;
                VMName            = manualArm.VMName;

                AnalyzerInternal();
            }
            else if (manualRun.GetType() == typeof(ManualRun_IID))
            {
                ManualRun_IID manualIID = (ManualRun_IID)manualRun;

                SubscriptionId    = manualIID.SubscriptionID;
                ResourceGroupName = manualIID.ResourceGroupName;
                VMName            = manualIID.VMName;

                ARMDeployment dep        = null;
                int           instanceId = -1;
                if (String.IsNullOrEmpty(manualIID.Region))
                {
                    Log.Information("Calling automatic ARM VMdetection. No Region parameter provided.");
                    ARMSubscription arm = AnalyzeARMSubscription(SubscriptionId, this.ResourceGroupName);
                    dep        = AnalyzeARMDeployment(arm);
                    instanceId = TryConvertInstanceNameToInstanceId(this.VMName);
                }
                else
                {
                    dep                = new ARMDeployment();
                    dep.Name           = manualIID.VMName;
                    dep.Subscriptions  = manualIID.SubscriptionID.ToString();
                    dep.ResourceGroups = manualIID.ResourceGroupName;
                    dep.Location       = manualIID.Region;
                    instanceId         = manualIID.Instance;
                }
                if (instanceId < 0)
                {
                    Log.Information("No Instance ID detected. Assuming this is a normal single IaaS VM");
                    SALsA.GetInstance(Id).TaskManager.AddTask(
                        BlobStorageUtility.SaveAndSendBlobTask(
                            Constants.AnalyzerInspectIaaSDiskOutputFilename,
                            GenevaActions.InspectIaaSDiskForARMVM(Id, dep), Id));
                }
                else
                {
                    Log.Information("No Instance ID detected. Assuming this is a normal single IaaS VM");
                    SALsA.GetInstance(Id).TaskManager.AddTask(
                        BlobStorageUtility.SaveAndSendBlobTask(
                            Constants.AnalyzerInspectIaaSDiskOutputFilename,
                            GenevaActions.InspectIaaSDiskForARMVM(Id, dep, instanceId), Id));
                }
            }
            else if (manualRun.GetType() == typeof(ManualRun_RDFE_Fabric))
            {
                var rdfe   = (ManualRun_RDFE_Fabric)manualRun;
                var vmInfo = new ShortRDFERoleInstance
                {
                    ContainerID = new Guid(rdfe.ContainerID),
                    Fabric      = rdfe.FabricCluster,
                    NodeId      = new Guid(rdfe.NodeId)
                };
                BlobStorageUtility.SaveAndSendBlobTask(Constants.AnalyzerNodeDiagnosticsFilename, GenevaActions.GetNodeDiagnosticsFilesByContainerId(Id, vmInfo), Id).Wait();
            }
            else if (manualRun.GetType() == typeof(ManualRun_RDFE_Tenant))
            {
                var rdfe   = (ManualRun_RDFE_Tenant)manualRun;
                var vmInfo = new ShortRDFERoleInstance
                {
                    Fabric       = rdfe.FabricCluster,
                    DeploymentId = rdfe.DeploymentID,
                    InstanceName = rdfe.RoleInstanceName
                };
                BlobStorageUtility.SaveAndSendBlobTask(Constants.AnalyzerNodeDiagnosticsFilename, GenevaActions.GetNodeDiagnosticsFilesByDeploymentIdorVMName(Id, vmInfo), Id).Wait();
            }
        }
Пример #5
0
        public static Task <ZipArchiveEntry> GetNodeDiagnosticsFilesByContainerId(int icm, ShortRDFERoleInstance instance)
        {
            Log.Information("Calling GenevaAction GetNodeDiagnostics with params {0}", instance);
            var param = new GenevaOperations.GetNodeDiagnosticsFiles
            {
                smefabrichostparam                 = instance.Fabric,
                smenodeidparam                     = instance.NodeId.ToString(),
                smenodediagnosticstypeparam        = "",
                smenodediagnosticstagparam         = Constants.GetNodeDiagnosticsParam,
                smecontaineriddiagnosticsfileparam = instance.ContainerID.ToString()
            };
            var actionParam = Utility.JsonToObject <Dictionary <string, string> >(Utility.ObjectToJson(param));
            var task        = new GenevaAction(icm, Constants.GetNodeDiagnosticsExtensionName, Constants.GetNodeDiagnosticsOperatorNameFiles, actionParam).GetOperationFileOutputAsync(icm);

            // VMConsoleSerialLog contain only one file, compressed in a zip.
            return(Task.Run(() => (
                                task.Result != null ? Utility.ExtractZip(task.Result).Entries.Where(x => x.Name != "").First() : null
                                )));
        }