terraform-oci-compute-instance icon indicating copy to clipboard operation
terraform-oci-compute-instance copied to clipboard

make cloudinit content easier to pass to instance

Open kral2 opened this issue 3 years ago • 1 comments

Community Note

  • Please vote on this issue by adding a 👍 reaction to the original issue to help the community and maintainers prioritize this request
  • Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
  • If you are interested in working on this issue or have submitted a pull request, please leave a comment

Description

Currently, cloud-init script content can be passed to an instance using var.user_data. This is in line with the provider argument, but it is not really explicit from a user perspective. Also, the content of user_data needs to be provided in the correct format: a base64-encoded string.

The proposition is to use var.cloud_init_file to provide the content of user_data to oci_core_instance. This would effectively deprecate var.user_data from the module.

Cloud-init files being mostly multi-line, it is probably more easy to restrict the input to be a file, rather than allow for any arbitrary string. Multi-line strings are possible using HEREDOC strings, but it would only add complexity without real benefits for the user.

New or Affected Resource(s)

oci_core_instance

Potential Terraform Configuration

metadata = {
...
user_data = var.cloud_init_file != "disabled" ? "${filebase64(var.cloud_init_file)}" : null
...
}

  • [ ] implement the new feature
  • [ ] add examples

References

Terraform Filebase64 Function

kral2 avatar Sep 27 '21 11:09 kral2

i do really think the proposition is useless and current implementation is totally fine..

what';s wrong with the example you provided in that issue #86 ??

user_data = filebase64(var.some_user_data_variable)

and what do you propose instead of this:

  user_data = base64encode(
    templatefile(
      "${path.module}/cloud-init.sh.tftpl",
      {
        image            = var.image,
        args             = var.image_args,
        vpn_vendor       = var.vpn_vendor,
        vpn_username     = var.vpn_username,
        vpn_password     = var.vpn_password,
      }
    )
  )

??

vadyochik avatar Jul 05 '22 21:07 vadyochik