public async Task DownloadApplicationBinaries(AppIdentity appIdentity, string localPath,
                                                      ConflictResolutionMode conflictResolutionMode)
        {
            bool exists = !FileUtils.DirectoryDoesntExistOrEmpty(localPath);

            if (exists)
            {
                if (conflictResolutionMode == ConflictResolutionMode.DoNothingIfBinariesExist)
                {
                    return;
                }
                if (conflictResolutionMode == ConflictResolutionMode.FailIfBinariesExist)
                {
                    throw new DuplicateBinariesException(
                              $"Cannot download the binaries because the destination directory {localPath} contains files");
                }
            }
            CloudBlobDirectory blobDirectory = GetBlobDirectory(appIdentity);

            if (!await blobDirectory.ExistsAsync())
            {
                throw new BinariesNotFoundException("The binaries were not found in the Yams repository");
            }
            await BlobUtils.DownloadBlobDirectory(blobDirectory, localPath);
        }
        public async Task DeleteApplicationBinaries(AppIdentity appIdentity)
        {
            CloudBlobDirectory blobDirectory = GetBlobDirectory(appIdentity);

            if (!await blobDirectory.ExistsAsync())
            {
                throw new BinariesNotFoundException(
                          $"Cannot delete binaries for application {appIdentity} because they were not found");
            }
            await blobDirectory.DeleteAsync();
        }
Esempio n. 3
0
        public async Task <ClusterDeploymentStatus> FetchClusterDeploymentStatus(string clusterId, int ttlSeconds)
        {
            ClusterDeploymentStatus clusterDeploymentStatus = new ClusterDeploymentStatus();;
            CloudBlobDirectory      instancesBlobDir        = _blobContainer.GetDirectoryReference(GetClusterStatusRelativePath(clusterId));

            if (!await instancesBlobDir.ExistsAsync())
            {
                return(clusterDeploymentStatus);
            }
            IEnumerable <IListBlobItem> instancesBlobList = await instancesBlobDir.ListBlobsAsync();

            foreach (var blob in instancesBlobList)
            {
                CloudBlockBlob instanceBlob = blob as CloudBlockBlob;
                if (instanceBlob == null)
                {
                    Trace.TraceWarning($"Unexpected blob {blob.Uri} in cluster status directory");
                    continue;
                }
                double secondsSinceModified = DateTimeOffset.UtcNow.Subtract(instanceBlob.Properties.LastModified.Value).TotalSeconds;
                if (secondsSinceModified > ttlSeconds)
                {
                    continue;
                }

                try
                {
                    InstanceDeploymentStatus instanceDeploymentStatus =
                        await FetchInstanceDeploymentStatus(instanceBlob);

                    string instanceId = instanceBlob.Name;
                    clusterDeploymentStatus.SetInstanceDeploymentStatus(instanceId, instanceDeploymentStatus);
                }
                catch (Exception e)
                {
                    Trace.TraceError($"Could not read instance deployment status {instanceBlob.Uri}, Exception: {e}");
                }
            }
            return(clusterDeploymentStatus);
        }