diff --git a/README.md b/README.md index 557af02..a88245a 100644 --- a/README.md +++ b/README.md @@ -1,64 +1,72 @@ -# Terraform Provider Scaffolding (Terraform Plugin Framework) +# Virtfusion Terraform Provider -_This template repository is built on the [Terraform Plugin Framework](https://github.com/hashicorp/terraform-plugin-framework). The template repository built on the [Terraform Plugin SDK](https://github.com/hashicorp/terraform-plugin-sdk) can be found at [terraform-provider-scaffolding](https://github.com/hashicorp/terraform-provider-scaffolding). See [Which SDK Should I Use?](https://developer.hashicorp.com/terraform/plugin/framework-benefits) in the Terraform documentation for additional information._ +

NOTE: This is a work in progress and is not yet ready for production use.

-This repository is a *template* for a [Terraform](https://www.terraform.io) provider. It is intended as a starting point for creating Terraform providers, containing: -- A resource and a data source (`internal/provider/`), -- Examples (`examples/`) and generated documentation (`docs/`), -- Miscellaneous meta files. +## Overview -These files contain boilerplate code that you will need to edit to create your own Terraform provider. Tutorials for creating Terraform providers can be found on the [HashiCorp Developer](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework) platform. _Terraform Plugin Framework specific guides are titled accordingly._ +This is a Terraform provider for the Virtfusion API. It allows you to manage your Virtfusion resources using Terraform. -Please see the [GitHub template repository documentation](https://help.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-from-a-template) for how to create a new repository from this template on GitHub. +# What can I do with this provider? -Once you've written your provider, you'll want to [publish it on the Terraform Registry](https://developer.hashicorp.com/terraform/registry/providers/publishing) so that others can use it. +Currently, you're able to manage the following resources: +* Create and delete virtual machines +* Create and delete SSH keys -## Requirements +# How do I use this provider? -- [Terraform](https://developer.hashicorp.com/terraform/downloads) >= 1.0 -- [Go](https://golang.org/doc/install) >= 1.19 +Below is an example of how to use this provider to create a virtual machine and an SSH key. -## Building The Provider +```hcl +terraform { + required_providers { + virtfusion = { + source = "ezscale/virtfusion" + } + } +} -1. Clone the repository -1. Enter the repository directory -1. Build the provider using the Go `install` command: +provider "virtfusion" { + endpoint = "virtfusion.example.com" + api_token = "" +} -```shell -go install +variable "common" { + type = map(string) + default = { + hypervisor_id = 1 + package_id = 12 + user_id = 1 + } +} + +# Create a SSH key +resource "virtfusion_ssh" "key1" { + name = "My Test Key" + public_key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKWyBR+dk5M5MMfmH6Ss5QDSgcAvbCYu0DkqgPKH8O5T testkey@example.com" + user_id = var.common["user_id"] +} + +# Create a server +resource "virtfusion_server" "node1" { + hypervisor_id = var.common["hypervisor_id"] + package_id = var.common["package_id"] + user_id = var.common["user_id"] +} + +# Initialize the server with the OS we want, the SSH key we want, and the hostname we want. +resource "virtfusion_build" "node1" { + server_id = virtfusion_server.node1.id + name = "node1-demo" + hostname = "node1.example.com" + osid = 34 + vnc = true + ipv6 = true + ssh_keys = [virtfusion_ssh.key1.id] + email = true +} ``` -## Adding Dependencies +# How can I contribute? -This provider uses [Go modules](https://github.com/golang/go/wiki/Modules). -Please see the Go documentation for the most up to date information about using Go modules. - -To add a new dependency `github.com/author/dependency` to your Terraform provider: - -```shell -go get github.com/author/dependency -go mod tidy -``` - -Then commit the changes to `go.mod` and `go.sum`. - -## Using the provider - -Fill this in for each provider - -## Developing the Provider - -If you wish to work on the provider, you'll first need [Go](http://www.golang.org) installed on your machine (see [Requirements](#requirements) above). - -To compile the provider, run `go install`. This will build the provider and put the provider binary in the `$GOPATH/bin` directory. - -To generate or update documentation, run `go generate`. - -In order to run the full suite of Acceptance tests, run `make testacc`. - -*Note:* Acceptance tests create real resources, and often cost money to run. - -```shell -make testacc -``` +If you'd like to contribute, please feel free to open a pull request. If you're unsure of what to work on, please check the issues tab for any open issues. \ No newline at end of file diff --git a/internal/provider/virtfusion_ssh_resource.go b/internal/provider/virtfusion_ssh_resource.go index 794371a..c1034dd 100644 --- a/internal/provider/virtfusion_ssh_resource.go +++ b/internal/provider/virtfusion_ssh_resource.go @@ -31,11 +31,10 @@ type VirtfusionSSHResource struct { // VirtfusionSSHResourceModel describes the resource data model. type VirtfusionSSHResourceModel struct { - UserId *int64 `tfsdk:"user_id" json:"userId"` - Name *string `tfsdk:"name" json:"name"` - PublicKey *string `tfsdk:"public_key" json:"publicKey"` - PublicKeyHash types.String `tfsdk:"public_key_hash"` - Id types.Int64 `tfsdk:"id" json:"id,omitempty"` + UserId *int64 `tfsdk:"user_id" json:"userId"` + Name *string `tfsdk:"name" json:"name"` + PublicKey *string `tfsdk:"public_key" json:"publicKey"` + Id types.Int64 `tfsdk:"id" json:"id,omitempty"` } func (r *VirtfusionSSHResource) Metadata(ctx context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) { @@ -60,11 +59,6 @@ func (r *VirtfusionSSHResource) Schema(ctx context.Context, req resource.SchemaR Description: "Public Key", Required: true, }, - "public_key_hash": schema.StringAttribute{ - Description: "Public Key Hash", - Computed: true, - Default: nil, - }, "id": schema.Int64Attribute{ Description: "SSH Key ID", Computed: true, @@ -263,7 +257,6 @@ func (r *VirtfusionSSHResource) Read(ctx context.Context, req resource.ReadReque } data.Name = &responseData.Data.Name - data.PublicKeyHash = types.StringValue(responseData.Data.PublicKeyHash) // Save updated data into Terraform state resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)