Giter Club home page Giter Club logo

terraform-provider-vultr's Introduction

Vultr Terraform Provider

This is a Terraform provider for Vultr. Find out more about Vultr.

Build Status Go Report Card

Requirements

  • A Vultr account and API key
  • Terraform 0.12+
  • Go 1.8 (to build the provider plugin)

Usage

Download terraform-provider-vultr from the releases page and follow the instructions to install it as a plugin. After placing it into your plugins directory, run terraform init to initialize it.

Note: in order to build and install the provider from the latest commit on master, run:

go get -u github.com/squat/terraform-provider-vultr

and then register the plugin by symlinking the binary to the third-party plugins directory:

mkdir -p ~/.terraform.d/plugins
ln -s "$GOPATH/bin/terraform-provider-vultr" ~/.terraform.d/plugins/terraform-provider-vultr

Set an environment variable containing the Vultr API key:

export VULTR_API_KEY=<your-vultr-api-key>

Note: as an alternative, the API key can be specified in configuration as shown below.

Examples

// Configure the Vultr provider. 
// Alternatively, export the API key as an environment variable: `export VULTR_API_KEY=<your-vultr-api-key>`.
provider "vultr" {
  api_key = "<your-vultr-api-key>"
}

// Find the ID of the Silicon Valley region.
data "vultr_region" "silicon_valley" {
  filter {
    name   = "name"
    values = ["Silicon Valley"]
  }
}

// Find the ID for CoreOS Container Linux.
data "vultr_os" "container_linux" {
  filter {
    name   = "family"
    values = ["coreos"]
  }
}

// Find the ID for a starter plan.
data "vultr_plan" "starter" {
  filter {
    name   = "price_per_month"
    values = ["5.00"]
  }

  filter {
    name   = "ram"
    values = ["1024"]
  }
}

// Find the ID of an existing SSH key.
data "vultr_ssh_key" "squat" {
  filter {
    name   = "name"
    values = ["squat"]
  }
}

// Create a Vultr virtual machine.
resource "vultr_instance" "example" {
  name              = "example"
  region_id         = "${data.vultr_region.silicon_valley.id}"
  plan_id           = "${data.vultr_plan.starter.id}"
  os_id             = "${data.vultr_os.container_linux.id}"
  ssh_key_ids       = ["${data.vultr_ssh_key.squat.id}"]
  hostname          = "example"
  tag               = "container-linux"
  firewall_group_id = "${vultr_firewall_group.example.id}"
}

// Create a new firewall group.
resource "vultr_firewall_group" "example" {
  description = "example group"
}

// Add a firewall rule to the group allowing SSH access.
resource "vultr_firewall_rule" "ssh" {
  firewall_group_id = "${vultr_firewall_group.example.id}"
  cidr_block        = "0.0.0.0/0"
  protocol          = "tcp"
  from_port         = 22
  to_port           = 22
}

Development

To develop the plugin locally, install the following dependencies:

  • Go 1.8 (to build the provider plugin)
  • Glide (to install and maintain dependencies)
  • glide-vc (to clean up dependencies)

To build the plugin run:

make build

To update Go dependencies run:

make vendor

terraform-provider-vultr's People

Contributors

2color avatar afady avatar bastibrunner avatar jdmulloy avatar mlazowik avatar neliseev avatar squat avatar teh-username avatar yeongjukang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

terraform-provider-vultr's Issues

“Provider doesn’t support data source” for resource vultr_startup_script

When creating startup scripts at a different level in Terraform than the resources that will consume them, it would be enormously helpful to be able to lookup their IDs by Description or Name (as is possible for Firewall Groups and SSH Keys).

resource "vultr_instance" "server" { ... startup_script_id = "${data.vultr_startup_script.script1.id}" } data "vultr_startup_script" "script1" { filter { name = "name" values = ["script1"] } }

returns “Provider doesn’t support data source”.

mac sierra install error

this is my first Terraform experience, so this might be a Terraform bug, but I get this error on Mac

( note, I can download the binary and add it to the terraform.d/plugins/darwin_amd64 folder and it works)

➜ ~ go get -u github.com/squat/terraform-provider-vultr
➜ ~ mkdir -p ~/.terraform.d/plugins
ln -s "$GOPATH/bin/terraform-provider-vultr" ~/.terraform.d/plugins/terraform-provider-vultr

➜ folkbot-debops git:(master) ✗ cd terraform/vultr/coreos
➜ coreos git:(master) ✗ terraform init

Initializing the backend...

Initializing provider plugins...

  • Checking for available provider plugins...

Provider "vultr" not available for installation.

A provider named "vultr" could not be found in the Terraform Registry.

This may result from mistyping the provider name, or the given provider may
be a third-party provider that cannot be installed automatically.

In the latter case, the plugin must be installed manually by locating and
downloading a suitable distribution package and placing the plugin's executable
file in the following directory:
terraform.d/plugins/darwin_amd64

Terraform detects necessary plugins by inspecting the configuration and state.
To view the provider versions requested by each module, run
"terraform providers".

How do we assign an IPv6 address to a server?

Have tried setting the ipv6 flag
ipv6 = true
but its 0,

ipv6:                 "" => "true" (forces new resource)
ipv6_address.#:       "0" => <computed>

Is this supported? If so, how do we assign one?

Add support for plan changes

I can see that this provider can handle O/S and application changes. Consulting the Vultr API it looks like there is an ability to change plans via /v1/server/upgrade_plan which would be helpful via terraform if you've underestimated capacity requirements, particularly over time when an application's requirements increase due to load.

I have tested changing plan manually via Vultr and then updating my tf to the new plan and validating via terraform, and it reports no changes are required. This means I can at least handle this situation manually if I'm careful.

Note: shrinking to a lower plan isn't possible, so the implementation will need to account for that by consulting /v1/server/upgrade_plan_list

internalizing fatih's structs

Hi @squat.
I am working on internalizing fatih's structs library following your guide with just copying whole package and modifying some.
I thought about switching current methods for interface as functions also, but there could be potential problems so suggesting this way.
Would it be okay for u to locate it at 'PROJECT_ROOT/lib/structs' in this way?

Mismatched Cidr Notation

Hi,

First off great work on this plugin, just started using it for an internal project for which it works great.

Only issue I've noticed is that when creating a new network in Vultr in this instance "192.168.1.0/27" (changed from /28) the number gets increased by 1 so /27 becomes /28.

Is this something that could be looked into ?

image

Operating System: Windows 10
Terraform version: v0.11.8
Plugin version: latest

If you need anything further, then please let me know!

Best Regards,

Mark Woolley

Firewall rules with port ranges always recreated

It seems like there is an unmarshalling error here. Any firewall rules with a port range are recreated on every plan/apply.

Terraform code

resource "vultr_firewall_rule" "home_zabbix" {
  firewall_group_id = "${vultr_firewall_group.default.id}"
  cidr_block = "${var.home_ipv4}/32"
  protocol = "tcp"
  from_port = "10050"
  to_port = "10051"
}

resource "vultr_firewall_rule" "home_mosh" {
  firewall_group_id = "${vultr_firewall_group.default.id}"
  cidr_block = "${var.home_ipv4}/32"
  protocol = "tcp"
  from_port = "60000"
  to_port = "61000"
}

Output

-/+ vultr_firewall_rule.home_mosh (new resource required)
      id:                "fe129394/23" => <computed> (forces new resource)
      action:            "accept" => <computed>
      cidr_block:        "192.168.1.1/32" => "192.168.1.1/32"
      direction:         "in" => <computed>
      firewall_group_id: "fe129394" => "fe129394"
      from_port:         "0" => "60000" (forces new resource)
      protocol:          "tcp" => "tcp"
      to_port:           "0" => "61000" (forces new resource)

-/+ vultr_firewall_rule.home_zabbix (new resource required)
      id:                "fe129394/22" => <computed> (forces new resource)
      action:            "accept" => <computed>
      cidr_block:        "192.168.1.1/32" => "192.168.1.1/32"
      direction:         "in" => <computed>
      firewall_group_id: "fe129394" => "fe129394"
      from_port:         "0" => "10050" (forces new resource)
      protocol:          "tcp" => "tcp"
      to_port:           "0" => "10051" (forces new resource)

Backup Options

The ability to add Vulr integrated backups is excellent.

A couple of critical parameters which should be able to be specified programatically (and, sensibly defaulted) -

Frequency: instead of once per week, once every few days is what we would like to default
Time: 13:00 UTC is out preferred time, local time adjusted

Destroy step shows failed status but actually deletes the server

Hi,
I was using this to create and destroy Vultr machines, but recently started to get failures on the Destroy step (it says failed but does the job 🤣 server gets deleted, just the exit code is bad and logs an error, below).

My Terraform files did not change, so this might be a bug. I install latest version of the provider always. Here are the logs I get when applying a destroy:

17:49:24 
17:49:24 Initializing the backend...
17:49:25 
17:49:25 Successfully configured the backend "s3"! Terraform will automatically
17:49:25 use this backend unless the backend configuration changes.
17:49:25 
17:49:25 Initializing provider plugins...
17:49:25 
17:49:25 The following providers do not have any version constraints in configuration,
17:49:25 so the latest version was installed.
17:49:25 
17:49:25 To prevent automatic upgrades to new major versions that may contain breaking
17:49:25 changes, it is recommended to add version = "..." constraints to the
17:49:25 corresponding provider blocks in configuration, with the constraint strings
17:49:25 suggested below.
17:49:25 
17:49:25 * provider.vultr: version = "~> 0.1"
17:49:25 
17:49:25 Terraform has been successfully initialized!
17:49:25 
17:49:25 You may now begin working with Terraform. Try running "terraform plan" to see
17:49:25 any changes that are required for your infrastructure. All Terraform commands
17:49:25 should now work.
17:49:25 
17:49:25 If you ever set or change modules or backend configuration for Terraform,
17:49:25 rerun this command to reinitialize your working directory. If you forget, other
17:49:25 commands will detect it and remind you to do so if necessary.
17:49:27 data.vultr_os.ubuntu: Refreshing state...
17:49:27 data.vultr_region.chosen_region: Refreshing state...
17:49:27 data.vultr_ssh_key.ansible: Refreshing state...
17:49:28 vultr_instance.vultr_server: Refreshing state... (ID: 20052301)
17:49:30 vultr_instance.vultr_server: Destroying... (ID: 20052301)
17:49:31 
17:49:31 Error: Error applying plan:
17:49:31 
17:49:31 1 error(s) occurred:
17:49:31 
17:49:31 * vultr_instance.vultr_server (destroy): 1 error(s) occurred:
17:49:31 
17:49:31 * vultr_instance.vultr_server: Error destroying instance (20052301): Unable to destroy server: Server is already pending destruction.
17:49:31 

Hope it helps :)
in my case for now I just ignore the error status because it fails always, but it works... maybe there was a Vultr api change recently, that drives the plugin crazy :)

Recommendations for working with Vultr API Rate Limiting

When creating/destroying 2+ concurrent "stacks" (Firewall rules, Startup scripts, SSH Keys, Instances) we are hitting heavy rate limiting from the Vultr API. Are there any recommended settings or mitigations to workaround this other than retrying many times?

Add firewall group as data source

This would allow folks to provision their firewalls as a seperate service and then depend on them for instance creation terraform files.

API Rate Limit Exceeded Errors

I keep getting API rate limit exceeded errors, even when setting parallism to 1 or 0... is there a way to configure this?


* module.firewall2.vultr_firewall_rule.icmp_rule: vultr_firewall_rule.icmp_rule: 
Error getting firewall rule (c5a8d199/1): Rate limit reached - please try your request again later.  
Current rate limit: 2 requests/sec

Automatic PTR records, reverse DNS

Relates to issue #34 but not quite the same as it has nothing to do with Reserved IPs.

Upon initial provisioning, can we expose a Boolean (defaulting to 'true') that would configure both IPv4 and IPv4 public addresses with the PTR record or reverse DNS lookup that matches the fully qualified domain name (FQDN)?

Sensible Defaults

This plugin is fantastic, but should set sensible defaults appropriate to the wider infrastructure, community and scene in which is adds value.

Eg,

IPv6 should default to = true

PTR (reverse Hostname lookup), should default to == forward hostname

Initialize Connection Info in Resource Instance

Hey @squat,

For other cloud providers I noticed that when you perform provisioner blocks on a resource , you can get away with very little info in the connection block. This is due to the provider initializing / defaulting certain fields as part of the resource_instance.go code.

Current Example Usage for Vultr:

  provisioner "remote-exec" {
    inline = ["cd /tmp","ls -la"]
    connection {
      host        = "${self.ipv4_address}"
      type        = "ssh"
      user        = "root"
      password    = "${self.default_password}"
      private_key = "${file("~/.ssh/jcommu.pem")}"
      timeout     = "2m"
    }
  }

To get the above working I needed to specify the host, type, user, password, and private_key. Based on how Vultr provisions, we should be able to let users of this provider call a provisioner block without passing any connection info.

Requested Usage for Vultr:

  provisioner "remote-exec" {
    inline = ["cd /tmp","ls -la"]
  }

How to make this work?
In resource_instance.go as part of the resourceInstanceRead function, add the following

	// Initialize the connection info
	d.SetConnInfo(map[string]string{
		"type": "ssh",
		"host": --get IPv4 from read--,
                "user": "root",
                "password": --getDefaultPassword from read--,
	})

In this case, a user could provide a private_key or user as an over-ride if the like, but it will not be required.

Examples for startup script & IP address

Hi @squat,

Been having an awesome time with this provider, thanks again. Only things I cannot figure are

  • How to add and apply a startup script to an instance

  • How to get IPv4 addresses when provisioning multiple instances via count

I can get it to work for a single instance, but not with multiple.

output ip_addresses {
  value = "${vultr_instance.my_node.hostname} ${vultr_instance.my_node.ipv4_address}"
}

-------------OUTPUT---------------

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Releasing state lock. This may take a few moments...

utputs:

ip_addresses = my_node_0 XXX.XX.XXX.XX

Any help is much appreciated.

Add support for snapshots

Vultr's API allows you to create servers from an existing snapshot by using OS ID 164 ("Snapshot") and by specifying a snapshot id. Choosing the correct OS ID is easy, but this provider doesn't appear to support specifying a snapshot id.

Changing or Removing the default IP forces the whole domain to be recreated

If you want to change the IP of the apex A record of a domain this plugin will tear down the whole domain and recreate it. This is unnecessary and could result in downtime. As far as I can tell the Vultr API doesn't care about the IP you give the create_domain api call, after you've created the domain. It seems they just want an IP so they can make the apex record for you. They also annoyingly create MX records for you. The domain object should probably not force a new resource when this IP changes. Being able to refer to a record resource might be useful, although may be tricky to implement.

unexpected VoIP port open after executing `terraform apply` with `examples/kubernetes`

First, just want to say thanks for some great code.

So a couple things I am wondering about.

The following port was open on the controller, do you happen have an idea why it's needed?:

    1720/tcp open   h323q931

I also noticed (in this ipxe tmpl and this install yaml ) an ip address for endpoints and was wondering if it is related to matchbox / ignition, or something similar. What were the output of these two endpoints:

Thanks

Enabling Autobackups

The Vultr choice for 'autobackups' seems to be a boolean, can this be added to the vultr_instance type please so we can have auto backups?

Terraform always wants to recreate new instances

Each time I plan, Terraform wants to recreate the instance that I already have, even if there haven't been any changes to it. The relevant line in the output is:

id:                   "11884440" => <computed> (forces new resource)

I guess since the ID isn't specified in the input files, Terraform always detects this as something that needs to be updated, and so an apply will always destroy the instance and create a new one.

If I have time in the coming weeks I can try to get a PR for this, but it would take some time becoming familiar with the source and looking into how other providers handle this.

IPv6 Firewall rules always recreated

Hello,

Thanks for making the provider. I'm working on setting up Terraform to manage my Vultr resources. I'm setting up a new firewall group since I can't import my existing group and editing testate isn't worth the effort. I'm having an issue with my IPv6 rules to allow access from ::/0. Terraform always wants to delete and recreate them, because it's seeing the cider_block as being 0.0.0.0/0 instead of ::/0. It creates the rules just fine, it just doesn't believe that they are setup.

Terraform DSL

resource "vultr_firewall_group" "default" {
  description = "Terraform managed firewall group"
}

resource "vultr_firewall_rule" "ipv6_test" {
  firewall_group_id = "${vultr_firewall_group.default.id}"
  cidr_block = "::/0"
  protocol = "tcp"
  from_port = "444"
  to_port = "444"
}

Terraform plan output

root@server1:/data/terraform/jdmulloy-vultr-terraform # terraform plan --target vultr_firewall_rule.ipv6_test                                                                                          
Refreshing Terraform state in-memory prior to plan...                                              
The refreshed state will be used to calculate this plan, but will not be                           
persisted to local or remote state storage.      

vultr_firewall_group.default: Refreshing state... (ID: c695ecf4)                                   
vultr_firewall_rule.ipv6_test: Refreshing state... (ID: c695ecf4/33)                               

------------------------------------------------------------------------                           

An execution plan has been generated and is shown below.                                           
Resource actions are indicated with the following symbols:                                         
-/+ destroy and then create replacement          

Terraform will perform the following actions:    

-/+ vultr_firewall_rule.ipv6_test (new resource required)                                          
      id:                "c695ecf4/33" => <computed> (forces new resource)                         
      action:            "accept" => <computed>  
      cidr_block:        "0.0.0.0/0" => "::/0" (forces new resource)                               
      direction:         "in" => <computed>      
      firewall_group_id: "c695ecf4" => "c695ecf4"                                                  
      from_port:         "444" => "444"          
      protocol:          "tcp" => "tcp"          
      to_port:           "444" => "444"          


Plan: 1 to add, 0 to change, 1 to destroy.

Incompatible API version with plugin. Plugin version: 4, Client versions: [5]

it seems like the latest version of the plugin isn't compatible with the latest version of terraform. i'll downgrade terraform to a stable version and try again.

$ terraform --version
Terraform v0.12.0-dev
+ provider.vultr (unversioned)
$ terraform init

Initializing the backend...

Initializing provider plugins...

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
$ terraform plan

Error: Failed to instantiate provider "vultr" to obtain schema: Incompatible API version with plugin. Plugin version: 4, Client versions: [5]

[Feature] Add App List as Data Type

Having this provider return an App ID based on similar inputs as plan/os/region, would be awesome. It is the only data type missing to make this feature complete.

 jcommu@justin  ~/Development/azohra/tf-vultr-instance  master v1.1.0 ●  vultr apps                                                                                                                                                                                                                                                                                                                                                                                                                                                 2 ↵  10568  08:48:19
APPID	NAME		SHORT_NAME	DEPLOY_NAME			SURCHARGE
7	cPanel		cpanel		cPanel on CentOS 6 x64		15
17	Docker		docker		Docker on CentOS 7 x64		0
15	Drupal		drupal		Drupal on CentOS 6 x64		0
29	GitLab		gitlab		GitLab on CentOS 6 x64		0
21	Joomla		joomla		Joomla on CentOS 6 x64		0
19	LAMP		lamp		LAMP on CentOS 6 x64		0
1	LEMP		lemp		LEMP on CentOS 6 x64		0
33	Magento		magento		Magento on CentOS 6 x64		0
23	Mediawiki	mediawiki	Mediawiki on CentOS 6 x64	0
3	Minecraft	minecraft	Minecraft on CentOS 6 x64	0
27	Nextcloud	nextcloud	Nextcloud on CentOS 6 x64	0
6	OpenVPN		openvpn		OpenVPN on CentOS 6 x64		0
5	ownCloud	owncloud	ownCloud on CentOS 6 x64	0
25	PrestaShop	prestashop	PrestaShop on CentOS 6 x64	0
4	Webmin		webmin		Webmin on CentOS 6 x64		0
2	WordPress	wordpress	WordPress on CentOS 6 x64	0```

Windows Binaries?

Hi,

Can you please provide Windows Binaries please? I'm a noob and I don't know how to compile Go on Windows.

[Feature request] Documentation improvement

Hi!
First of all thanks for the plugin!
I didn't find any documentation except examples folder, maybe this plugin should have a page with all options and features listed in one organized list so it will be easy to find every option that it provides?

For example I have no idea how to output the created server IP after it gets created, which field do I search for? Things like this can be listed in a separate page. I can help create that page with summary of all options.

Create from snapshot

Creation from snapshot works fine, e.g.:

data "vultr_os" "custom" {
  filter {
    name   = "family"
    values = ["snapshot"]
  }
}

data "vultr_snapshot" "master" {
  description_regex = "3_bootstrap_scripts"
}

however, once the servers are installed, terraform plan will return:

Terraform will perform the following actions:

  ~ vultr_instance.example[0]
      os_id: "159" => "164"

  ~ vultr_instance.example[1]
      os_id: "159" => "164"

It wants to change the os_id of the server from 159 (Custom) to 164 (Snapshot). It seems like the servers at vultrs side are actually listed as custom, not snapshot once they are fully installed.

I don't know if that's fixable or if a workaround in the tf file is needed, if even possible.

[Feature Request] Implement Importer

Affected Resource(s)

vultr_*

I'm a latecomer in the terraform ecosystem. I wonder, without having done a deep dive if it would be as simple as just implementing those lines:
https://github.com/terraform-providers/terraform-provider-fastly/blob/2dc6f92829de934b54ba7bdcf7f4f7a7aae6a9a2/fastly/resource_fastly_service_v1.go#L24-L26

Docs on resource importer:
https://github.com/hashicorp/terraform/blob/351c6bed79abbb40e461d3f7d49fe4cf20bced41/helper/schema/resource_importer.go

If would be really nice to have that feature. I'm unfortunately not really firm in go programming, else I'd have already done a PR.

vultr_instance.example: One of "application_id" and "snapshot_id" must be provided but not both

Im seeing this when trying to run a modified example

vultr_instance.example: One of "application_id" and "snapshot_id" must be provided but not both

// Configure the Vultr provider.
// Alternatively, export the API key as an environment variable: `export VULTR_API_KEY=<your-vultr-api-key>`.
provider "vultr" {
  api_key = "xxxxxxxxxxxxx"
}

data "vultr_region" "london" {
  filter {
    name   = "name"
    values = ["London"]
  }
}

data "vultr_os" "centos" {
  filter {
    name   = "name"
    values = ["CentOS 7 x64"]
  }
}

// Find the ID for a starter plan.
data "vultr_plan" "starter" {
  filter {
    name   = "price_per_month"
    values = ["5.00"]
  }

  filter {
    name   = "ram"
    values = ["1024"]
  }
}

// Find the ID of an existing SSH key.
data "vultr_ssh_key" "laptop" {
  filter {
    name   = "name"
    values = ["Laptop"]
  }
}

resource "vultr_network" "network" {
//  count       = 2
  cidr_block  = "10.0.0.0/24"
  description = "test_${count.index}"
  region_id   = "${data.vultr_region.london.id}"
}

// Create a Vultr virtual machine.
resource "vultr_instance" "example" {
  name              = "example"
  region_id         = "${data.vultr_region.london.id}"
  plan_id           = "${data.vultr_plan.starter.id}"
  os_id             = "${data.vultr_os.centos.id}"
  ssh_key_ids       = ["${data.vultr_ssh_key.laptop.id}"]
  network_ids       = ["${vultr_network.network.id}"]

  tag               = "test"

  firewall_group_id = "${vultr_firewall_group.example.id}"
//  private_networking = true
}

// Create a new firewall group.
resource "vultr_firewall_group" "example" {
  description = "example group"
}

// Add a firewall rule to the group allowing SSH access.
resource "vultr_firewall_rule" "ssh" {
  firewall_group_id = "${vultr_firewall_group.example.id}"
  cidr_block        = "0.0.0.0/0"
  protocol          = "tcp"
  from_port         = 22
  to_port           = 22
}

Feature request - parameterise email notification on server creation

According to Vultr support, their API supports a flag to disable emails at compute creation time.. this would be fantastic as a new feature for this plugin (as when pushing via API/Terraform, you can receive a lot of emails in a short space of time).

notify_activate string (optional, default 'yes') 'yes' or 'no'. If yes, an activation email will be sent when the server is ready.

Error: vultr_ssh_key.squat: 1 error(s) occurred:

just installed your provider and when I try to terraform plan one of your examples it's erroring out on:

`* vultr_ssh_key.squat: file: open /Users/zoeycluff/lserven.ssh: no such file or directory in:

${file("~/lserven.ssh")}
`
where do I adjust where my ssh key is located?

Publish release with tf 0.12 support

v0.12 is out of beta, and the readme here points to the releases page (and claims to support '0.9+') - so I think it'd be a good idea to publish a release with that support (which is in master) assuming it's fairly stable. If not, perhaps a note in the readme instead (>=0.9, <0.12)?

coreos provisioning

I've been using the provider for a couple of days and it's working well.

Normally, CoreOS is provisioned with either coreos-cloudinit or Ignition

What is the recommended way to do that with Vultr?

[Feature] Import Existing Resources

Hey @squat,

I have been working on building a set of modules for this provider to put on the terraform registry. When I went to get some support on the Terraform Gitter, I got heckled for not having importer functionality. I actually was not even aware of it until that conversation.

What are your thoughts on it?
https://www.terraform.io/docs/import/usage.html

I was thinking of having a crack if it is something other people thing we need.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.