contrib/terraform-testing-infrastructure/modules/cloud-init-config/main.tf (84 lines of code) (raw):

# # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # variable "software_root" {} variable "zookeeper_dir" {} variable "hadoop_dir" {} variable "accumulo_dir" {} variable "maven_version" {} variable "zookeeper_version" {} variable "hadoop_version" {} variable "accumulo_branch_name" {} variable "accumulo_version" {} variable "authorized_ssh_keys" {} variable "os_distro" {} variable "os_version" {} variable "lvm_mount_point" { default = null description = "Mount point for the LVM volume containing managed disks. If not specified, then no LVM volume is created." nullable = true } variable "lvm_disk_count" { default = null description = "Number of disks to be combined in an LVM volume. If lvm_mount_point is not specified, this is not used." nullable = true } variable "cloudinit_merge_type" { default = "dict(recurse_array,no_replace)+list(append)" nullable = false } variable "optional_cloudinit_config" { default = "" nullable = false } variable "cluster_type" { type = string nullable = false validation { condition = contains(["aws", "azure"], var.cluster_type) error_message = "The value of cluster_type must be either 'aws' or 'azure'." } } ##################### # Create Hadoop Key # ##################### resource "tls_private_key" "hadoop" { algorithm = "RSA" rsa_bits = "4096" } ################################ # Generate Cloud Init Template # ################################ locals { ssh_keys = concat(var.authorized_ssh_keys, tls_private_key.hadoop.public_key_openssh[*]) cloud_init_script = templatefile("${path.module}/templates/cloud-init.tftpl", { files_path = "${path.module}/files" software_root = var.software_root zookeeper_dir = var.zookeeper_dir hadoop_dir = var.hadoop_dir accumulo_dir = var.accumulo_dir maven_version = var.maven_version zookeeper_version = var.zookeeper_version hadoop_version = var.hadoop_version accumulo_branch_name = var.accumulo_branch_name accumulo_version = var.accumulo_version authorized_ssh_keys = local.ssh_keys[*] lvm_mount_point = var.lvm_mount_point != null ? var.lvm_mount_point : "" lvm_disk_count = var.lvm_disk_count != null ? var.lvm_disk_count : "" os_distro = var.os_distro os_version = var.os_version centos7 = substr(var.os_version, 0, 1) == "7" ? "true" : "false" cluster_type = var.cluster_type hadoop_public_key = indent(6, tls_private_key.hadoop.public_key_openssh) hadoop_private_key = indent(6, tls_private_key.hadoop.private_key_pem) }) } data "cloudinit_config" "cfg" { gzip = false base64_encode = false part { filename = "init.cfg" content_type = "text/cloud-config" content = local.cloud_init_script } # Allow for a user-specified cloud-init script to be passed in. # This will always be included, but if it's empty then cloud-init # will ignore it. part { filename = "userdefined.cfg" content_type = "text/cloud-config" merge_type = var.cloudinit_merge_type content = var.optional_cloudinit_config } } output "cloud_init_data" { value = data.cloudinit_config.cfg.rendered }