diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2025-01-22 05:37:51 +0200 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2025-01-22 05:37:51 +0200 |
| commit | f0dc1fb8ce29ee676a9a6ca9414756a852e31e26 (patch) | |
| tree | 7f46681916a051983dc301854fdb94cc34797bf0 /Software | |
| parent | 97904f88f3949339c713286b592ad156baa8d41f (diff) | |
| download | Tango-f0dc1fb8ce29ee676a9a6ca9414756a852e31e26.tar.gz Tango-f0dc1fb8ce29ee676a9a6ca9414756a852e31e26.zip | |
X1 CI/CD Support.
Diffstat (limited to 'Software')
12 files changed, 164 insertions, 258 deletions
diff --git a/Software/Graphics/X1/Machine1_M.png b/Software/Graphics/X1/Machine1_M.png Binary files differnew file mode 100644 index 000000000..9223163d1 --- /dev/null +++ b/Software/Graphics/X1/Machine1_M.png diff --git a/Software/Graphics/X1/Machine1_S.png b/Software/Graphics/X1/Machine1_S.png Binary files differnew file mode 100644 index 000000000..02b4bce49 --- /dev/null +++ b/Software/Graphics/X1/Machine1_S.png diff --git a/Software/Graphics/X1/Machine2_S.png b/Software/Graphics/X1/Machine2_S.png Binary files differnew file mode 100644 index 000000000..9450f6f19 --- /dev/null +++ b/Software/Graphics/X1/Machine2_S.png diff --git a/Software/Graphics/X1/Machine_M.png b/Software/Graphics/X1/Machine_M.png Binary files differnew file mode 100644 index 000000000..5a217aa7e --- /dev/null +++ b/Software/Graphics/X1/Machine_M.png diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Controls/WebAppPropertiesControl.xaml b/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Controls/WebAppPropertiesControl.xaml index 2bb430014..71a157412 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Controls/WebAppPropertiesControl.xaml +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Controls/WebAppPropertiesControl.xaml @@ -56,10 +56,10 @@ <TextBlock FontWeight="SemiBold">Machine Studio Version:</TextBlock> <TextBlock Text="{Binding ElementName=control,Path=MachineStudioVersion.Version}"></TextBlock> - <TextBlock FontWeight="SemiBold">PPC Application Version:</TextBlock> + <TextBlock FontWeight="SemiBold">TS-1800 Application Version:</TextBlock> <TextBlock Text="{Binding ElementName=control,Path=TangoVersion.VersionAndTag}"></TextBlock> - <TextBlock FontWeight="SemiBold">PPC Firmware Version::</TextBlock> + <TextBlock FontWeight="SemiBold">TS-1800 Firmware Version::</TextBlock> <TextBlock Text="{Binding ElementName=control,Path=TangoVersion.FirmwareVersion}"></TextBlock> <TextBlock FontWeight="SemiBold">Twine X4 Application Version:</TextBlock> @@ -68,6 +68,12 @@ <TextBlock FontWeight="SemiBold">Twine X4 Firmware Version::</TextBlock> <TextBlock Text="{Binding ElementName=control,Path=EurekaVersion.FirmwareVersion}"></TextBlock> + <TextBlock FontWeight="SemiBold">Twine X1 Application Version:</TextBlock> + <TextBlock Text="{Binding ElementName=control,Path=X1Version.VersionAndTag}"></TextBlock> + + <TextBlock FontWeight="SemiBold">Twine X1 Firmware Version::</TextBlock> + <TextBlock Text="{Binding ElementName=control,Path=X1Version.FirmwareVersion}"></TextBlock> + <TextBlock FontWeight="SemiBold">Tango FSE Version:</TextBlock> <TextBlock Text="{Binding ElementName=control,Path=FseVersion.Version}"></TextBlock> diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Controls/WebAppPropertiesControl.xaml.cs b/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Controls/WebAppPropertiesControl.xaml.cs index 9dcfebad9..70561311f 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Controls/WebAppPropertiesControl.xaml.cs +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Controls/WebAppPropertiesControl.xaml.cs @@ -50,6 +50,13 @@ namespace Tango.AzureUtils.UI.Controls public static readonly DependencyProperty EurekaVersionTagProperty = DependencyProperty.Register("EurekaVersionTag", typeof(String), typeof(WebAppPropertiesControl), new PropertyMetadata(null, (d, e) => (d as WebAppPropertiesControl).UpdateControl())); + public String X1VersionTag + { + get { return (String)GetValue(X1VersionTagProperty); } + set { SetValue(X1VersionTagProperty, value); } + } + public static readonly DependencyProperty X1VersionTagProperty = + DependencyProperty.Register("X1VersionTag", typeof(String), typeof(WebAppPropertiesControl), new PropertyMetadata(null, (d, e) => (d as WebAppPropertiesControl).UpdateControl())); public MachineServiceSettings Settings { @@ -83,6 +90,18 @@ namespace Tango.AzureUtils.UI.Controls public static readonly DependencyProperty EurekaVersionProperty = DependencyProperty.Register("EurekaVersion", typeof(TangoVersion), typeof(WebAppPropertiesControl), new PropertyMetadata(null)); + + + public TangoVersion X1Version + { + get { return (TangoVersion)GetValue(X1VersionProperty); } + set { SetValue(X1VersionProperty, value); } + } + public static readonly DependencyProperty X1VersionProperty = + DependencyProperty.Register("X1Version", typeof(TangoVersion), typeof(WebAppPropertiesControl), new PropertyMetadata(null)); + + + public FseVersion FseVersion { get { return (FseVersion)GetValue(FseVersionProperty); } @@ -160,8 +179,9 @@ namespace Tango.AzureUtils.UI.Controls var azure = await AzureUtilsAuthenticationFactory.AuthenticateOrGetAsync(); var databaseManager = new DatabaseManager(azure); - TangoVersion = await databaseManager.GetLatestPPCVersion(app, PPCVersionTag); - EurekaVersion = await databaseManager.GetLatestEurekaVersion(app, EurekaVersionTag); + TangoVersion = await databaseManager.GetLatestTangoVersion(app, MachineTypes.TS1800, PPCVersionTag); + EurekaVersion = await databaseManager.GetLatestTangoVersion(app, MachineTypes.Eureka, EurekaVersionTag); + X1Version = await databaseManager.GetLatestTangoVersion(app, MachineTypes.X1, X1VersionTag); MachineStudioVersion = await databaseManager.GetLatestMachineStudioVersion(app); FseVersion = await databaseManager.GetLatestFSEVersion(app, FSEBuildVariants.FSE); TwineRSMVersion = await databaseManager.GetLatestFSEVersion(app, FSEBuildVariants.TwineRSM); diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Views/EnvironmentUpgradeView.xaml b/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Views/EnvironmentUpgradeView.xaml index 54a3e4876..fe00ce9b1 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Views/EnvironmentUpgradeView.xaml +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils.UI/Views/EnvironmentUpgradeView.xaml @@ -32,7 +32,7 @@ </ComboBox.ItemTemplate> </ComboBox> - <localControls:WebAppPropertiesControl VerticalAlignment="Top" Margin="0 20 0 0" PPCVersionTag="{Binding Config.PPCVersionTag}" EurekaVersionTag="{Binding Config.EurekaVersionTag}" WebApp="{Binding SelectedSourceApp}" /> + <localControls:WebAppPropertiesControl VerticalAlignment="Top" Margin="0 20 0 0" PPCVersionTag="{Binding Config.PPCVersionTag}" EurekaVersionTag="{Binding Config.EurekaVersionTag}" X1VersionTag="{Binding Config.X1VersionTag}" WebApp="{Binding SelectedSourceApp}" /> </DockPanel> </GroupBox> </Grid> @@ -45,10 +45,12 @@ <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.SynchronizeDatabaseData}" >Upgrade Database Static Collections</CheckBox> <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.CopyMachineStudioStorageBlobs}" >Upgrade Machine Studio Blob Storage</CheckBox> <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.UpgradeMachineStudioDatabaseVersion}" >Upgrade Machine Studio Database Version</CheckBox> - <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.CopyPPCStorageBlobs}" >Upgrade PPC Blob Storage</CheckBox> - <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.UpgradePPCDatabaseVersion}" >Upgrade PPC Database Version</CheckBox> + <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.CopyPPCStorageBlobs}" >Upgrade TS-1800 Blob Storage</CheckBox> + <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.UpgradePPCDatabaseVersion}" >Upgrade TS-1800 Database Version</CheckBox> <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.CopyEurekaStorageBlobs}" >Upgrade Twine X4 Blob Storage</CheckBox> <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.UpgradeEurekaDatabaseVersion}" >Upgrade Twine X4 Database Version</CheckBox> + <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.CopyX1StorageBlobs}" >Upgrade Twine X1 Blob Storage</CheckBox> + <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.UpgradeX1DatabaseVersion}" >Upgrade Twine X1 Database Version</CheckBox> <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.CopyFSEStorageBlobs}" >Upgrade FSE Blob Storage</CheckBox> <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.UpgradeFSEDatabaseVersion}" >Upgrade FSE Database Version</CheckBox> <CheckBox Click="OnConfigChanged" Margin="0 5 0 0" IsChecked="{Binding Config.CopyTwineRSMStorageBlobs}" >Upgrade Twine Studio Blob Storage</CheckBox> @@ -63,6 +65,10 @@ <TextBlock FontSize="10">Twine X4 Version Tag</TextBlock> <TextBox x:Name="txtEurekaVersionTag" Text="{Binding Config.EurekaVersionTag,Mode=TwoWay,Delay=500,UpdateSourceTrigger=PropertyChanged}"></TextBox> </StackPanel> + <StackPanel Margin="0 10 0 0"> + <TextBlock FontSize="10">Twine X1 Version Tag</TextBlock> + <TextBox x:Name="txtX1VersionTag" Text="{Binding Config.X1VersionTag,Mode=TwoWay,Delay=500,UpdateSourceTrigger=PropertyChanged}"></TextBox> + </StackPanel> </StackPanel> </GroupBox> @@ -86,7 +92,7 @@ </ComboBox.ItemTemplate> </ComboBox> - <localControls:WebAppPropertiesControl VerticalAlignment="Top" Margin="0 20 0 0" PPCVersionTag="{Binding Config.PPCVersionTag}" EurekaVersionTag="{Binding Config.EurekaVersionTag}" WebApp="{Binding SelectedTargetApp}" /> + <localControls:WebAppPropertiesControl VerticalAlignment="Top" Margin="0 20 0 0" PPCVersionTag="{Binding Config.PPCVersionTag}" EurekaVersionTag="{Binding Config.EurekaVersionTag}" X1VersionTag="{Binding Config.X1VersionTag}" WebApp="{Binding SelectedTargetApp}" /> </DockPanel> </GroupBox> </Grid> diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils/Database/DatabaseManager.cs b/Software/Visual_Studio/Azure/Tango.AzureUtils/Database/DatabaseManager.cs index 190b3ed62..95d92d1c8 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils/Database/DatabaseManager.cs +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils/Database/DatabaseManager.cs @@ -229,36 +229,19 @@ namespace Tango.AzureUtils.Database } } - public async Task UpgradePPCVersion(IWebAppBase sourceApp, IWebAppBase targetApp, String versionTag) + public async Task UpgradeTangoVersion(IWebAppBase sourceApp, IWebAppBase targetApp, MachineTypes machineType, String versionTag) { - var latestPPCVersion = await GetLatestPPCVersion(sourceApp, versionTag); + var latestTangoVersion = await GetLatestTangoVersion(sourceApp, machineType, versionTag); - latestPPCVersion.MachineVersion = null; + latestTangoVersion.MachineVersion = null; var targetDataSource = (await targetApp.GetMachineServiceSettingsAsync()).ToDataSource(); - OnProgress(AzureUtilsStage.Database, $"Adding PPC database entry for version '{latestPPCVersion.VersionAndTag}'..."); + OnProgress(AzureUtilsStage.Database, $"Adding {machineType.ToDescription()} database entry for version '{latestTangoVersion.VersionAndTag}'..."); using (var db = ObservablesContext.CreateDefault(targetDataSource)) { - db.TangoVersions.Add(latestPPCVersion); - await db.SaveChangesAsync(); - } - } - - public async Task UpgradeEurekaVersion(IWebAppBase sourceApp, IWebAppBase targetApp, String versionTag) - { - var latestEurekaVersion = await GetLatestEurekaVersion(sourceApp, versionTag); - - latestEurekaVersion.MachineVersion = null; - - var targetDataSource = (await targetApp.GetMachineServiceSettingsAsync()).ToDataSource(); - - OnProgress(AzureUtilsStage.Database, $"Adding Twine X4 database entry for version '{latestEurekaVersion.VersionAndTag}'..."); - - using (var db = ObservablesContext.CreateDefault(targetDataSource)) - { - db.TangoVersions.Add(latestEurekaVersion); + db.TangoVersions.Add(latestTangoVersion); await db.SaveChangesAsync(); } } @@ -293,16 +276,16 @@ namespace Tango.AzureUtils.Database } } - public async Task DowngradePPCVersion(IWebAppBase app, String versionTag) + public async Task DowngradeTangoVersion(IWebAppBase app, MachineTypes machineType, String versionTag) { - var latestPPCVersion = await GetLatestPPCVersion(app, versionTag); + var latestTangoVersion = await GetLatestTangoVersion(app, machineType, versionTag); var dataSource = (await app.GetMachineServiceSettingsAsync()).ToDataSource(); - OnProgress(AzureUtilsStage.Database, $"Removing PPC database entry for version '{latestPPCVersion.VersionAndTag}'..."); + OnProgress(AzureUtilsStage.Database, $"Removing {machineType.ToDescription()} database entry for version '{latestTangoVersion.VersionAndTag}'..."); using (var db = ObservablesContext.CreateDefault(dataSource)) { - var latest = await db.TangoVersions.SingleOrDefaultAsync(x => x.Guid == latestPPCVersion.Guid); + var latest = await db.TangoVersions.SingleOrDefaultAsync(x => x.Guid == latestTangoVersion.Guid); db.TangoVersions.Remove(latest); await db.SaveChangesAsync(); } @@ -340,9 +323,9 @@ namespace Tango.AzureUtils.Database } } - public async Task<TangoVersion> GetLatestPPCVersion(IWebAppBase app, String versionTag) + public async Task<TangoVersion> GetLatestTangoVersion(IWebAppBase app, MachineTypes machineType, String versionTag) { - OnProgress(AzureUtilsStage.Database, $"Getting latest PPC version on '{app.Name}'..."); + OnProgress(AzureUtilsStage.Database, $"Getting latest {machineType.ToDescription()} version on '{app.Name}'..."); MachineServiceSettings settings = null; @@ -361,50 +344,16 @@ namespace Tango.AzureUtils.Database using (var db = ObservablesContext.CreateDefault(dataSource)) { - var ts_version_guid = (await db.MachineVersions.ToListAsync()).SingleOrDefault(x => x.MachineType == MachineTypes.TS1800).Guid; + var machine_version_guid = (await db.MachineVersions.ToListAsync()).SingleOrDefault(x => x.MachineType == machineType).Guid; var versions = await db.TangoVersions.Where(x => x.Tag == versionTag).ToListAsync(); - versions = versions.Where(x => x.MachineVersionGuid == ts_version_guid).ToList(); + versions = versions.Where(x => x.MachineVersionGuid == machine_version_guid).ToList(); var latest_version = versions.OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); return latest_version; } } catch (Exception ex) { - throw new InvalidDataException($"Could not retrieve '{app.Name}' latest PPC version from database.", ex); - } - } - - public async Task<TangoVersion> GetLatestEurekaVersion(IWebAppBase app, String versionTag) - { - OnProgress(AzureUtilsStage.Database, $"Getting latest Twine X4 version on '{app.Name}'..."); - - MachineServiceSettings settings = null; - - try - { - settings = await app.GetMachineServiceSettingsAsync(); - } - catch (Exception ex) - { - throw new ArgumentException("Could not fetch machine service settings. Please check that all settings are available.", ex); - } - - try - { - DataSource dataSource = settings.ToDataSource(); - - using (var db = ObservablesContext.CreateDefault(dataSource)) - { - var eureka_version_guid = (await db.MachineVersions.ToListAsync()).SingleOrDefault(x => x.MachineType == MachineTypes.Eureka).Guid; - var versions = await db.TangoVersions.Where(x => x.Tag == versionTag).ToListAsync(); - versions = versions.Where(x => x.MachineVersionGuid == eureka_version_guid).ToList(); - var latest_version = versions.OrderByDescending(x => Version.Parse(x.Version)).FirstOrDefault(); - return latest_version; - } - } - catch (Exception ex) - { - throw new InvalidDataException($"Could not retrieve '{app.Name}' latest Twine X4 version from database.", ex); + throw new InvalidDataException($"Could not retrieve '{app.Name}' latest {machineType.ToDescription()} version from database.", ex); } } @@ -464,51 +413,27 @@ namespace Tango.AzureUtils.Database } } - public async Task ValidatePPCDatabaseUpgrade(IWebAppBase sourceApp, IWebAppBase targetApp, String versionTag) - { - OnProgress(AzureUtilsStage.Validating, "Validating PPC database upgrade..."); - - var sourceSettings = await sourceApp.GetMachineServiceSettingsAsync(); - var targetSettings = await targetApp.GetMachineServiceSettingsAsync(); - - var latestSourcePPCVersion = await GetLatestPPCVersion(sourceApp, versionTag); - - //Check if there is any source PPC version. - if (latestSourcePPCVersion == null) - { - throw new ValidationException("Could not locate a PPC version entry on the source database."); - } - - var latestTargetPPCVersion = await GetLatestPPCVersion(targetApp, versionTag); - - //Check target latest PPC version is older if there is any. - if (latestTargetPPCVersion != null && Version.Parse(latestSourcePPCVersion.Version) <= Version.Parse(latestTargetPPCVersion.Version)) - { - throw new ValidationException($"PPC source version is '{latestSourcePPCVersion.VersionAndTag}' while target version is '{latestTargetPPCVersion.VersionAndTag}'."); - } - } - - public async Task ValidateEurekaDatabaseUpgrade(IWebAppBase sourceApp, IWebAppBase targetApp, String versionTag) + public async Task ValidateTangoDatabaseUpgrade(IWebAppBase sourceApp, IWebAppBase targetApp, MachineTypes machineType, String versionTag) { - OnProgress(AzureUtilsStage.Validating, "Validating Twine X4 database upgrade..."); + OnProgress(AzureUtilsStage.Validating, $"Validating {machineType.ToDescription()} database upgrade..."); var sourceSettings = await sourceApp.GetMachineServiceSettingsAsync(); var targetSettings = await targetApp.GetMachineServiceSettingsAsync(); - var latestSourceEurekaVersion = await GetLatestEurekaVersion(sourceApp, versionTag); + var latestSourceTangoVersion = await GetLatestTangoVersion(sourceApp, machineType, versionTag); - //Check if there is any source PPC version. - if (latestSourceEurekaVersion == null) + //Check if there is any source Tango version. + if (latestSourceTangoVersion == null) { - throw new ValidationException("Could not locate a Twine X4 version entry on the source database."); + throw new ValidationException($"Could not locate a {machineType.ToDescription()} version entry on the source database."); } - var latestTargetEurekaVersion = await GetLatestEurekaVersion(targetApp, versionTag); + var latestTargetTangoVersion = await GetLatestTangoVersion(targetApp, machineType, versionTag); - //Check target latest PPC version is older if there is any. - if (latestTargetEurekaVersion != null && Version.Parse(latestSourceEurekaVersion.Version) <= Version.Parse(latestTargetEurekaVersion.Version)) + //Check target latest Tango version is older if there is any. + if (latestTargetTangoVersion != null && Version.Parse(latestSourceTangoVersion.Version) <= Version.Parse(latestTargetTangoVersion.Version)) { - throw new ValidationException($"Twine X4 source version is '{latestSourceEurekaVersion.VersionAndTag}' while target version is '{latestTargetEurekaVersion.VersionAndTag}'."); + throw new ValidationException($"{machineType.ToDescription()} source version is '{latestSourceTangoVersion.VersionAndTag}' while target version is '{latestTargetTangoVersion.VersionAndTag}'."); } } diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils/Environment/EnvironmentManager.cs b/Software/Visual_Studio/Azure/Tango.AzureUtils/Environment/EnvironmentManager.cs index a3c074df9..88b29fbae 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils/Environment/EnvironmentManager.cs +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils/Environment/EnvironmentManager.cs @@ -195,8 +195,8 @@ namespace Tango.AzureUtils.Environment //Add PPC storage versions. try { - await _storageManager.ValidatePPCStorageUpgrade(sourceSlot, slot, null); - await _storageManager.UpgradePPCStorage(sourceSlot, slot, null); + await _storageManager.ValidateTangoStorageUpgrade(sourceSlot, slot, MachineTypes.TS1800, null); + await _storageManager.UpgradeTangoStorage(sourceSlot, slot, MachineTypes.TS1800, null); } catch (Exception ex) { @@ -319,8 +319,8 @@ namespace Tango.AzureUtils.Environment { try { - await _storageManager.ValidatePPCStorageUpgrade(sourceApp, targetApp, config.PPCVersionTag); - await _storageManager.UpgradePPCStorage(sourceApp, targetApp, config.PPCVersionTag); + await _storageManager.ValidateTangoStorageUpgrade(sourceApp, targetApp, MachineTypes.TS1800, config.PPCVersionTag); + await _storageManager.UpgradeTangoStorage(sourceApp, targetApp, MachineTypes.TS1800, config.PPCVersionTag); } catch (Exception ex) { @@ -333,8 +333,8 @@ namespace Tango.AzureUtils.Environment { try { - await _storageManager.ValidateEurekaStorageUpgrade(sourceApp, targetApp, config.EurekaVersionTag); - await _storageManager.UpgradeEurekaStorage(sourceApp, targetApp, config.EurekaVersionTag); + await _storageManager.ValidateTangoStorageUpgrade(sourceApp, targetApp, MachineTypes.Eureka, config.EurekaVersionTag); + await _storageManager.UpgradeTangoStorage(sourceApp, targetApp, MachineTypes.Eureka, config.EurekaVersionTag); } catch (Exception ex) { @@ -342,6 +342,20 @@ namespace Tango.AzureUtils.Environment } } + //Add X1 storage versions. + if (config.CopyX1StorageBlobs) + { + try + { + await _storageManager.ValidateTangoStorageUpgrade(sourceApp, targetApp, MachineTypes.X1, config.X1VersionTag); + await _storageManager.UpgradeTangoStorage(sourceApp, targetApp, MachineTypes.X1, config.X1VersionTag); + } + catch (Exception ex) + { + await RequestConfirmation($"Issues encountered with upgrading Twine X1 storage versions.\n{ex.FlattenMessage()}\nDo you wish to continue?"); + } + } + //Add FSE storage versions. if (config.CopyFSEStorageBlobs) { @@ -389,8 +403,8 @@ namespace Tango.AzureUtils.Environment { try { - await _databaseManager.ValidatePPCDatabaseUpgrade(sourceApp, targetApp, config.PPCVersionTag); - await _databaseManager.UpgradePPCVersion(sourceApp, targetApp, config.PPCVersionTag); + await _databaseManager.ValidateTangoDatabaseUpgrade(sourceApp, targetApp, MachineTypes.TS1800, config.PPCVersionTag); + await _databaseManager.UpgradeTangoVersion(sourceApp, targetApp, MachineTypes.TS1800, config.PPCVersionTag); } catch (Exception ex) { @@ -403,8 +417,8 @@ namespace Tango.AzureUtils.Environment { try { - await _databaseManager.ValidateEurekaDatabaseUpgrade(sourceApp, targetApp, config.EurekaVersionTag); - await _databaseManager.UpgradeEurekaVersion(sourceApp, targetApp, config.EurekaVersionTag); + await _databaseManager.ValidateTangoDatabaseUpgrade(sourceApp, targetApp, MachineTypes.Eureka, config.EurekaVersionTag); + await _databaseManager.UpgradeTangoVersion(sourceApp, targetApp, MachineTypes.Eureka, config.EurekaVersionTag); } catch (Exception ex) { @@ -412,6 +426,20 @@ namespace Tango.AzureUtils.Environment } } + //Upgrade X1 database version. + if (config.UpgradeX1DatabaseVersion) + { + try + { + await _databaseManager.ValidateTangoDatabaseUpgrade(sourceApp, targetApp, MachineTypes.X1, config.X1VersionTag); + await _databaseManager.UpgradeTangoVersion(sourceApp, targetApp, MachineTypes.X1, config.X1VersionTag); + } + catch (Exception ex) + { + await RequestConfirmation($"Issues encountered with upgrading Twine X1 database versions.\n{ex.FlattenMessage()}\nDo you wish to continue?"); + } + } + //Upgrade FSE database version. if (config.UpgradeFSEDatabaseVersion) { @@ -470,13 +498,19 @@ namespace Tango.AzureUtils.Environment //Add PPC storage versions. if (config.CopyPPCStorageBlobs) { - await _storageManager.ValidatePPCStorageUpgrade(sourceApp, targetApp, config.PPCVersionTag); + await _storageManager.ValidateTangoStorageUpgrade(sourceApp, targetApp, MachineTypes.TS1800, config.PPCVersionTag); } //Add Eureka storage versions. if (config.CopyEurekaStorageBlobs) { - await _storageManager.ValidateEurekaStorageUpgrade(sourceApp, targetApp, config.EurekaVersionTag); + await _storageManager.ValidateTangoStorageUpgrade(sourceApp, targetApp, MachineTypes.Eureka, config.EurekaVersionTag); + } + + //Add X1 storage versions. + if (config.CopyX1StorageBlobs) + { + await _storageManager.ValidateTangoStorageUpgrade(sourceApp, targetApp, MachineTypes.X1, config.X1VersionTag); } //Add FSE storage versions. @@ -500,13 +534,19 @@ namespace Tango.AzureUtils.Environment //Upgrade PPC database version. if (config.UpgradePPCDatabaseVersion) { - await _databaseManager.ValidatePPCDatabaseUpgrade(sourceApp, targetApp, config.PPCVersionTag); + await _databaseManager.ValidateTangoDatabaseUpgrade(sourceApp, targetApp, MachineTypes.TS1800, config.PPCVersionTag); } //Upgrade Eureka database version. if (config.UpgradeEurekaDatabaseVersion) { - await _databaseManager.ValidateEurekaDatabaseUpgrade(sourceApp, targetApp, config.EurekaVersionTag); + await _databaseManager.ValidateTangoDatabaseUpgrade(sourceApp, targetApp, MachineTypes.Eureka, config.EurekaVersionTag); + } + + //Upgrade X1 database version. + if (config.UpgradeX1DatabaseVersion) + { + await _databaseManager.ValidateTangoDatabaseUpgrade(sourceApp, targetApp, MachineTypes.X1, config.X1VersionTag); } //Upgrade FSE database version. @@ -623,7 +663,7 @@ namespace Tango.AzureUtils.Environment { try { - await _storageManager.DowngradePPCStorage(app, config.PPCVersionTag); + await _storageManager.DowngradeTangoStorage(app, MachineTypes.TS1800, config.PPCVersionTag); } catch (Exception ex) { @@ -632,7 +672,7 @@ namespace Tango.AzureUtils.Environment try { - await _databaseManager.DowngradePPCVersion(app, config.PPCVersionTag); + await _databaseManager.DowngradeTangoVersion(app, MachineTypes.TS1800, config.PPCVersionTag); } catch (Exception ex) { diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils/Environment/UpgradeEnvironmentConfiguration.cs b/Software/Visual_Studio/Azure/Tango.AzureUtils/Environment/UpgradeEnvironmentConfiguration.cs index c6769ef3f..21b60a6ca 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils/Environment/UpgradeEnvironmentConfiguration.cs +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils/Environment/UpgradeEnvironmentConfiguration.cs @@ -17,6 +17,8 @@ namespace Tango.AzureUtils.Environment public bool UpgradePPCDatabaseVersion { get; set; } public bool CopyEurekaStorageBlobs { get; set; } public bool UpgradeEurekaDatabaseVersion { get; set; } + public bool CopyX1StorageBlobs { get; set; } + public bool UpgradeX1DatabaseVersion { get; set; } public bool CopyFSEStorageBlobs { get; set; } public bool UpgradeFSEDatabaseVersion { get; set; } public bool CopyTwineRSMStorageBlobs { get; set; } @@ -35,5 +37,12 @@ namespace Tango.AzureUtils.Environment get { return _eurekaVersionTag.IsNotNullOrEmpty() ? _eurekaVersionTag : null; } set { _eurekaVersionTag = value; RaisePropertyChangedAuto(); } } + + private String _x1VersionTag; + public String X1VersionTag + { + get { return _x1VersionTag.IsNotNullOrEmpty() ? _x1VersionTag : null; } + set { _x1VersionTag = value; RaisePropertyChangedAuto(); } + } } } diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils/Firmware/FirmwareManager.cs b/Software/Visual_Studio/Azure/Tango.AzureUtils/Firmware/FirmwareManager.cs index 6ab2c4544..62fa5f696 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils/Firmware/FirmwareManager.cs +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils/Firmware/FirmwareManager.cs @@ -48,20 +48,8 @@ namespace Tango.AzureUtils.Firmware throw new ValidationException($"The specified TFP package is invalid.\n{ex.FlattenMessage()}"); } - TangoVersion version = null; + TangoVersion version = await _databaseManager.GetLatestTangoVersion(slot, machineType, null); - if (machineType == MachineTypes.TS1800) - { - version = await _databaseManager.GetLatestPPCVersion(slot, null); - } - else if (machineType == MachineTypes.Eureka) - { - version = await _databaseManager.GetLatestEurekaVersion(slot, null); - } - else - { - throw new NotImplementedException("Machine type not supported for this action."); - } if (Version.Parse(version.FirmwareVersion) >= tfpPackage.GetMcuVersion()) { @@ -75,7 +63,7 @@ namespace Tango.AzureUtils.Firmware var zipFile = TemporaryManager.CreateImaginaryFile(".zip"); - await _storageManager.DownloadLatestVersion(slot, machineType, zipFile, versionTag); + await _storageManager.DownloadLatestTangoVersion(slot, machineType, zipFile, versionTag); OnProgress(AzureUtilsStage.Firmware, $"Replacing firmware_package.tfp..."); await Task.Factory.StartNew(() => @@ -99,7 +87,7 @@ namespace Tango.AzureUtils.Firmware } }); - await _storageManager.ReplaceLatestPPCVersion(slot, machineType, zipFile, versionTag); + await _storageManager.ReplaceLatestTangoVersion(slot, machineType, zipFile, versionTag); OnProgress(AzureUtilsStage.Firmware, $"Updating firmware version on database..."); using (ObservablesContext db = ObservablesContext.CreateDefault(settings.ToDataSource())) diff --git a/Software/Visual_Studio/Azure/Tango.AzureUtils/Storage/StorageManager.cs b/Software/Visual_Studio/Azure/Tango.AzureUtils/Storage/StorageManager.cs index cb442b6b4..1297f5cae 100644 --- a/Software/Visual_Studio/Azure/Tango.AzureUtils/Storage/StorageManager.cs +++ b/Software/Visual_Studio/Azure/Tango.AzureUtils/Storage/StorageManager.cs @@ -78,16 +78,16 @@ namespace Tango.AzureUtils.Storage await blob.DeleteAsync(); } - public async Task UpgradePPCStorage(IWebAppBase sourceApp, IWebAppBase targetApp, String versionTag) + public async Task UpgradeTangoStorage(IWebAppBase sourceApp, IWebAppBase targetApp, MachineTypes machineType, String versionTag) { OnProgress(AzureUtilsStage.Storage, $"Retrieving source and target settings..."); var sourceSettings = await sourceApp.GetMachineServiceSettingsAsync(); var targetSettings = await targetApp.GetMachineServiceSettingsAsync(); - var latestPPCVersion = await _databaseManager.GetLatestPPCVersion(sourceApp, versionTag); + var latestTangoVersion = await _databaseManager.GetLatestTangoVersion(sourceApp, machineType, versionTag); - OnProgress(AzureUtilsStage.Storage, $"Upgrading PPC version storage..."); + OnProgress(AzureUtilsStage.Storage, $"Upgrading {machineType.ToDescription()} version storage..."); var sourceAccount = CloudStorageAccount.Parse(sourceSettings.STORAGE_ACCOUNT); var sourceClient = sourceAccount.CreateCloudBlobClient(); @@ -95,54 +95,22 @@ namespace Tango.AzureUtils.Storage var targetAccount = CloudStorageAccount.Parse(targetSettings.STORAGE_ACCOUNT); var targetClient = targetAccount.CreateCloudBlobClient(); - var sourcePPCContainer = sourceClient.GetContainerReference(sourceSettings.TANGO_VERSIONS_CONTAINER); - var targetPPCContainer = targetClient.GetContainerReference(targetSettings.TANGO_VERSIONS_CONTAINER); + var sourceTangoContainer = sourceClient.GetContainerReference(sourceSettings.TANGO_VERSIONS_CONTAINER); + var targetTangoContainer = targetClient.GetContainerReference(targetSettings.TANGO_VERSIONS_CONTAINER); - var sourcePPCBlob = sourcePPCContainer.GetBlockBlobReference(latestPPCVersion.BlobName); - var sourcePPCInstallerBlob = sourcePPCContainer.GetBlockBlobReference(latestPPCVersion.InstallerBlobName); + var sourceTangoBlob = sourceTangoContainer.GetBlockBlobReference(latestTangoVersion.BlobName); + var sourceTangoInstallerBlob = sourceTangoContainer.GetBlockBlobReference(latestTangoVersion.InstallerBlobName); - var targetPPCBlob = await CreateEmptyBlob(targetPPCContainer, sourcePPCBlob.Name); - var targetPPCInstallerBlob = await CreateEmptyBlob(targetPPCContainer, sourcePPCInstallerBlob.Name); + var targetTangoBlob = await CreateEmptyBlob(targetTangoContainer, sourceTangoBlob.Name); + var targetTangoInstallerBlob = await CreateEmptyBlob(targetTangoContainer, sourceTangoInstallerBlob.Name); await Task.Factory.StartNew(() => { - targetPPCBlob.StartCopy(sourcePPCBlob); - targetPPCInstallerBlob.StartCopy(sourcePPCInstallerBlob); + targetTangoBlob.StartCopy(sourceTangoBlob); + targetTangoInstallerBlob.StartCopy(sourceTangoInstallerBlob); }); } - public async Task UpgradeEurekaStorage(IWebAppBase sourceApp, IWebAppBase targetApp, String versionTag) - { - OnProgress(AzureUtilsStage.Storage, $"Retrieving source and target settings..."); - - var sourceSettings = await sourceApp.GetMachineServiceSettingsAsync(); - var targetSettings = await targetApp.GetMachineServiceSettingsAsync(); - - var latestEurekaVersion = await _databaseManager.GetLatestEurekaVersion(sourceApp, versionTag); - - OnProgress(AzureUtilsStage.Storage, $"Upgrading Eureka version storage..."); - - var sourceAccount = CloudStorageAccount.Parse(sourceSettings.STORAGE_ACCOUNT); - var sourceClient = sourceAccount.CreateCloudBlobClient(); - - var targetAccount = CloudStorageAccount.Parse(targetSettings.STORAGE_ACCOUNT); - var targetClient = targetAccount.CreateCloudBlobClient(); - - var sourceEurekaContainer = sourceClient.GetContainerReference(sourceSettings.TANGO_VERSIONS_CONTAINER); - var targetEurekaContainer = targetClient.GetContainerReference(targetSettings.TANGO_VERSIONS_CONTAINER); - - var sourceEurekaBlob = sourceEurekaContainer.GetBlockBlobReference(latestEurekaVersion.BlobName); - var sourceEurekaInstallerBlob = sourceEurekaContainer.GetBlockBlobReference(latestEurekaVersion.InstallerBlobName); - - var targetEurekaBlob = await CreateEmptyBlob(targetEurekaContainer, sourceEurekaBlob.Name); - var targetEurekaInstallerBlob = await CreateEmptyBlob(targetEurekaContainer, sourceEurekaInstallerBlob.Name); - - await Task.Factory.StartNew(() => - { - targetEurekaBlob.StartCopy(sourceEurekaBlob); - targetEurekaInstallerBlob.StartCopy(sourceEurekaInstallerBlob); - }); - } public async Task UpgradeFSEStorage(IWebAppBase sourceApp, IWebAppBase targetApp, FSEBuildVariants build) { @@ -223,76 +191,46 @@ namespace Tango.AzureUtils.Storage OnCompleted("Latest Machine Studio storage blobs removed."); } - public async Task DowngradePPCStorage(IWebAppBase app, String versionTag) + public async Task DowngradeTangoStorage(IWebAppBase app, MachineTypes machineType, String versionTag) { OnProgress(AzureUtilsStage.Storage, $"Retrieving settings..."); - var latestPPCVersion = await _databaseManager.GetLatestPPCVersion(app, versionTag); + var latestTangoVersion = await _databaseManager.GetLatestTangoVersion(app, machineType, versionTag); var settings = await app.GetMachineServiceSettingsAsync(); - await RemoveBlob(settings.TANGO_VERSIONS_CONTAINER, latestPPCVersion.BlobName); - await RemoveBlob(settings.TANGO_VERSIONS_CONTAINER, latestPPCVersion.InstallerBlobName); + await RemoveBlob(settings.TANGO_VERSIONS_CONTAINER, latestTangoVersion.BlobName); + await RemoveBlob(settings.TANGO_VERSIONS_CONTAINER, latestTangoVersion.InstallerBlobName); - OnCompleted("Latest PPC storage blobs removed."); + OnCompleted($"Latest {machineType.ToDescription()} storage blobs removed."); } - public async Task ValidatePPCStorageUpgrade(IWebAppBase sourceApp, IWebAppBase targetApp, String versionTag) + public async Task ValidateTangoStorageUpgrade(IWebAppBase sourceApp, IWebAppBase targetApp, MachineTypes machineType, String versionTag) { - OnProgress(AzureUtilsStage.Validating, "Validating PPC storage upgrade..."); + OnProgress(AzureUtilsStage.Validating, $"Validating {machineType.ToDescription()} storage upgrade..."); var sourceSettings = await sourceApp.GetMachineServiceSettingsAsync(); var targetSettings = await targetApp.GetMachineServiceSettingsAsync(); - var latestSourcePPCVersion = await _databaseManager.GetLatestPPCVersion(sourceApp, versionTag); - var latestTargetPPCVersion = await _databaseManager.GetLatestPPCVersion(targetApp, versionTag); + var latestSourceTangoVersion = await _databaseManager.GetLatestTangoVersion(sourceApp, machineType, versionTag); + var latestTargetTangoVersion = await _databaseManager.GetLatestTangoVersion(targetApp, machineType, versionTag); var targetAccount = CloudStorageAccount.Parse(targetSettings.STORAGE_ACCOUNT); var targetClient = targetAccount.CreateCloudBlobClient(); - var targetPPCContainer = targetClient.GetContainerReference(targetSettings.TANGO_VERSIONS_CONTAINER); + var targetTangoContainer = targetClient.GetContainerReference(targetSettings.TANGO_VERSIONS_CONTAINER); - //Check PPC binaries blob not exists on the target. - var targetPPCBlob = targetPPCContainer.GetBlockBlobReference(latestSourcePPCVersion.BlobName); - if (await targetPPCBlob.ExistsAsync()) + //Check version binaries blob not exists on the target. + var targetTangoBlob = targetTangoContainer.GetBlockBlobReference(latestSourceTangoVersion.BlobName); + if (await targetTangoBlob.ExistsAsync()) { - throw new ValidationException($"PPC Block blob '{latestSourcePPCVersion.BlobName}' already exists on the target storage."); + throw new ValidationException($"{machineType.ToDescription()} Block blob '{latestSourceTangoVersion.BlobName}' already exists on the target storage."); } //Check PPC installer blob not exists on the target. - var targetPPCInstallerBlob = targetPPCContainer.GetBlockBlobReference(latestSourcePPCVersion.InstallerBlobName); - if (await targetPPCInstallerBlob.ExistsAsync()) + var targetTangoInstallerBlob = targetTangoContainer.GetBlockBlobReference(latestSourceTangoVersion.InstallerBlobName); + if (await targetTangoInstallerBlob.ExistsAsync()) { - throw new ValidationException($"PPC Block blob '{latestSourcePPCVersion.InstallerBlobName}' already exists on the target storage."); - } - } - - public async Task ValidateEurekaStorageUpgrade(IWebAppBase sourceApp, IWebAppBase targetApp, String versionTag) - { - OnProgress(AzureUtilsStage.Validating, "Validating Eureka storage upgrade..."); - - var sourceSettings = await sourceApp.GetMachineServiceSettingsAsync(); - var targetSettings = await targetApp.GetMachineServiceSettingsAsync(); - - var latestSourceEurekaVersion = await _databaseManager.GetLatestEurekaVersion(sourceApp, versionTag); - var latestTargetEurekaVersion = await _databaseManager.GetLatestEurekaVersion(targetApp, versionTag); - - var targetAccount = CloudStorageAccount.Parse(targetSettings.STORAGE_ACCOUNT); - var targetClient = targetAccount.CreateCloudBlobClient(); - - var targetEurekaContainer = targetClient.GetContainerReference(targetSettings.TANGO_VERSIONS_CONTAINER); - - //Check PPC binaries blob not exists on the target. - var targetEurekaBlob = targetEurekaContainer.GetBlockBlobReference(latestSourceEurekaVersion.BlobName); - if (await targetEurekaBlob.ExistsAsync()) - { - throw new ValidationException($"Twine X4 Block blob '{latestSourceEurekaVersion.BlobName}' already exists on the target storage."); - } - - //Check PPC installer blob not exists on the target. - var targetEurekaInstallerBlob = targetEurekaContainer.GetBlockBlobReference(latestSourceEurekaVersion.InstallerBlobName); - if (await targetEurekaInstallerBlob.ExistsAsync()) - { - throw new ValidationException($"Twine X4 Block blob '{latestSourceEurekaVersion.InstallerBlobName}' already exists on the target storage."); + throw new ValidationException($"{machineType.ToDescription()} Block blob '{latestSourceTangoVersion.InstallerBlobName}' already exists on the target storage."); } } @@ -356,26 +294,13 @@ namespace Tango.AzureUtils.Storage } } - public async Task DownloadLatestVersion(IWebAppBase app, MachineTypes machineType, String filePath, String versionTag) + public async Task DownloadLatestTangoVersion(IWebAppBase app, MachineTypes machineType, String filePath, String versionTag) { OnProgress(AzureUtilsStage.Storage, $"Retrieving source and target settings..."); var settings = await app.GetMachineServiceSettingsAsync(); - TangoVersion version = null; - - if (machineType == MachineTypes.TS1800) - { - version = await _databaseManager.GetLatestPPCVersion(app, versionTag); - } - else if (machineType == MachineTypes.Eureka) - { - version = await _databaseManager.GetLatestEurekaVersion(app, versionTag); - } - else - { - throw new NotImplementedException("Machine type not supported for this action."); - } + TangoVersion version = await _databaseManager.GetLatestTangoVersion(app, machineType, versionTag); OnProgress(AzureUtilsStage.Storage, $"Downloading {machineType.ToDescription()} version '{version.Version}'..."); @@ -397,26 +322,13 @@ namespace Tango.AzureUtils.Storage } } - public async Task ReplaceLatestPPCVersion(IWebAppBase app, MachineTypes machineType, String filePath, String versionTag) + public async Task ReplaceLatestTangoVersion(IWebAppBase app, MachineTypes machineType, String filePath, String versionTag) { OnProgress(AzureUtilsStage.Storage, $"Retrieving source and target settings..."); var settings = await app.GetMachineServiceSettingsAsync(); - TangoVersion version = null; - - if (machineType == MachineTypes.TS1800) - { - version = await _databaseManager.GetLatestPPCVersion(app, versionTag); - } - else if (machineType == MachineTypes.Eureka) - { - version = await _databaseManager.GetLatestEurekaVersion(app, versionTag); - } - else - { - throw new NotImplementedException("Machine type not supported for this action."); - } + TangoVersion version = await _databaseManager.GetLatestTangoVersion(app, machineType, versionTag); OnProgress(AzureUtilsStage.Storage, $"Uploading {machineType.ToDescription()} version '{version.VersionAndTag}'..."); |
