diff --git a/images/daos-client-image.json b/images/daos-client-image.json deleted file mode 100644 index d38d006..0000000 --- a/images/daos-client-image.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "variables": { - "daos_version": "{{env `DAOS_VERSION`}}" - }, - "builders": [ - { - "type": "googlecompute", - "name": "daos-client-hpc-centos-7", - "account_file": "{{user `account_file`}}", - "project_id": "{{user `project_id`}}", - "source_image_project_id": [ - "cloud-hpc-image-public" - ], - "source_image_family": "hpc-centos-7", - "image_name": "daos-client-hpc-centos-7-v{{isotime \"20060102-030405\"}}", - "image_family": "daos-client-hpc-centos-7", - "machine_type": "n1-standard-16", - "disk_size": "20", - "ssh_username": "packer", - "zone": "{{user `zone`}}", - "scopes": [ - "https://www.googleapis.com/auth/cloud-platform" - ], - "metadata": { - "enable-oslogin": "False" - } - } - ], - "provisioners": [ - { - "type": "shell", - "environment_vars": [ - "DAOS_REPO_BASE_URL={{user `daos_repo_base_url`}}", - "DAOS_VERSION={{user `daos_version`}}", - "DAOS_INSTALL_TYPE=client" - ], - "execute_command": "echo 'packer' | sudo -S env {{ .Vars }} {{ .Path }}", - "pause_before": "5s", - "scripts": [ - "./scripts/tune.sh", - "./scripts/install_daos.sh" - ] - } - ] -} diff --git a/images/daos-client-image.pkr.hcl b/images/daos-client-image.pkr.hcl new file mode 100644 index 0000000..cfd25ac --- /dev/null +++ b/images/daos-client-image.pkr.hcl @@ -0,0 +1,53 @@ +packer { + required_plugins { + googlecompute = { + version = ">= v1.0.11" + source = "github.com/hashicorp/googlecompute" + } + } +} + +variable "daos_repo_base_url" { + type = string +} +variable "daos_version" { + type = string +} +variable "project_id" { + type = string +} +variable "zone" { + type = string +} + +source "googlecompute" "daos-client-hpc-centos-7" { + disk_size = "20" + image_family = "daos-client-hpc-centos-7" + image_guest_os_features = ["GVNIC"] + image_name = "daos-client-hpc-centos-7-v${formatdate("YYYYMMDD-hhmmss", timestamp())}" + machine_type = "n1-standard-16" + metadata = { + enable-oslogin = "False" + } + project_id = "${var.project_id}" + scopes = ["https://www.googleapis.com/auth/cloud-platform"] + source_image_family = "hpc-centos-7" + source_image_project_id = ["cloud-hpc-image-public"] + ssh_username = "packer" + zone = "${var.zone}" +} + +build { + sources = ["source.googlecompute.daos-client-hpc-centos-7"] + + provisioner "shell" { + environment_vars = ["DAOS_REPO_BASE_URL=${var.daos_repo_base_url}", "DAOS_VERSION=${var.daos_version}", "DAOS_INSTALL_TYPE=client"] + execute_command = "echo 'packer' | sudo -S env {{ .Vars }} {{ .Path }}" + pause_before = "5s" + scripts = [ + "./scripts/tune.sh", + "./scripts/install_daos.sh" + ] + } + +} diff --git a/images/daos-server-image.json b/images/daos-server-image.json deleted file mode 100644 index 7105463..0000000 --- a/images/daos-server-image.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "variables": { - "daos_version": "{{env `DAOS_VERSION`}}" - }, - "builders": [ - { - "type": "googlecompute", - "name": "daos-server-centos-7", - "account_file": "{{user `account_file`}}", - "project_id": "{{user `project_id`}}", - "source_image_project_id": [ - "centos-cloud" - ], - "source_image_family": "centos-7", - "image_name": "daos-server-centos-7-v{{isotime \"20060102-030405\"}}", - "image_family": "daos-server-centos-7", - "machine_type": "n1-standard-16", - "disk_size": "20", - "ssh_username": "packer", - "zone": "{{user `zone`}}", - "scopes": [ - "https://www.googleapis.com/auth/cloud-platform" - ], - "metadata": { - "enable-oslogin": "False" - } - } - ], - "provisioners": [ - { - "type": "shell", - "execute_command": "echo 'packer' | sudo -S env {{ .Vars }} {{ .Path }}", - "environment_vars": [ - "DAOS_REPO_BASE_URL={{user `daos_repo_base_url`}}", - "DAOS_VERSION={{user `daos_version`}}", - "DAOS_INSTALL_TYPE=server" - ], - "pause_before": "5s", - "scripts": [ - "./scripts/tune.sh", - "./scripts/install_daos.sh" - ] - } - ] -} diff --git a/images/daos-server-image.pkr.hcl b/images/daos-server-image.pkr.hcl new file mode 100644 index 0000000..ffe0945 --- /dev/null +++ b/images/daos-server-image.pkr.hcl @@ -0,0 +1,53 @@ +packer { + required_plugins { + googlecompute = { + version = ">= v1.0.11" + source = "github.com/hashicorp/googlecompute" + } + } +} + +variable "daos_repo_base_url" { + type = string +} +variable "daos_version" { + type = string +} +variable "project_id" { + type = string +} +variable "zone" { + type = string +} + +source "googlecompute" "daos-server-centos-7" { + disk_size = "20" + image_family = "daos-server-centos-7" + image_guest_os_features = ["GVNIC"] + image_name = "daos-server-centos-7-v${formatdate("YYYYMMDD-hhmmss", timestamp())}" + machine_type = "n1-standard-16" + metadata = { + enable-oslogin = "False" + } + project_id = "${var.project_id}" + scopes = ["https://www.googleapis.com/auth/cloud-platform"] + source_image_family = "centos-7" + source_image_project_id = ["centos-cloud"] + ssh_username = "packer" + zone = "${var.zone}" +} + +build { + sources = ["source.googlecompute.daos-server-centos-7"] + + provisioner "shell" { + environment_vars = ["DAOS_REPO_BASE_URL=${var.daos_repo_base_url}", "DAOS_VERSION=${var.daos_version}", "DAOS_INSTALL_TYPE=server"] + execute_command = "echo 'packer' | sudo -S env {{ .Vars }} {{ .Path }}" + pause_before = "5s" + scripts = [ + "./scripts/tune.sh", + "./scripts/install_daos.sh" + ] + } + +} diff --git a/images/packer_cloudbuild-client.yaml b/images/packer_cloudbuild-client.yaml index 864229e..c706584 100644 --- a/images/packer_cloudbuild-client.yaml +++ b/images/packer_cloudbuild-client.yaml @@ -14,14 +14,14 @@ steps: - name: 'gcr.io/$PROJECT_ID/packer' + entrypoint: '/bin/bash' args: - - build - - -var - - project_id=${_PROJECT_ID} - - -var - - zone=${_ZONE} - - -var - - daos_version=${_DAOS_VERSION} - - -var - - daos_repo_base_url=${_DAOS_REPO_BASE_URL} - - daos-client-image.json + - '-c' + - | + /usr/bin/packer init daos-client-image.pkr.hcl && \ + /usr/bin/packer build \ + -var daos_repo_base_url=${_DAOS_REPO_BASE_URL} \ + -var daos_version=${_DAOS_VERSION} \ + -var project_id=${_PROJECT_ID} \ + -var zone=${_ZONE} \ + daos-client-image.pkr.hcl diff --git a/images/packer_cloudbuild-server.yaml b/images/packer_cloudbuild-server.yaml index 54b9489..86c41ba 100644 --- a/images/packer_cloudbuild-server.yaml +++ b/images/packer_cloudbuild-server.yaml @@ -14,14 +14,14 @@ steps: - name: 'gcr.io/$PROJECT_ID/packer' + entrypoint: '/bin/bash' args: - - build - - -var - - project_id=${_PROJECT_ID} - - -var - - zone=${_ZONE} - - -var - - daos_version=${_DAOS_VERSION} - - -var - - daos_repo_base_url=${_DAOS_REPO_BASE_URL} - - daos-server-image.json + - '-c' + - | + /usr/bin/packer init daos-server-image.pkr.hcl && \ + /usr/bin/packer build \ + -var daos_repo_base_url=${_DAOS_REPO_BASE_URL} \ + -var daos_version=${_DAOS_VERSION} \ + -var project_id=${_PROJECT_ID} \ + -var zone=${_ZONE} \ + daos-server-image.pkr.hcl diff --git a/terraform/examples/daos_cluster/README.md b/terraform/examples/daos_cluster/README.md index 1ca89d6..1adbe8a 100644 --- a/terraform/examples/daos_cluster/README.md +++ b/terraform/examples/daos_cluster/README.md @@ -233,6 +233,7 @@ No resources. | Name | Description | Type | Default | Required | |------|-------------|------|---------|:--------:| +| [client\_gvnic](#input\_client\_gvnic) | Use Google Virtual NIC (gVNIC) network interface on DAOS clients | `bool` | `false` | no | | [client\_instance\_base\_name](#input\_client\_instance\_base\_name) | MIG instance base names to use | `string` | `"daos-client"` | no | | [client\_labels](#input\_client\_labels) | Set of key/value label pairs to assign to daos-client instances | `any` | `{}` | no | | [client\_machine\_type](#input\_client\_machine\_type) | GCP machine type. ie. c2-standard-16 | `string` | `"c2-standard-16"` | no | @@ -252,6 +253,7 @@ No resources. | [server\_daos\_disk\_count](#input\_server\_daos\_disk\_count) | Number of local ssd's to use | `number` | `16` | no | | [server\_daos\_disk\_type](#input\_server\_daos\_disk\_type) | Daos disk type to use. For now only suported one is local-ssd | `string` | `"local-ssd"` | no | | [server\_daos\_scm\_size](#input\_server\_daos\_scm\_size) | scm\_size | `number` | `200` | no | +| [server\_gvnic](#input\_server\_gvnic) | Use Google Virtual NIC (gVNIC) network interface on DAOS servers | `bool` | `false` | no | | [server\_instance\_base\_name](#input\_server\_instance\_base\_name) | MIG instance base names to use | `string` | `"daos-server"` | no | | [server\_labels](#input\_server\_labels) | Set of key/value label pairs to assign to daos-server instances | `any` | `{}` | no | | [server\_machine\_type](#input\_server\_machine\_type) | GCP machine type. ie. e2-medium | `string` | `"n2-custom-36-215040"` | no | diff --git a/terraform/examples/daos_cluster/main.tf b/terraform/examples/daos_cluster/main.tf index 2cf6424..714065d 100644 --- a/terraform/examples/daos_cluster/main.tf +++ b/terraform/examples/daos_cluster/main.tf @@ -25,9 +25,9 @@ module "daos_server" { daos_disk_type = var.server_daos_disk_type daos_crt_timeout = var.server_daos_crt_timeout daos_scm_size = var.server_daos_scm_size - - service_account = var.server_service_account - pools = var.server_pools + service_account = var.server_service_account + pools = var.server_pools + gvnic = var.server_gvnic } module "daos_client" { @@ -52,4 +52,5 @@ module "daos_client" { service_account = var.client_service_account daos_agent_yml = module.daos_server.daos_agent_yml daos_control_yml = module.daos_server.daos_control_yml + gvnic = var.client_gvnic } diff --git a/terraform/examples/daos_cluster/module.json b/terraform/examples/daos_cluster/module.json index fe672d6..b428076 100644 --- a/terraform/examples/daos_cluster/module.json +++ b/terraform/examples/daos_cluster/module.json @@ -2,6 +2,13 @@ "header": "", "footer": "", "inputs": [ + { + "name": "client_gvnic", + "type": "bool", + "description": "Use Google Virtual NIC (gVNIC) network interface on DAOS clients", + "default": false, + "required": false + }, { "name": "client_instance_base_name", "type": "string", @@ -145,6 +152,13 @@ "default": 200, "required": false }, + { + "name": "server_gvnic", + "type": "bool", + "description": "Use Google Virtual NIC (gVNIC) network interface on DAOS servers", + "default": false, + "required": false + }, { "name": "server_instance_base_name", "type": "string", diff --git a/terraform/examples/daos_cluster/variables.tf b/terraform/examples/daos_cluster/variables.tf index 1c8cf6a..ddfe106 100644 --- a/terraform/examples/daos_cluster/variables.tf +++ b/terraform/examples/daos_cluster/variables.tf @@ -148,7 +148,12 @@ variable "server_daos_scm_size" { variable "server_daos_crt_timeout" { description = "crt_timeout" default = 300 - type = number +} + +variable "server_gvnic" { + description = "Use Google Virtual NIC (gVNIC) network interface on DAOS servers" + default = false + type = bool } variable "client_labels" { @@ -234,3 +239,8 @@ variable "client_preemptible" { type = string } +variable "client_gvnic" { + description = "Use Google Virtual NIC (gVNIC) network interface on DAOS clients" + default = false + type = bool +} diff --git a/terraform/examples/io500/build_daos_io500_images.sh b/terraform/examples/io500/build_daos_io500_images.sh index 73f622c..be974e8 100755 --- a/terraform/examples/io500/build_daos_io500_images.sh +++ b/terraform/examples/io500/build_daos_io500_images.sh @@ -168,8 +168,8 @@ create_tmp_dir() { cp -r "${IMAGES_DIR}" "${TMP_DIR}/" TMP_IMAGES_DIR="${TMP_DIR}/$(basename "${IMAGES_DIR}")" TMP_SCRIPTS_DIR="${TMP_IMAGES_DIR}/scripts" - TMP_CLIENT_PACKER_FILE="${TMP_IMAGES_DIR}/daos-client-image.json" - TMP_SERVER_PACKER_FILE="${TMP_IMAGES_DIR}/daos-server-image.json" + TMP_CLIENT_PACKER_FILE="${TMP_IMAGES_DIR}/daos-client-image.pkr.hcl" + TMP_SERVER_PACKER_FILE="${TMP_IMAGES_DIR}/daos-server-image.pkr.hcl" } cleanup() { @@ -184,7 +184,7 @@ add_script() { script_name="$1" comma="$2" if ! grep -q "${script_name}" "${TMP_CLIENT_PACKER_FILE}"; then - sed -i "\|\"./scripts/install_daos.sh\",$|a \\ \"./scripts/${script_name}\"${comma}" "${TMP_CLIENT_PACKER_FILE}" + sed -i "\|\"./scripts/install_daos.sh\",$|a \\ \"./scripts/${script_name}\"${comma}" "${TMP_CLIENT_PACKER_FILE}" fi } diff --git a/terraform/examples/io500/config/config.sh b/terraform/examples/io500/config/config.sh index 6968520..43b2f44 100644 --- a/terraform/examples/io500/config/config.sh +++ b/terraform/examples/io500/config/config.sh @@ -22,10 +22,12 @@ DAOS_SERVER_MACHINE_TYPE=n2-highmem-32 # n2-custom-20-131072 n2-custom-40-262144 DAOS_SERVER_DISK_COUNT=8 DAOS_SERVER_CRT_TIMEOUT=300 DAOS_SERVER_SCM_SIZE=100 +DAOS_SERVER_GVNIC=false # Client(s) DAOS_CLIENT_INSTANCE_COUNT="1" DAOS_CLIENT_MACHINE_TYPE=c2-standard-16 # c2-standard-16 n2-standard-2 +DAOS_CLIENT_GVNIC=false # Storage DAOS_POOL_SIZE="$(awk -v disk_count=${DAOS_SERVER_DISK_COUNT} -v server_count=${DAOS_SERVER_INSTANCE_COUNT} 'BEGIN {pool_size = 375 * disk_count * server_count / 1000; print pool_size"TB"}')" @@ -68,6 +70,7 @@ export TF_VAR_server_mig_name="${DAOS_SERVER_BASE_NAME}" export TF_VAR_server_machine_type="${DAOS_SERVER_MACHINE_TYPE}" export TF_VAR_server_os_project="${TF_VAR_project_id}" export TF_VAR_server_os_family="daos-server-io500-centos-7" +export TF_VAR_server_gvnic="${DAOS_SERVER_GVNIC}" # Clients export TF_VAR_client_preemptible=${PREEMPTIBLE_INSTANCES} export TF_VAR_client_number_of_instances=${DAOS_CLIENT_INSTANCE_COUNT} @@ -79,3 +82,4 @@ export TF_VAR_client_mig_name="${DAOS_CLIENT_BASE_NAME}" export TF_VAR_client_machine_type="${DAOS_CLIENT_MACHINE_TYPE}" export TF_VAR_client_os_project="${TF_VAR_project_id}" export TF_VAR_client_os_family="daos-client-io500-hpc-centos-7" +export TF_VAR_client_gvnic="${DAOS_CLIENT_GVNIC}" diff --git a/terraform/examples/io500/config/config_1c_1s_8d.sh b/terraform/examples/io500/config/config_1c_1s_8d.sh index 66613ba..8aabf67 100644 --- a/terraform/examples/io500/config/config_1c_1s_8d.sh +++ b/terraform/examples/io500/config/config_1c_1s_8d.sh @@ -22,10 +22,12 @@ DAOS_SERVER_MACHINE_TYPE=n2-highmem-32 DAOS_SERVER_DISK_COUNT=8 DAOS_SERVER_CRT_TIMEOUT=300 DAOS_SERVER_SCM_SIZE=100 +DAOS_SERVER_GVNIC=false # Client(s) DAOS_CLIENT_INSTANCE_COUNT="1" DAOS_CLIENT_MACHINE_TYPE=c2-standard-16 +DAOS_CLIENT_GVNIC=false # Storage DAOS_POOL_SIZE="$(awk -v disk_count=${DAOS_SERVER_DISK_COUNT} -v server_count=${DAOS_SERVER_INSTANCE_COUNT} 'BEGIN {pool_size = 375 * disk_count * server_count / 1000; print pool_size"TB"}')" @@ -69,6 +71,7 @@ export TF_VAR_server_mig_name="${DAOS_SERVER_BASE_NAME}" export TF_VAR_server_machine_type="${DAOS_SERVER_MACHINE_TYPE}" export TF_VAR_server_os_project="${TF_VAR_project_id}" export TF_VAR_server_os_family="daos-server-io500-centos-7" +export TF_VAR_server_gvnic="${DAOS_SERVER_GVNIC}" # Clients export TF_VAR_client_preemptible=${PREEMPTIBLE_INSTANCES} export TF_VAR_client_number_of_instances=${DAOS_CLIENT_INSTANCE_COUNT} @@ -80,3 +83,4 @@ export TF_VAR_client_mig_name="${DAOS_CLIENT_BASE_NAME}" export TF_VAR_client_machine_type="${DAOS_CLIENT_MACHINE_TYPE}" export TF_VAR_client_os_project="${TF_VAR_project_id}" export TF_VAR_client_os_family="daos-client-io500-hpc-centos-7" +export TF_VAR_client_gvnic="${DAOS_CLIENT_GVNIC}" diff --git a/terraform/examples/io500/config/config_2c_2s_16d.sh b/terraform/examples/io500/config/config_2c_2s_16d.sh index 340f492..d51cfc8 100644 --- a/terraform/examples/io500/config/config_2c_2s_16d.sh +++ b/terraform/examples/io500/config/config_2c_2s_16d.sh @@ -22,10 +22,12 @@ DAOS_SERVER_MACHINE_TYPE=n2-custom-36-262144 DAOS_SERVER_DISK_COUNT=16 DAOS_SERVER_CRT_TIMEOUT=300 DAOS_SERVER_SCM_SIZE=200 +DAOS_SERVER_GVNIC=false # Client(s) DAOS_CLIENT_INSTANCE_COUNT="2" DAOS_CLIENT_MACHINE_TYPE=c2-standard-16 +DAOS_CLIENT_GVNIC=false # Storage DAOS_POOL_SIZE="$(awk -v disk_count=${DAOS_SERVER_DISK_COUNT} -v server_count=${DAOS_SERVER_INSTANCE_COUNT} 'BEGIN {pool_size = 375 * disk_count * server_count / 1000; print pool_size"TB"}')" @@ -69,6 +71,7 @@ export TF_VAR_server_mig_name="${DAOS_SERVER_BASE_NAME}" export TF_VAR_server_machine_type="${DAOS_SERVER_MACHINE_TYPE}" export TF_VAR_server_os_project="${TF_VAR_project_id}" export TF_VAR_server_os_family="daos-server-io500-centos-7" +export TF_VAR_server_gvnic="${DAOS_SERVER_GVNIC}" # Clients export TF_VAR_client_preemptible=${PREEMPTIBLE_INSTANCES} export TF_VAR_client_number_of_instances=${DAOS_CLIENT_INSTANCE_COUNT} @@ -80,3 +83,4 @@ export TF_VAR_client_mig_name="${DAOS_CLIENT_BASE_NAME}" export TF_VAR_client_machine_type="${DAOS_CLIENT_MACHINE_TYPE}" export TF_VAR_client_os_project="${TF_VAR_project_id}" export TF_VAR_client_os_family="daos-client-io500-hpc-centos-7" +export TF_VAR_client_gvnic="${DAOS_CLIENT_GVNIC}" diff --git a/terraform/examples/io500/start.sh b/terraform/examples/io500/start.sh index fd8fe6a..ffb5772 100755 --- a/terraform/examples/io500/start.sh +++ b/terraform/examples/io500/start.sh @@ -467,6 +467,16 @@ show_instances() { --filter="name~'^${DAOS_FILTER}'" } +check_gvnic() { + DAOS_SERVER_NETWORK_TYPE=$(ssh -q -F "${SSH_CONFIG_FILE}" ${FIRST_CLIENT_IP} "ssh ${DAOS_FIRST_SERVER} 'sudo lshw -class network'" | sed -n "s/^.*product: \(.*\$\)/\1/p") + DAOS_CLIENT_NETWORK_TYPE=$(ssh -q -F "${SSH_CONFIG_FILE}" ${FIRST_CLIENT_IP} "sudo lshw -class network" | sed -n "s/^.*product: \(.*\$\)/\1/p") + + log_section "Network adapters type:" + printf '%s\n%s\n' \ + "DAOS_SERVER_NETWORK_TYPE = ${DAOS_SERVER_NETWORK_TYPE}" \ + "DAOS_CLIENT_NETWORK_TYPE = ${DAOS_CLIENT_NETWORK_TYPE}" +} + show_run_steps() { log_section "DAOS Server and Client instances are ready for IO500 run" @@ -497,6 +507,7 @@ main() { copy_files_to_first_client propagate_ssh_keys_to_all_nodes show_instances + check_gvnic show_run_steps } diff --git a/terraform/modules/daos_client/README.md b/terraform/modules/daos_client/README.md index 68ea3c3..cae343b 100644 --- a/terraform/modules/daos_client/README.md +++ b/terraform/modules/daos_client/README.md @@ -29,12 +29,14 @@ limitations under the License. |------|---------| | [terraform](#requirement\_terraform) | >= 0.14.5 | | [google](#requirement\_google) | >= 3.54.0 | +| [google-beta](#requirement\_google-beta) | >= 4.16.0 | ## Providers | Name | Version | |------|---------| | [google](#provider\_google) | >= 3.54.0 | +| [google-beta](#provider\_google-beta) | >= 4.16.0 | ## Modules @@ -44,8 +46,8 @@ No modules. | Name | Type | |------|------| +| [google-beta_google_compute_instance_template.daos_sig_template](https://registry.terraform.io/providers/hashicorp/google-beta/latest/docs/resources/google_compute_instance_template) | resource | | [google_compute_instance_group_manager.daos_sig](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance_group_manager) | resource | -| [google_compute_instance_template.daos_sig_template](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance_template) | resource | | [google_compute_per_instance_config.named_instances](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_per_instance_config) | resource | | [google_compute_image.os_image](https://registry.terraform.io/providers/hashicorp/google/latest/docs/data-sources/compute_image) | data source | @@ -55,6 +57,7 @@ No modules. |------|-------------|------|---------|:--------:| | [daos\_agent\_yml](#input\_daos\_agent\_yml) | YAML to configure the daos agent. | `string` | n/a | yes | | [daos\_control\_yml](#input\_daos\_control\_yml) | YAML configuring DAOS control. | `string` | n/a | yes | +| [gvnic](#input\_gvnic) | Use Google Virtual NIC (gVNIC) network interface | `bool` | `false` | no | | [instance\_base\_name](#input\_instance\_base\_name) | MIG instance base names to use | `string` | `"daos-client"` | no | | [labels](#input\_labels) | Set of key/value label pairs to assign to daos-client instances | `any` | `{}` | no | | [machine\_type](#input\_machine\_type) | GCP machine type. ie. c2-standard-16 | `string` | `"c2-standard-16"` | no | @@ -77,4 +80,4 @@ No modules. ## Outputs No outputs. - \ No newline at end of file + diff --git a/terraform/modules/daos_client/main.tf b/terraform/modules/daos_client/main.tf index 3b3960d..13dacb1 100644 --- a/terraform/modules/daos_client/main.tf +++ b/terraform/modules/daos_client/main.tf @@ -19,6 +19,9 @@ locals { subnetwork_project = var.subnetwork_project != null ? var.subnetwork_project : var.project_id client_startup_script = file( "${path.module}/templates/daos_startup_script.tftpl") + # Google Virtual NIC (gVNIC) network interface + nic_type = var.gvnic ? "GVNIC" : "VIRTIO_NET" + total_egress_bandwidth_tier = var.gvnic ? "TIER_1" : "DEFAULT" } data "google_compute_image" "os_image" { @@ -27,6 +30,7 @@ data "google_compute_image" "os_image" { } resource "google_compute_instance_template" "daos_sig_template" { + provider = google-beta name = var.template_name machine_type = var.machine_type can_ip_forward = false @@ -47,6 +51,11 @@ resource "google_compute_instance_template" "daos_sig_template" { network = var.network_name subnetwork = var.subnetwork_name subnetwork_project = local.subnetwork_project + nic_type = local.nic_type + } + + network_performance_config { + total_egress_bandwidth_tier = local.total_egress_bandwidth_tier } dynamic "service_account" { diff --git a/terraform/modules/daos_client/module.json b/terraform/modules/daos_client/module.json index ded9dc5..06b36ed 100644 --- a/terraform/modules/daos_client/module.json +++ b/terraform/modules/daos_client/module.json @@ -16,6 +16,13 @@ "default": null, "required": true }, + { + "name": "gvnic", + "type": "bool", + "description": "Use Google Virtual NIC (gVNIC) network interface", + "default": false, + "required": false + }, { "name": "instance_base_name", "type": "string", @@ -160,6 +167,11 @@ "name": "google", "alias": null, "version": "\u003e= 3.54.0" + }, + { + "name": "google-beta", + "alias": null, + "version": "\u003e= 4.16.0" } ], "requirements": [ @@ -170,21 +182,25 @@ { "name": "google", "version": "\u003e= 3.54.0" + }, + { + "name": "google-beta", + "version": "\u003e= 4.16.0" } ], "resources": [ { - "type": "compute_instance_group_manager", - "name": "daos_sig", - "provider": "google", - "source": "hashicorp/google", + "type": "google_compute_instance_template", + "name": "daos_sig_template", + "provider": "google-beta", + "source": "hashicorp/google-beta", "mode": "managed", "version": "latest", "description": null }, { - "type": "compute_instance_template", - "name": "daos_sig_template", + "type": "compute_instance_group_manager", + "name": "daos_sig", "provider": "google", "source": "hashicorp/google", "mode": "managed", diff --git a/terraform/modules/daos_client/variables.tf b/terraform/modules/daos_client/variables.tf index 2a35f72..2657d26 100644 --- a/terraform/modules/daos_client/variables.tf +++ b/terraform/modules/daos_client/variables.tf @@ -137,3 +137,8 @@ variable "daos_control_yml" { type = string } +variable "gvnic" { + description = "Use Google Virtual NIC (gVNIC) network interface" + default = false + type = bool +} diff --git a/terraform/modules/daos_client/versions.tf b/terraform/modules/daos_client/versions.tf index 1aed9ae..aaa2239 100644 --- a/terraform/modules/daos_client/versions.tf +++ b/terraform/modules/daos_client/versions.tf @@ -16,6 +16,7 @@ terraform { required_version = ">= 0.14.5" required_providers { - google = ">= 3.54.0" + google = ">= 3.54.0" + google-beta = ">= 4.16.0" } } diff --git a/terraform/modules/daos_server/README.md b/terraform/modules/daos_server/README.md index c069d4f..8af8f49 100644 --- a/terraform/modules/daos_server/README.md +++ b/terraform/modules/daos_server/README.md @@ -29,12 +29,14 @@ limitations under the License. |------|---------| | [terraform](#requirement\_terraform) | >= 0.14.5 | | [google](#requirement\_google) | >= 3.54.0 | +| [google-beta](#requirement\_google-beta) | >= 4.16.0 | ## Providers | Name | Version | |------|---------| | [google](#provider\_google) | >= 3.54.0 | +| [google-beta](#provider\_google-beta) | >= 4.16.0 | ## Modules @@ -44,8 +46,8 @@ No modules. | Name | Type | |------|------| +| [google-beta_google_compute_instance_template.daos_sig_template](https://registry.terraform.io/providers/hashicorp/google-beta/latest/docs/resources/google_compute_instance_template) | resource | | [google_compute_instance_group_manager.daos_sig](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance_group_manager) | resource | -| [google_compute_instance_template.daos_sig_template](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance_template) | resource | | [google_compute_per_instance_config.named_instances](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_per_instance_config) | resource | | [google_compute_image.os_image](https://registry.terraform.io/providers/hashicorp/google/latest/docs/data-sources/compute_image) | data source | @@ -57,6 +59,7 @@ No modules. | [daos\_disk\_count](#input\_daos\_disk\_count) | Number of local ssd's to use | `number` | `16` | no | | [daos\_disk\_type](#input\_daos\_disk\_type) | Daos disk type to use. For now only suported one is local-ssd | `string` | `"local-ssd"` | no | | [daos\_scm\_size](#input\_daos\_scm\_size) | scm\_size | `number` | `200` | no | +| [gvnic](#input\_gvnic) | Use Google Virtual NIC (gVNIC) network interface | `bool` | `false` | no | | [instance\_base\_name](#input\_instance\_base\_name) | MIG instance base names to use | `string` | `"daos-server"` | no | | [labels](#input\_labels) | Set of key/value label pairs to assign to daos-server instances | `any` | `{}` | no | | [machine\_type](#input\_machine\_type) | GCP machine type. ie. e2-medium | `string` | `"n2-custom-36-215040"` | no | @@ -85,4 +88,4 @@ No modules. | [daos\_agent\_yml](#output\_daos\_agent\_yml) | YAML to configure the daos agent. This is typically saved in /etc/daos/daos\_agent.yml | | [daos\_config\_script](#output\_daos\_config\_script) | Script to configure the DAOS system. This will format the sytem with dmg -l and optionally create the specified pools. | | [daos\_control\_yml](#output\_daos\_control\_yml) | YAML configuring DAOS control. This is typically saved in /etc/daos/daos\_control.yml | - \ No newline at end of file + diff --git a/terraform/modules/daos_server/main.tf b/terraform/modules/daos_server/main.tf index 7c89a1d..97e1335 100644 --- a/terraform/modules/daos_server/main.tf +++ b/terraform/modules/daos_server/main.tf @@ -57,6 +57,10 @@ locals { pools = var.pools } ) + + # Google Virtual NIC (gVNIC) network interface + nic_type = var.gvnic ? "GVNIC" : "VIRTIO_NET" + total_egress_bandwidth_tier = var.gvnic ? "TIER_1" : "DEFAULT" } data "google_compute_image" "os_image" { @@ -65,6 +69,7 @@ data "google_compute_image" "os_image" { } resource "google_compute_instance_template" "daos_sig_template" { + provider = google-beta name = var.template_name machine_type = var.machine_type can_ip_forward = false @@ -96,6 +101,11 @@ resource "google_compute_instance_template" "daos_sig_template" { network = var.network_name subnetwork = var.subnetwork_name subnetwork_project = local.subnetwork_project + nic_type = local.nic_type + } + + network_performance_config { + total_egress_bandwidth_tier = local.total_egress_bandwidth_tier } dynamic "service_account" { diff --git a/terraform/modules/daos_server/module.json b/terraform/modules/daos_server/module.json index e3d90eb..45ef6ca 100644 --- a/terraform/modules/daos_server/module.json +++ b/terraform/modules/daos_server/module.json @@ -30,6 +30,13 @@ "default": 200, "required": false }, + { + "name": "gvnic", + "type": "bool", + "description": "Use Google Virtual NIC (gVNIC) network interface", + "default": false, + "required": false + }, { "name": "instance_base_name", "type": "string", @@ -198,6 +205,11 @@ "name": "google", "alias": null, "version": "\u003e= 3.54.0" + }, + { + "name": "google-beta", + "alias": null, + "version": "\u003e= 4.16.0" } ], "requirements": [ @@ -208,21 +220,25 @@ { "name": "google", "version": "\u003e= 3.54.0" + }, + { + "name": "google-beta", + "version": "\u003e= 4.16.0" } ], "resources": [ { - "type": "compute_instance_group_manager", - "name": "daos_sig", - "provider": "google", - "source": "hashicorp/google", + "type": "google_compute_instance_template", + "name": "daos_sig_template", + "provider": "google-beta", + "source": "hashicorp/google-beta", "mode": "managed", "version": "latest", "description": null }, { - "type": "compute_instance_template", - "name": "daos_sig_template", + "type": "compute_instance_group_manager", + "name": "daos_sig", "provider": "google", "source": "hashicorp/google", "mode": "managed", diff --git a/terraform/modules/daos_server/variables.tf b/terraform/modules/daos_server/variables.tf index fd2769e..b0ff4d4 100644 --- a/terraform/modules/daos_server/variables.tf +++ b/terraform/modules/daos_server/variables.tf @@ -163,3 +163,9 @@ variable "daos_crt_timeout" { default = 300 type = number } + +variable "gvnic" { + description = "Use Google Virtual NIC (gVNIC) network interface" + default = false + type = bool +} diff --git a/terraform/modules/daos_server/versions.tf b/terraform/modules/daos_server/versions.tf index b1211cd..6044f90 100644 --- a/terraform/modules/daos_server/versions.tf +++ b/terraform/modules/daos_server/versions.tf @@ -17,6 +17,7 @@ terraform { required_version = ">= 0.14.5" required_providers { - google = ">= 3.54.0" + google = ">= 3.54.0" + google-beta = ">= 4.16.0" } }