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"
}
}