MCPcopy Create free account
hub / github.com/linuxkit/linuxkit / uploadVMImage

Function uploadVMImage

src/cmd/linuxkit/azure.go:141–223  ·  view source on GitHub ↗
(resourceGroupName string, accountName string, imagePath string)

Source from the content-addressed store, hash-verified

139}
140
141func uploadVMImage(resourceGroupName string, accountName string, imagePath string) {
142
143 const PageBlobPageSize int64 = 2 * 1024 * 1024
144 parallelism := 8 * runtime.NumCPU()
145
146 ctx := context.Background()
147 accountKeys, err := accountsClient.ListKeys(ctx, resourceGroupName, accountName)
148 if err != nil {
149 log.Fatalf("Unable to retrieve storage account key: %v", err)
150 }
151
152 keys := *(accountKeys.Keys)
153
154 absolutePath, err := filepath.Abs(imagePath)
155 if err != nil {
156 log.Fatalf("Unable to get absolute path: %v", err)
157 }
158
159 //directory, image := filepath.Split(absolutePath)
160
161 ensureVHDSanity(absolutePath)
162
163 diskStream, err := diskstream.CreateNewDiskStream(absolutePath)
164 if err != nil {
165 log.Fatalf("Unable to create disk stream for VHD: %v", err)
166 }
167 defer func() { _ = diskStream.Close() }()
168
169 simpleStorageClient, err = simpleStorage.NewBasicClient(accountName, *keys[0].Value)
170 if err != nil {
171 log.Fatalf("Unable to create simple storage client: %v", err)
172 }
173
174 blobServiceClient := simpleStorageClient.GetBlobService()
175 _, err = blobServiceClient.CreateContainerIfNotExists(defaultStorageContainerName, simpleStorage.ContainerAccessTypePrivate)
176 if err != nil {
177 log.Fatalf("Unable to create or retrieve container: %v", err)
178 }
179
180 localMetaData := getLocalVHDMetaData(absolutePath)
181
182 err = blobServiceClient.PutPageBlob(defaultStorageContainerName, defaultStorageBlobName, diskStream.GetSize(), nil)
183 if err != nil {
184 log.Fatalf("Unable to create VHD blob: %v", err)
185 }
186
187 m, _ := localMetaData.ToMap()
188 err = blobServiceClient.SetBlobMetadata(defaultStorageContainerName, defaultStorageBlobName, m, make(map[string]string))
189 if err != nil {
190 log.Fatalf("Unable to set blob metatada: %v", err)
191 }
192
193 var rangesToSkip []*common.IndexRange
194 uploadableRanges, err := upload.LocateUploadableRanges(diskStream, rangesToSkip, PageBlobPageSize)
195 if err != nil {
196 log.Fatalf("Unable to locate uploadable ranges: %v", err)
197 }
198

Callers 2

pushAzureCmdFunction · 0.85
runAzureCmdFunction · 0.85

Calls 4

ensureVHDSanityFunction · 0.85
getLocalVHDMetaDataFunction · 0.85
setBlobMD5HashFunction · 0.85
CloseMethod · 0.45

Tested by

no test coverage detected