1package gridscale
2
3import (
4	"context"
5	"fmt"
6
7	"github.com/gridscale/gsclient-go/v3"
8	"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
9	"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
10)
11
12func dataSourceGridscaleSshkey() *schema.Resource {
13	return &schema.Resource{
14		Read: dataSourceGridscaleSshkeyRead,
15
16		Schema: map[string]*schema.Schema{
17			"resource_id": &schema.Schema{
18				Type:         schema.TypeString,
19				Required:     true,
20				Description:  "ID of a resource",
21				ValidateFunc: validation.NoZeroValues,
22			},
23			"name": {
24				Type:        schema.TypeString,
25				Description: "The human-readable name of the object. It supports the full UTF-8 charset, with a maximum of 64 characters.",
26				Computed:    true},
27			"sshkey": {
28				Type:        schema.TypeString,
29				Description: "sshkey_string is the OpenSSH public key string (all key types are supported => ed25519, ecdsa, dsa, rsa, rsa1)",
30				Computed:    true},
31			"status": {
32				Type:     schema.TypeString,
33				Computed: true,
34			},
35			"create_time": {
36				Type:        schema.TypeString,
37				Description: "The date and time the object was initially created",
38				Computed:    true,
39			},
40			"change_time": {
41				Type:        schema.TypeString,
42				Description: "The date and time of the last object change",
43				Computed:    true,
44			},
45			"labels": {
46				Type:        schema.TypeSet,
47				Description: "List of labels.",
48				Computed:    true,
49				Elem:        &schema.Schema{Type: schema.TypeString},
50			},
51		},
52	}
53}
54
55func dataSourceGridscaleSshkeyRead(d *schema.ResourceData, meta interface{}) error {
56	client := meta.(*gsclient.Client)
57
58	id := d.Get("resource_id").(string)
59	errorPrefix := fmt.Sprintf("read SSH key (%s) datasource -", id)
60
61	sshkey, err := client.GetSshkey(context.Background(), id)
62	if err != nil {
63		return fmt.Errorf("%s error: %v", errorPrefix, err)
64	}
65
66	d.SetId(sshkey.Properties.ObjectUUID)
67	if err = d.Set("name", sshkey.Properties.Name); err != nil {
68		return fmt.Errorf("%s error setting name: %v", errorPrefix, err)
69	}
70	if err = d.Set("sshkey", sshkey.Properties.Sshkey); err != nil {
71		return fmt.Errorf("%s error setting sshkey: %v", errorPrefix, err)
72	}
73	if err = d.Set("status", sshkey.Properties.Status); err != nil {
74		return fmt.Errorf("%s error setting status: %v", errorPrefix, err)
75	}
76	if err = d.Set("create_time", sshkey.Properties.CreateTime.String()); err != nil {
77		return fmt.Errorf("%s error setting create_time: %v", errorPrefix, err)
78	}
79	if err = d.Set("change_time", sshkey.Properties.ChangeTime.String()); err != nil {
80		return fmt.Errorf("%s error setting change_time: %v", errorPrefix, err)
81	}
82	if err = d.Set("labels", sshkey.Properties.Labels); err != nil {
83		return fmt.Errorf("%s error setting labels: %v", errorPrefix, err)
84	}
85
86	return nil
87}
88