示例#1
0
        private void InstallWorkloadsWithInstallRecord(IEnumerable <WorkloadId> workloadIds, SdkFeatureBand sdkFeatureBand)
        {
            if (_workloadInstaller.GetInstallationUnit().Equals(InstallationUnit.Packs))
            {
                var installer = _workloadInstaller.GetPackInstaller();

                var workloadPackToInstall = workloadIds
                                            .SelectMany(workloadId => _workloadResolver.GetPacksInWorkload(workloadId.ToString()))
                                            .Distinct()
                                            .Select(packId => _workloadResolver.TryGetPackInfo(packId));
                TransactionalAction.Run(
                    action: () =>
                {
                    foreach (var packId in workloadPackToInstall)
                    {
                        installer.InstallWorkloadPack(packId, sdkFeatureBand);
                    }

                    foreach (var workloadId in workloadIds)
                    {
                        _workloadInstaller.WriteWorkloadInstallationRecord(workloadId, sdkFeatureBand);
                    }
                },
                    rollback: () => {
                    foreach (var packId in workloadPackToInstall)
                    {
                        installer.RollBackWorkloadPackInstall(packId, sdkFeatureBand);
                    }

                    foreach (var workloadId in workloadIds)
                    {
                        _workloadInstaller.DeleteWorkloadInstallationRecord(workloadId, sdkFeatureBand);
                    }
                });
            }
            else
            {
                var installer = _workloadInstaller.GetWorkloadInstaller();
                foreach (var workloadId in workloadIds)
                {
                    installer.InstallWorkload(workloadId);
                }
            }
        }