All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chuck Lever <cel@kernel.org>
To: <kdevops@lists.linux.dev>
Cc: Chuck Lever <chuck.lever@oracle.com>
Subject: [PATCH v1 6/6] terraform: Use the alternate ssh port for Ansible control
Date: Thu,  2 Oct 2025 16:21:40 -0400	[thread overview]
Message-ID: <20251002202140.3596787-7-cel@kernel.org> (raw)
In-Reply-To: <20251002202140.3596787-1-cel@kernel.org>

From: Chuck Lever <chuck.lever@oracle.com>

When provisioning guestfs instances, make use of the Ansible ssh
port setting, in case it is set to something other than port 22.

Generated-by: Claude AI
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 .../templates/aws/terraform.tfvars.j2         |  1 +
 .../templates/azure/terraform.tfvars.j2       |  1 +
 .../templates/gce/terraform.tfvars.j2         |  1 +
 .../templates/lambdalabs/terraform.tfvars.j2  |  1 +
 .../templates/oci/terraform.tfvars.j2         |  1 +
 .../templates/openstack/terraform.tfvars.j2   |  1 +
 .../roles/terraform/templates/ssh_config.j2   |  2 +-
 scripts/update_ssh_config_lambdalabs.py       | 18 ++++++--
 terraform/aws/main.tf                         |  5 ++-
 terraform/azure/main.tf                       |  9 +++-
 terraform/gce/main.tf                         | 23 +++++++++-
 terraform/lambdalabs/main.tf                  | 43 +++++++++++++++++-
 terraform/oci/main.tf                         | 11 ++++-
 terraform/openstack/main.tf                   | 11 ++++-
 terraform/scripts/cloud-init.sh               | 44 ++++++++++++++++++-
 terraform/shared.tf                           |  6 +++
 16 files changed, 162 insertions(+), 16 deletions(-)

diff --git a/playbooks/roles/gen_tfvars/templates/aws/terraform.tfvars.j2 b/playbooks/roles/gen_tfvars/templates/aws/terraform.tfvars.j2
index 4b20667f0686..fc9c94441ded 100644
--- a/playbooks/roles/gen_tfvars/templates/aws/terraform.tfvars.j2
+++ b/playbooks/roles/gen_tfvars/templates/aws/terraform.tfvars.j2
@@ -18,6 +18,7 @@ aws_ebs_volume_throughput = {{ terraform_aws_ebs_volume_throughput }}
 ssh_config_pubkey_file = "{{ kdevops_terraform_ssh_config_pubkey_file }}"
 ssh_config_user = "{{ kdevops_terraform_ssh_config_user }}"
 ssh_config = "{{ sshconfig }}"
+ssh_config_port = {{ ansible_cfg_ssh_port }}
 
 ssh_config_update = "{{ kdevops_terraform_ssh_config_update | lower }}"
 ssh_config_use_strict_settings = "{{ kdevops_terraform_ssh_config_update_strict  | lower }}"
diff --git a/playbooks/roles/gen_tfvars/templates/azure/terraform.tfvars.j2 b/playbooks/roles/gen_tfvars/templates/azure/terraform.tfvars.j2
index 7ce0f6170e22..9c3ac0a0f7f6 100644
--- a/playbooks/roles/gen_tfvars/templates/azure/terraform.tfvars.j2
+++ b/playbooks/roles/gen_tfvars/templates/azure/terraform.tfvars.j2
@@ -13,6 +13,7 @@ azure_managed_disks_tier = "{{ terraform_azure_managed_disks_tier }}"
 ssh_config_pubkey_file = "{{ kdevops_terraform_ssh_config_pubkey_file }}"
 ssh_config_user = "{{ kdevops_terraform_ssh_config_user }}"
 ssh_config = "{{ sshconfig }}"
+ssh_config_port = {{ ansible_cfg_ssh_port }}
 
 ssh_config_update = "{{ kdevops_terraform_ssh_config_update | lower }}"
 ssh_config_use_strict_settings = "{{ kdevops_terraform_ssh_config_update_strict | lower }}"
diff --git a/playbooks/roles/gen_tfvars/templates/gce/terraform.tfvars.j2 b/playbooks/roles/gen_tfvars/templates/gce/terraform.tfvars.j2
index c6093aeff634..950e12b786fb 100644
--- a/playbooks/roles/gen_tfvars/templates/gce/terraform.tfvars.j2
+++ b/playbooks/roles/gen_tfvars/templates/gce/terraform.tfvars.j2
@@ -20,6 +20,7 @@ gce_disk_throughput = {{ terraform_gce_disk_throughput }}
 ssh_config_pubkey_file = "{{ kdevops_terraform_ssh_config_pubkey_file }}"
 ssh_config_user = "{{ kdevops_terraform_ssh_config_user }}"
 ssh_config = "{{ sshconfig }}"
+ssh_config_port = {{ ansible_cfg_ssh_port }}
 
 ssh_config_update = "{{ kdevops_terraform_ssh_config_update | lower }}"
 ssh_config_use_strict_settings = "{{ kdevops_terraform_ssh_config_update_strict | lower }}"
diff --git a/playbooks/roles/gen_tfvars/templates/lambdalabs/terraform.tfvars.j2 b/playbooks/roles/gen_tfvars/templates/lambdalabs/terraform.tfvars.j2
index 4fd8cad634aa..a4ba26fc1d7e 100644
--- a/playbooks/roles/gen_tfvars/templates/lambdalabs/terraform.tfvars.j2
+++ b/playbooks/roles/gen_tfvars/templates/lambdalabs/terraform.tfvars.j2
@@ -7,6 +7,7 @@ ssh_config_pubkey_file = "{{ kdevops_terraform_ssh_config_pubkey_file }}"
 ssh_config_privkey_file = "{{ kdevops_terraform_ssh_config_privkey_file }}"
 ssh_config_user = "{{ kdevops_terraform_ssh_config_user }}"
 ssh_config = "{{ sshconfig }}"
+ssh_config_port = {{ ansible_cfg_ssh_port }}
 # Use unique SSH config file per directory to avoid conflicts
 ssh_config_name = "{{ kdevops_ssh_config_prefix }}{{ topdir_path_sha256sum[:8] }}"
 
diff --git a/playbooks/roles/gen_tfvars/templates/oci/terraform.tfvars.j2 b/playbooks/roles/gen_tfvars/templates/oci/terraform.tfvars.j2
index 0839bfacfb24..5f3ceed19b9a 100644
--- a/playbooks/roles/gen_tfvars/templates/oci/terraform.tfvars.j2
+++ b/playbooks/roles/gen_tfvars/templates/oci/terraform.tfvars.j2
@@ -25,6 +25,7 @@ oci_sparse_volume_device_file_name = "{{ terraform_oci_sparse_volume_device_file
 ssh_config_pubkey_file = "{{ kdevops_terraform_ssh_config_pubkey_file }}"
 ssh_config_user = "{{ kdevops_terraform_ssh_config_user }}"
 ssh_config = "{{ sshconfig }}"
+ssh_config_port = {{ ansible_cfg_ssh_port }}
 
 ssh_config_update = "{{ kdevops_terraform_ssh_config_update | lower }}"
 ssh_config_use_strict_settings = "{{ kdevops_terraform_ssh_config_update_strict | lower }}"
diff --git a/playbooks/roles/gen_tfvars/templates/openstack/terraform.tfvars.j2 b/playbooks/roles/gen_tfvars/templates/openstack/terraform.tfvars.j2
index 3df0e3a4da24..a50468072e59 100644
--- a/playbooks/roles/gen_tfvars/templates/openstack/terraform.tfvars.j2
+++ b/playbooks/roles/gen_tfvars/templates/openstack/terraform.tfvars.j2
@@ -7,6 +7,7 @@ ssh_pubkey_name = "{{ terraform_openstack_ssh_pubkey_name }}"
 ssh_config_pubkey_file = "{{ kdevops_terraform_ssh_config_pubkey_file }}"
 ssh_config_user = "{{ kdevops_terraform_ssh_config_user }}"
 ssh_config = "{{ sshconfig }}"
+ssh_config_port = {{ ansible_cfg_ssh_port }}
 
 ssh_config_update = "{{ kdevops_terraform_ssh_config_update | lower }}"
 ssh_config_use_strict_settings = "{{ kdevops_terraform_ssh_config_update_strict  | lower }}"
diff --git a/playbooks/roles/terraform/templates/ssh_config.j2 b/playbooks/roles/terraform/templates/ssh_config.j2
index 5e8adf0253a1..ba62a2209d4c 100644
--- a/playbooks/roles/terraform/templates/ssh_config.j2
+++ b/playbooks/roles/terraform/templates/ssh_config.j2
@@ -1,7 +1,7 @@
 Host {{ item.key }} {{ item.value }}
 	HostName {{ item.value }}
 	User {{ kdevops_terraform_ssh_config_user }}
-	Port 22
+	Port {{ ansible_cfg_ssh_port }}
 	IdentityFile {{ kdevops_terraform_ssh_config_privkey_file }}
 {% if ssh_config_kexalgorithms %}
 	KexAlgorithms {{ ssh_config_kexalgorithms }}
diff --git a/scripts/update_ssh_config_lambdalabs.py b/scripts/update_ssh_config_lambdalabs.py
index 5b9ab0aa82e6..265f85c2315b 100755
--- a/scripts/update_ssh_config_lambdalabs.py
+++ b/scripts/update_ssh_config_lambdalabs.py
@@ -11,7 +11,7 @@ from pathlib import Path
 
 
 def update_ssh_config(
-    action, hostname, ip_address, username, config_file, ssh_key, provider_name
+    action, hostname, ip_address, username, config_file, ssh_key, provider_name, port=22
 ):
     """
     Update SSH configuration file with Lambda Labs instance details.
@@ -24,6 +24,7 @@ def update_ssh_config(
         config_file: SSH config file path
         ssh_key: Path to SSH private key
         provider_name: Provider name for comments
+        port: SSH port number (default: 22)
     """
     config_file = os.path.expanduser(config_file)
     ssh_key = os.path.expanduser(ssh_key)
@@ -33,7 +34,7 @@ def update_ssh_config(
 Host {hostname} {ip_address}
 \tHostName {ip_address}
 \tUser {username}
-\tPort 22
+\tPort {port}
 \tIdentityFile {ssh_key}
 \tUserKnownHostsFile /dev/null
 \tStrictHostKeyChecking no
@@ -90,7 +91,7 @@ def main():
     """Main entry point."""
     if len(sys.argv) < 7:
         print(
-            f"Usage: {sys.argv[0]} <action> <hostname> <ip_address> <username> <config_file> <ssh_key> [provider_name]"
+            f"Usage: {sys.argv[0]} <action> <hostname> <ip_address> <username> <config_file> <ssh_key> [provider_name] [port]"
         )
         print("  action: 'update' or 'remove'")
         print("  hostname: Instance hostname")
@@ -99,6 +100,7 @@ def main():
         print("  config_file: SSH config file path")
         print("  ssh_key: Path to SSH private key")
         print("  provider_name: Optional provider name (default: 'Lambda Labs')")
+        print("  port: Optional SSH port (default: 22)")
         sys.exit(1)
 
     action = sys.argv[1]
@@ -108,9 +110,17 @@ def main():
     config_file = sys.argv[5]
     ssh_key = sys.argv[6]
     provider_name = sys.argv[7] if len(sys.argv) > 7 else "Lambda Labs"
+    port = int(sys.argv[8]) if len(sys.argv) > 8 else 22
 
     update_ssh_config(
-        action, hostname, ip_address, username, config_file, ssh_key, provider_name
+        action,
+        hostname,
+        ip_address,
+        username,
+        config_file,
+        ssh_key,
+        provider_name,
+        port,
     )
 
 
diff --git a/terraform/aws/main.tf b/terraform/aws/main.tf
index 949b2febcf0a..0de2e53710cb 100644
--- a/terraform/aws/main.tf
+++ b/terraform/aws/main.tf
@@ -39,8 +39,8 @@ resource "aws_security_group" "kdevops_sec_group" {
     cidr_blocks = [
       "0.0.0.0/0",
     ]
-    from_port = 22
-    to_port   = 22
+    from_port = var.ssh_config_port
+    to_port   = var.ssh_config_port
     protocol  = "tcp"
   }
 
@@ -82,6 +82,7 @@ data "template_file" "script_user_data" {
     user_data_log_dir = var.user_data_log_dir
     user_data_enabled = var.user_data_enabled
     ssh_config_user   = var.ssh_config_user
+    ssh_config_port   = var.ssh_config_port
     new_hostname      = element(var.kdevops_nodes, count.index),
   }
 }
diff --git a/terraform/azure/main.tf b/terraform/azure/main.tf
index 8dcead78b5fd..eb609933f2ad 100644
--- a/terraform/azure/main.tf
+++ b/terraform/azure/main.tf
@@ -43,7 +43,7 @@ resource "azurerm_network_security_group" "kdevops_sg" {
     access                     = "Allow"
     protocol                   = "Tcp"
     source_port_range          = "*"
-    destination_port_range     = "22"
+    destination_port_range     = tostring(var.ssh_config_port)
     source_address_prefix      = "*"
     destination_address_prefix = "*"
   }
@@ -89,6 +89,13 @@ resource "azurerm_linux_virtual_machine" "kdevops_vm" {
   size                            = var.azure_vmsize
   admin_username                  = var.ssh_config_user
   disable_password_authentication = true
+  custom_data = base64encode(templatefile("${path.module}/../scripts/cloud-init.sh", {
+    user_data_log_dir = "/var/log/kdevops"
+    user_data_enabled = "yes"
+    ssh_config_user   = var.ssh_config_user
+    ssh_config_port   = var.ssh_config_port
+    new_hostname      = element(var.kdevops_nodes, count.index)
+  }))
 
   os_disk {
     # Note: yes using the names like the ones below is better however it also
diff --git a/terraform/gce/main.tf b/terraform/gce/main.tf
index 816f43098e88..254ecb6a6803 100644
--- a/terraform/gce/main.tf
+++ b/terraform/gce/main.tf
@@ -3,6 +3,19 @@ data "google_compute_image" "kdevops_image" {
   family  = var.gce_image_family
 }
 
+resource "google_compute_firewall" "kdevops_ssh" {
+  name    = "kdevops-allow-ssh"
+  network = "default"
+
+  allow {
+    protocol = "tcp"
+    ports    = [tostring(var.ssh_config_port)]
+  }
+
+  source_ranges = ["0.0.0.0/0"]
+  target_tags   = ["kdevops-ssh"]
+}
+
 resource "google_compute_instance" "kdevops_instance" {
   count        = local.kdevops_num_boxes
   name         = element(var.kdevops_nodes, count.index)
@@ -33,7 +46,15 @@ resource "google_compute_instance" "kdevops_instance" {
     ssh-keys = format("%s:%s", var.ssh_config_user, file(var.ssh_config_pubkey_file))
   }
 
-  metadata_startup_script = "echo hi > /test.txt"
+  metadata_startup_script = templatefile("${path.module}/../scripts/cloud-init.sh", {
+    user_data_log_dir = "/var/log/kdevops"
+    user_data_enabled = "yes"
+    ssh_config_user   = var.ssh_config_user
+    ssh_config_port   = var.ssh_config_port
+    new_hostname      = element(var.kdevops_nodes, count.index)
+  })
+
+  tags = ["kdevops-ssh"]
 }
 
 module "kdevops_compute_disks" {
diff --git a/terraform/lambdalabs/main.tf b/terraform/lambdalabs/main.tf
index a78866c7c8c2..1d736f0c503a 100644
--- a/terraform/lambdalabs/main.tf
+++ b/terraform/lambdalabs/main.tf
@@ -88,7 +88,7 @@ resource "null_resource" "ansible_update_ssh_config_hosts" {
   for_each = var.ssh_config_update ? toset(var.kdevops_nodes) : []
 
   provisioner "local-exec" {
-    command = "python3 ${path.module}/../../scripts/update_ssh_config_lambdalabs.py update ${each.key} ${lambdalabs_instance.kdevops[each.key].ip} ${local.ssh_user} ${var.ssh_config_name} ${var.ssh_config_privkey_file} 'Lambda Labs'"
+    command = "python3 ${path.module}/../../scripts/update_ssh_config_lambdalabs.py update ${each.key} ${lambdalabs_instance.kdevops[each.key].ip} ${local.ssh_user} ${var.ssh_config_name} ${var.ssh_config_privkey_file} 'Lambda Labs' ${var.ssh_config_port}"
   }
 
   triggers = {
@@ -113,6 +113,43 @@ resource "null_resource" "remove_ssh_config" {
   }
 }
 
+# Configure SSH port if not using default port 22
+resource "null_resource" "configure_ssh_port" {
+  for_each = var.ssh_config_port != 22 ? toset(var.kdevops_nodes) : []
+
+  connection {
+    type        = "ssh"
+    host        = lambdalabs_instance.kdevops[each.key].ip
+    user        = local.ssh_user
+    port        = 22
+    private_key = file(pathexpand(var.ssh_config_privkey_file))
+  }
+
+  provisioner "remote-exec" {
+    inline = [
+      "echo 'Waiting for system to be ready...'",
+      "sudo cloud-init status --wait || true",
+      "echo 'Configuring SSH to listen on port ${var.ssh_config_port}'",
+      "sudo sed -i '/^[#[:space:]]*Port/d' /etc/ssh/sshd_config",
+      "echo 'Port ${var.ssh_config_port}' | sudo tee -a /etc/ssh/sshd_config",
+      "if [ -d /etc/selinux ] && sudo sestatus 2>/dev/null | grep -q 'SELinux status.*enabled'; then if ! command -v semanage >/dev/null 2>&1; then sudo yum install -y policycoreutils-python-utils 2>&1 || sudo dnf install -y policycoreutils-python-utils 2>&1 || true; fi; if command -v semanage >/dev/null 2>&1; then sudo semanage port -a -t ssh_port_t -p tcp ${var.ssh_config_port} 2>&1 || sudo semanage port -m -t ssh_port_t -p tcp ${var.ssh_config_port} 2>&1 || true; fi; fi",
+      "if command -v firewall-cmd >/dev/null 2>&1 && sudo systemctl is-enabled firewalld >/dev/null 2>&1; then sudo firewall-cmd --permanent --add-port=${var.ssh_config_port}/tcp && sudo firewall-cmd --reload; fi",
+      "if command -v ufw >/dev/null 2>&1 && sudo systemctl is-active ufw >/dev/null 2>&1; then sudo ufw allow ${var.ssh_config_port}/tcp; fi",
+      "sudo systemctl restart sshd",
+      "echo 'SSH port configuration completed'"
+    ]
+  }
+
+  depends_on = [
+    lambdalabs_instance.kdevops,
+    null_resource.ansible_update_ssh_config_hosts
+  ]
+
+  triggers = {
+    instance_id = lambdalabs_instance.kdevops[each.key].id
+  }
+}
+
 # Ansible provisioning
 resource "null_resource" "ansible_provision" {
   for_each = toset(var.kdevops_nodes)
@@ -121,6 +158,7 @@ resource "null_resource" "ansible_provision" {
     type        = "ssh"
     host        = lambdalabs_instance.kdevops[each.key].ip
     user        = local.ssh_user
+    port        = var.ssh_config_port
     private_key = file(pathexpand(var.ssh_config_privkey_file))
   }
 
@@ -145,7 +183,8 @@ resource "null_resource" "ansible_provision" {
 
   depends_on = [
     lambdalabs_instance.kdevops,
-    null_resource.ansible_update_ssh_config_hosts
+    null_resource.ansible_update_ssh_config_hosts,
+    null_resource.configure_ssh_port
   ]
 
   triggers = {
diff --git a/terraform/oci/main.tf b/terraform/oci/main.tf
index 15660aa02614..399a05621ee3 100644
--- a/terraform/oci/main.tf
+++ b/terraform/oci/main.tf
@@ -35,6 +35,13 @@ resource "oci_core_instance" "kdevops_instance" {
 
   metadata = {
     ssh_authorized_keys = file(var.ssh_config_pubkey_file)
+    user_data = base64encode(templatefile("${path.module}/../scripts/cloud-init.sh", {
+      user_data_log_dir = "/var/log/kdevops"
+      user_data_enabled = "yes"
+      ssh_config_user   = var.ssh_config_user
+      ssh_config_port   = var.ssh_config_port
+      new_hostname      = element(var.kdevops_nodes, count.index)
+    }))
   }
 
   preemptible_instance_config {
@@ -155,8 +162,8 @@ resource "oci_core_security_list" "kdevops_security_list" {
     source_type = "CIDR_BLOCK"
     stateless   = false
     tcp_options {
-      min = 22
-      max = 22
+      min = var.ssh_config_port
+      max = var.ssh_config_port
     }
   }
   ingress_security_rules {
diff --git a/terraform/openstack/main.tf b/terraform/openstack/main.tf
index 6e31e2f07dd5..c9037ca734f9 100644
--- a/terraform/openstack/main.tf
+++ b/terraform/openstack/main.tf
@@ -19,8 +19,8 @@ resource "openstack_compute_secgroup_v2" "kdevops_security_group" {
 
   # SSH
   rule {
-    from_port   = 22
-    to_port     = 22
+    from_port   = var.ssh_config_port
+    to_port     = var.ssh_config_port
     ip_protocol = "tcp"
     cidr        = "0.0.0.0/0"
   }
@@ -62,6 +62,13 @@ resource "openstack_compute_instance_v2" "kdevops_instances" {
   flavor_name     = var.flavor_name
   key_pair        = var.ssh_pubkey_name
   security_groups = [openstack_compute_secgroup_v2.kdevops_security_group.name]
+  user_data = templatefile("${path.module}/../scripts/cloud-init.sh", {
+    user_data_log_dir = "/var/log/kdevops"
+    user_data_enabled = "yes"
+    ssh_config_user   = var.ssh_config_user
+    ssh_config_port   = var.ssh_config_port
+    new_hostname      = element(var.kdevops_nodes, count.index)
+  })
   network {
     name          = var.public_network_name
   }
diff --git a/terraform/scripts/cloud-init.sh b/terraform/scripts/cloud-init.sh
index 926afe99faf3..86c8a67ec13a 100755
--- a/terraform/scripts/cloud-init.sh
+++ b/terraform/scripts/cloud-init.sh
@@ -49,7 +49,49 @@ if [ "$USERDATA_ENABLED" != "yes" ]; then
 fi
 
 run_cmd_admin echo "cloud-init: kdevops script user data processing enabled"
-run_cmd_admin echo "Nothing to do..."
+
+# Configure SSH port if not using default port 22
+SSH_PORT="${ssh_config_port}"
+if [ "$SSH_PORT" != "22" ]; then
+	run_cmd_admin echo "Configuring SSH to listen on port $SSH_PORT"
+
+	# Update sshd_config to use alternate port
+	run_cmd_admin sed -i '/^[#[:space:]]*Port/d' /etc/ssh/sshd_config
+	echo "Port $SSH_PORT" | run_cmd_admin tee -a /etc/ssh/sshd_config > /dev/null
+
+	# Configure SELinux if present
+	if [ -d /etc/selinux ] && sestatus 2>/dev/null | grep -q "SELinux status.*enabled"; then
+		# Install semanage if not available (RHEL/CentOS/Rocky/AlmaLinux)
+		if ! command -v semanage >/dev/null 2>&1; then
+			run_cmd_admin yum install -y policycoreutils-python-utils 2>&1 || run_cmd_admin dnf install -y policycoreutils-python-utils 2>&1 || true
+		fi
+
+		# Try to add the port first, if it fails (already exists), modify it
+		if command -v semanage >/dev/null 2>&1; then
+			run_cmd_admin semanage port -a -t ssh_port_t -p tcp $SSH_PORT 2>&1 || run_cmd_admin semanage port -m -t ssh_port_t -p tcp $SSH_PORT 2>&1 || true
+			run_cmd_admin echo "SELinux port configuration completed"
+		else
+			run_cmd_admin echo "WARNING: semanage not available, SELinux may block port $SSH_PORT"
+		fi
+	fi
+
+	# Configure firewalld if present and enabled
+	if command -v firewall-cmd >/dev/null 2>&1 && systemctl is-enabled firewalld >/dev/null 2>&1; then
+		run_cmd_admin firewall-cmd --permanent --add-port=$SSH_PORT/tcp
+		run_cmd_admin firewall-cmd --reload
+	fi
+
+	# Configure ufw if present and active
+	if command -v ufw >/dev/null 2>&1 && systemctl is-active ufw >/dev/null 2>&1; then
+		run_cmd_admin ufw allow $SSH_PORT/tcp
+	fi
+
+	# Restart sshd to apply changes
+	run_cmd_admin systemctl restart sshd
+	run_cmd_admin echo "SSH port configuration completed"
+else
+	run_cmd_admin echo "Using default SSH port 22, no configuration needed"
+fi
 
 # Add more functionality below if you see fit. Be sure to use a variable
 # to allow to easily enable / disable each mechanism.
diff --git a/terraform/shared.tf b/terraform/shared.tf
index 88e87a27378d..488becd0f797 100644
--- a/terraform/shared.tf
+++ b/terraform/shared.tf
@@ -44,6 +44,12 @@ variable "ssh_config_kexalgorithms" {
   default     = ""
 }
 
+variable "ssh_config_port" {
+  description = "SSH port to use for remote connections and firewall rules"
+  type        = number
+  default     = 22
+}
+
 variable "private_net_enabled" {
   description = "Is the private network enabled?"
   default     = "false"
-- 
2.51.0


  parent reply	other threads:[~2025-10-02 20:21 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-02 20:21 [PATCH v1 0/6] Enable users to set an alternate ssh port Chuck Lever
2025-10-02 20:21 ` [PATCH v1 1/6] ansible.cfg: Allow the use of alternate ssh ports Chuck Lever
2025-10-02 20:21 ` [PATCH v1 2/6] base_image: Make the semanage command available on base images Chuck Lever
2025-10-02 20:21 ` [PATCH v1 3/6] guestfs: Refactor the construction of the virt-sysprep command line Chuck Lever
2025-10-02 20:21 ` [PATCH v1 4/6] guestfs: Use the alternate ssh port for Ansible control Chuck Lever
2025-10-02 20:21 ` [PATCH v1 5/6] terraform: Hoist the AWS cloud-init script into terraform/ Chuck Lever
2025-10-02 20:21 ` Chuck Lever [this message]
2025-10-02 20:25   ` [PATCH v1 6/6] terraform: Use the alternate ssh port for Ansible control Chuck Lever
2025-10-03  0:50 ` [PATCH v1 0/6] Enable users to set an alternate ssh port Luis Chamberlain
2025-10-03 13:44   ` Chuck Lever

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20251002202140.3596787-7-cel@kernel.org \
    --to=cel@kernel.org \
    --cc=chuck.lever@oracle.com \
    --cc=kdevops@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.