Skip to content
This repository has been archived by the owner on Mar 1, 2023. It is now read-only.

Commit

Permalink
images metadata support
Browse files Browse the repository at this point in the history
  • Loading branch information
Vadim Chinyaev authored and alexk53 committed Oct 11, 2022
1 parent cf457f5 commit 107a3f8
Show file tree
Hide file tree
Showing 5 changed files with 156 additions and 34 deletions.
67 changes: 64 additions & 3 deletions gcore/data_source_gcore_image.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ import (
)

const (
imagesPoint = "images"
bmImagesPoint = "bmimages"
imagesPoint = "images"
bmImagesPoint = "bmimages"
downloadImagePoint = "downloadimage"
ImageUploadTimeout = 1200
)

func dataSourceImage() *schema.Resource {
Expand Down Expand Up @@ -82,6 +84,37 @@ func dataSourceImage() *schema.Resource {
Type: schema.TypeString,
Computed: true,
},
"metadata_k": &schema.Schema{
Type: schema.TypeString,
Optional: true,
},
"metadata_kv": &schema.Schema{
Type: schema.TypeMap,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"metadata_read_only": &schema.Schema{
Type: schema.TypeList,
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"key": {
Type: schema.TypeString,
Computed: true,
},
"value": {
Type: schema.TypeString,
Computed: true,
},
"read_only": {
Type: schema.TypeBool,
Computed: true,
},
},
},
},
},
}
}
Expand All @@ -102,7 +135,21 @@ func dataSourceImageRead(ctx context.Context, d *schema.ResourceData, m interfac
return diag.FromErr(err)
}

allImages, err := images.ListAll(client, images.ListOpts{})
listOpts := &images.ListOpts{}

if metadataK, ok := d.GetOk("metadata_k"); ok {
listOpts.MetadataK = metadataK.(string)
}

if metadataRaw, ok := d.GetOk("metadata_kv"); ok {
typedMetadataKV := make(map[string]string, len(metadataRaw.(map[string]interface{})))
for k, v := range metadataRaw.(map[string]interface{}) {
typedMetadataKV[k] = v.(string)
}
listOpts.MetadataKV = typedMetadataKV
}

allImages, err := images.ListAll(client, *listOpts)
if err != nil {
return diag.FromErr(err)
}
Expand Down Expand Up @@ -130,6 +177,20 @@ func dataSourceImageRead(ctx context.Context, d *schema.ResourceData, m interfac
d.Set("os_version", image.OsVersion)
d.Set("description", image.Description)

metadataReadOnly := make([]map[string]interface{}, 0, len(image.Metadata))
if len(image.Metadata) > 0 {
for _, metadataItem := range image.Metadata {
metadataReadOnly = append(metadataReadOnly, map[string]interface{}{
"key": metadataItem.Key,
"value": metadataItem.Value,
"read_only": metadataItem.ReadOnly,
})
}
}

if err := d.Set("metadata_read_only", metadataReadOnly); err != nil {
return diag.FromErr(err)
}
log.Println("[DEBUG] Finish Image reading")
return nil
}
100 changes: 87 additions & 13 deletions gcore/data_source_gcore_image_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,37 @@ import (
"strconv"
"testing"

gcorecloud "github.com/G-Core/gcorelabscloud-go"
"github.com/G-Core/gcorelabscloud-go/gcore/image/v1/images"
"github.com/G-Core/gcorelabscloud-go/gcore/task/v1/tasks"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
)

func uploadTestImage(client *gcorecloud.ServiceClient, opts images.UploadOpts) (string, error) {
res, err := images.Upload(client, opts).Extract()
if err != nil {
return "", err
}

taskID := res.Tasks[0]
imageID, err := tasks.WaitTaskAndReturnResult(client, taskID, true, ImageUploadTimeout, func(task tasks.TaskID) (interface{}, error) {
taskInfo, err := tasks.Get(client, string(task)).Extract()
if err != nil {
return nil, fmt.Errorf("cannot get task with ID: %s. Error: %w", task, err)
}
id, err := images.ExtractImageIDFromTask(taskInfo)
if err != nil {
return nil, fmt.Errorf("cannot retrieve Image ID from task info: %w", err)
}
return id, nil
})

if err != nil {
return "", err
}
return imageID.(string), nil
}

func TestAccImageDataSource(t *testing.T) {
cfg, err := createTestConfig()
if err != nil {
Expand All @@ -22,43 +49,90 @@ func TestAccImageDataSource(t *testing.T) {
if err != nil {
t.Fatal(err)
}
downloadClient, err := CreateTestClient(cfg.Provider, downloadImagePoint, versionPointV1)
if err != nil {
t.Fatal(err)
}

opts1 := images.UploadOpts{
HwMachineType: "q35",
SshKey: "allow",
Name: "test_image_tf1",
OSType: "linux",
URL: "http://mirror.noris.net/cirros/0.4.0/cirros-0.4.0-x86_64-disk.img",
HwFirmwareType: "uefi",
Metadata: map[string]string{"key1": "val1", "key2": "val2"},
}

opts2 := opts1
opts2.Name = "test_image_tf2"
opts2.Metadata = map[string]string{"key1": "val1", "key3": "val3"}

imgs, err := images.ListAll(client, images.ListOpts{})
image1ID, err := uploadTestImage(downloadClient, opts1)
if err != nil {
t.Fatal(err)
}
defer images.Delete(client, image1ID)

if len(imgs) == 0 {
t.Fatal("images not found")
image2ID, err := uploadTestImage(downloadClient, opts2)
if err != nil {
t.Fatal(err)
}
defer images.Delete(client, image2ID)

img := imgs[0]
image1, err := images.Get(client, image1ID).Extract()
if err != nil {
t.Fatal(err)
}

image2, err := images.Get(client, image2ID).Extract()
if err != nil {
t.Fatal(err)
}

fullName := "data.gcore_image.acctest"
tpl := func(name string) string {
tpl := func(name string, metaQuery string) string {
return fmt.Sprintf(`
data "gcore_image" "acctest" {
%s
%s
name = "%s"
%s
}
`, projectInfo(), regionInfo(), name)
`, projectInfo(), regionInfo(), name, metaQuery)
}

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: testAccProviders,
Steps: []resource.TestStep{
{
Config: tpl(img.Name),
Config: tpl(image1.Name, `metadata_k="key1"`),
Check: resource.ComposeTestCheckFunc(
testAccCheckResourceExists(fullName),
resource.TestCheckResourceAttr(fullName, "name", image1.Name),
resource.TestCheckResourceAttr(fullName, "id", image1.ID),
resource.TestCheckResourceAttr(fullName, "min_disk", strconv.Itoa(image1.MinDisk)),
resource.TestCheckResourceAttr(fullName, "min_ram", strconv.Itoa(image1.MinRAM)),
resource.TestCheckResourceAttr(fullName, "os_distro", image1.OsDistro),
resource.TestCheckResourceAttr(fullName, "os_version", image1.OsVersion),
testAccCheckMetadata(fullName, true, map[string]string{
"key1": "val1", "key2": "val2"}),
),
},
{
Config: tpl(image2.Name, `metadata_kv={key3 = "val3"}`),
Check: resource.ComposeTestCheckFunc(
testAccCheckResourceExists(fullName),
resource.TestCheckResourceAttr(fullName, "name", img.Name),
resource.TestCheckResourceAttr(fullName, "id", img.ID),
resource.TestCheckResourceAttr(fullName, "min_disk", strconv.Itoa(img.MinDisk)),
resource.TestCheckResourceAttr(fullName, "min_ram", strconv.Itoa(img.MinRAM)),
resource.TestCheckResourceAttr(fullName, "os_distro", img.OsDistro),
resource.TestCheckResourceAttr(fullName, "os_version", img.OsVersion),
resource.TestCheckResourceAttr(fullName, "name", image2.Name),
resource.TestCheckResourceAttr(fullName, "id", image2.ID),
resource.TestCheckResourceAttr(fullName, "min_disk", strconv.Itoa(image2.MinDisk)),
resource.TestCheckResourceAttr(fullName, "min_ram", strconv.Itoa(image2.MinRAM)),
resource.TestCheckResourceAttr(fullName, "os_distro", image2.OsDistro),
resource.TestCheckResourceAttr(fullName, "os_version", image2.OsVersion),
testAccCheckMetadata(fullName, true, map[string]string{
"key3": "val3",
}),
),
},
},
Expand Down
2 changes: 2 additions & 0 deletions gcore/data_source_gcore_network.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ func dataSourceNetworkRead(ctx context.Context, d *schema.ResourceData, m interf
}

name := d.Get("name").(string)

metaOpts := &networks.ListOpts{}

if metadataK, ok := d.GetOk("metadata_k"); ok {
Expand All @@ -134,6 +135,7 @@ func dataSourceNetworkRead(ctx context.Context, d *schema.ResourceData, m interf
}

nets, err := networks.ListAll(client, *metaOpts)

if err != nil {
return diag.FromErr(err)
}
Expand Down
3 changes: 1 addition & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ require (
github.com/G-Core/gcore-dns-sdk-go v0.2.3
github.com/G-Core/gcore-storage-sdk-go v0.1.34
github.com/G-Core/gcorelabscdn-go v0.1.24
github.com/G-Core/gcorelabscloud-go v0.5.20
github.com/G-Core/gcorelabscloud-go v0.5.21
github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320
github.com/hashicorp/terraform-plugin-sdk/v2 v2.10.1
github.com/mitchellh/mapstructure v1.5.0
Expand Down Expand Up @@ -47,7 +47,6 @@ require (
github.com/hashicorp/hcl/v2 v2.11.1 // indirect
github.com/hashicorp/logutils v1.0.0 // indirect
github.com/hashicorp/terraform-json v0.14.0 // indirect
github.com/hashicorp/terraform-plugin-docs v0.13.0 // indirect
github.com/hashicorp/terraform-plugin-go v0.5.0 // indirect
github.com/hashicorp/terraform-plugin-log v0.2.0 // indirect
github.com/hashicorp/terraform-registry-address v0.0.0-20210412075316-9b2996cce896 // indirect
Expand Down
18 changes: 2 additions & 16 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -85,16 +85,11 @@ github.com/G-Core/gcore-storage-sdk-go v0.1.34 h1:0GPQfz1kA6mQi6fiisGsh0Um4H9PZe
github.com/G-Core/gcore-storage-sdk-go v0.1.34/go.mod h1:BUAEZZZJJt/+luRFunqziv3+JnbVMLbQXDWz9kV8Te8=
github.com/G-Core/gcorelabscdn-go v0.1.24 h1:3RZgU2rNxLum61FKQNND/XbFDj7vka2Q/BzG2Gg2oW4=
github.com/G-Core/gcorelabscdn-go v0.1.24/go.mod h1:iSGXaTvZBzDHQW+rKFS918BgFVpONcyLEijwh8WsXpE=
github.com/G-Core/gcorelabscloud-go v0.5.20 h1:pqwzbdRhuJK7TlzvQkWkz2ozGyk2UCuup+WNyOQYeqk=
github.com/G-Core/gcorelabscloud-go v0.5.20/go.mod h1:EFyllSaVpPPIXnU35ALXXXQJhPRmwjShgOGHqHnb2Xk=
github.com/G-Core/gcorelabscloud-go v0.5.21 h1:4ZcdtBIRytwfeh/4FetCkfnOuSuUj70nXYwDzSRN8L4=
github.com/G-Core/gcorelabscloud-go v0.5.21/go.mod h1:EFyllSaVpPPIXnU35ALXXXQJhPRmwjShgOGHqHnb2Xk=
github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60=
github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o=
github.com/Masterminds/sprig/v3 v3.2.2 h1:17jRggJu518dr3QaafizSXOjKYp94wKfABxUmyxvxX8=
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
github.com/Microsoft/go-winio v0.5.0 h1:Elr9Wn+sGKPlkaBvwu4mTrxtmOp3F3yV9qhaHbXGjwU=
Expand Down Expand Up @@ -143,7 +138,6 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC
github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
Expand All @@ -159,7 +153,6 @@ github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4=
github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bmatcuk/doublestar v1.1.5/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
Expand Down Expand Up @@ -496,8 +489,6 @@ github.com/hashicorp/terraform-json v0.12.0/go.mod h1:pmbq9o4EuL43db5+0ogX10Yofv
github.com/hashicorp/terraform-json v0.13.0/go.mod h1:y5OdLBCT+rxbwnpxZs9kGL7R9ExU76+cpdY8zHwoazk=
github.com/hashicorp/terraform-json v0.14.0 h1:sh9iZ1Y8IFJLx+xQiKHGud6/TSUCM0N8e17dKDpqV7s=
github.com/hashicorp/terraform-json v0.14.0/go.mod h1:5A9HIWPkk4e5aeeXIBbkcOvaZbIYnAIkEyqP2pNSckM=
github.com/hashicorp/terraform-plugin-docs v0.13.0 h1:6e+VIWsVGb6jYJewfzq2ok2smPzZrt1Wlm9koLeKazY=
github.com/hashicorp/terraform-plugin-docs v0.13.0/go.mod h1:W0oCmHAjIlTHBbvtppWHe8fLfZ2BznQbuv8+UD8OucQ=
github.com/hashicorp/terraform-plugin-go v0.4.0/go.mod h1:7u/6nt6vaiwcWE2GuJKbJwNlDFnf5n95xKw4hqIVr58=
github.com/hashicorp/terraform-plugin-go v0.5.0 h1:+gCDdF0hcYCm0YBTxrP4+K1NGIS5ZKZBKDORBewLJmg=
github.com/hashicorp/terraform-plugin-go v0.5.0/go.mod h1:PAVN26PNGpkkmsvva1qfriae5Arky3xl3NfzKa8XFVM=
Expand All @@ -514,7 +505,6 @@ github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKe
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ=
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw=
github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
Expand Down Expand Up @@ -618,7 +608,6 @@ github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3N
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
github.com/mitchellh/cli v1.1.2/go.mod h1:6iaV0fGdElS6dPBx0EApTxHrcWvmJphyh2n8YBLPPZ4=
github.com/mitchellh/cli v1.1.4 h1:qj8czE26AU4PbiaPXK5uVmMSM+V5BYsFBiM9HhGRLUA=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
Expand Down Expand Up @@ -696,7 +685,6 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo=
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
Expand All @@ -710,7 +698,6 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
Expand All @@ -733,7 +720,6 @@ github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
Expand Down

0 comments on commit 107a3f8

Please sign in to comment.