From patchwork Tue Sep 24 15:18:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Scott Mayhew X-Patchwork-Id: 13811014 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 76ED3EEB3 for ; Tue, 24 Sep 2024 15:18:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727191127; cv=none; b=J0iKTUxeCh4x1ozR2Gr0t9MrY9cti2x8N79EW87/wie5ARaCqBS5xQ4wd9z/vivS34L8YJe8crhNLaacEbpkSYwtlrjTlkOcGTKSp0aXXT+YiR2MNoYPwR3aD3M4iBwVMlivaK8y0vd42qcqW5UkarurzolJNnv2RIH9iYcHvwQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727191127; c=relaxed/simple; bh=ut7WGEkcJcd488yPQAhL+mRrlcJGUsDwUTD2XyKhziU=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type; b=FYGEP3+0mahcyQWUDgtY2+H9guU7/1X1FJ1+UE8HlBuiWbOXT9NZQ3VyS7vpzTNtHDaK2jV4wnJpZrbO1Uvnj+YpHcyHxPnsymUJkSAbFN+y92kQjpnx+tA+V5/uulfj6zll1PIpcxlTomvzWDnL37fGeLxpBJFiUrbwy+Kzmzc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=OMwxf/Mo; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="OMwxf/Mo" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1727191124; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ehyIUUeAm5/wUm2eNXfXo9sX8FM2ULWzOidBu/JJbzI=; b=OMwxf/MobpbSHYGHBd9oB7LUUTaD6bGY/R+OsEneez5Lq14bB/yhXH5WWmn7OMVFoN8akF w9nGMmJDyveU78CLCtNVSkuicjvZ+fFQgf+RQTMr/EaPfyltIkt+LgHqL8l+MSYQOIAqXe T7QVcfS2GrQ3D/Au32IrNUHo0The2pk= Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-624-OSMvpJAXMa-augrZ6bl5TA-1; Tue, 24 Sep 2024 11:18:42 -0400 X-MC-Unique: OSMvpJAXMa-augrZ6bl5TA-1 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (unknown [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 1E37E1977016 for ; Tue, 24 Sep 2024 15:18:42 +0000 (UTC) Received: from aion.redhat.com (unknown [10.22.64.112]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id ABF061955E87 for ; Tue, 24 Sep 2024 15:18:41 +0000 (UTC) Received: from aion.redhat.com (localhost [IPv6:::1]) by aion.redhat.com (Postfix) with ESMTP id 074171F34A4 for ; Tue, 24 Sep 2024 11:18:40 -0400 (EDT) From: Scott Mayhew To: kdevops@lists.linux.dev Subject: [PATCH v3] fstests/nfs: add ability to test with NFS loopback mounts Date: Tue, 24 Sep 2024 11:18:39 -0400 Message-ID: <20240924151839.874242-1-smayhew@redhat.com> Precedence: bulk X-Mailing-List: kdevops@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Add the ability to test with NFS loopback mounts (meaning NFS mounts where the NFS server is also a client - not necessarily using the loopback interface). The primary motivation is to facilitate testing of NFS with LOCALIO support: https://lore.kernel.org/linux-nfs/0bd8f46b4b4c1e0bc9008014e8442fa3a7f3afe5.camel@kernel.org/T/#t The changes should be pretty straightforward for the most part, the one exception being the change to the "Check which fstests test types are enabled" task in both the gen_hosts and gen_nodes playbooks. Here we add some logic to cause the "[nfsd]" section of nfs.config to be ignored. The reason for that is so that we don't wind up with a value of "nfs-nfsd" to be added fstests_enabled_test_types list, which would then cause a bogus "{{ kdevops-hosts-prefix }}-nfs-nfsd guestfs node configuration to be created as well as a bogus entry to be added to the ansible inventory file. Signed-off-by: Scott Mayhew Reviewed-by: Chuck Lever --- Changes in v3: - The previous version actually broke testing in the non-loopback case because it was relying on the "fstests_nfs_section_nfsd" variable, which isn't defined during the bringup phase. Added a new variable "kdevops_loopback_nfs_enable" which fixes this and also makes the intention in the fstests.j2 template clearer. Changes in v2: - make use of the new yaml output feature for the new kconfig option - add note in the help text stating that it's hardcoded to use v4.1 playbooks/roles/fstests/defaults/main.yml | 1 + playbooks/roles/fstests/templates/nfs/nfs.config | 7 +++++++ playbooks/roles/gen_hosts/defaults/main.yml | 1 + playbooks/roles/gen_hosts/tasks/main.yml | 3 ++- playbooks/roles/gen_hosts/templates/fstests.j2 | 15 +++++++++++++++ playbooks/roles/gen_nodes/tasks/main.yml | 3 ++- scripts/nfsd.Makefile | 4 ++++ workflows/fstests/nfs/Kconfig | 10 ++++++++++ 8 files changed, 42 insertions(+), 2 deletions(-) diff --git a/playbooks/roles/fstests/defaults/main.yml b/playbooks/roles/fstests/defaults/main.yml index 8b6872c..17a7e52 100644 --- a/playbooks/roles/fstests/defaults/main.yml +++ b/playbooks/roles/fstests/defaults/main.yml @@ -166,6 +166,7 @@ fstests_nfs_use_kdevops_nfsd: False fstests_nfs_section_pnfs: False fstests_nfs_section_rdma: False fstests_nfs_section_tls: False +fstests_nfs_section_nfsd: False fstests_nfs_section_default: False fstests_nfs_section_v42: False fstests_nfs_section_v41: False diff --git a/playbooks/roles/fstests/templates/nfs/nfs.config b/playbooks/roles/fstests/templates/nfs/nfs.config index 40003b5..00911af 100644 --- a/playbooks/roles/fstests/templates/nfs/nfs.config +++ b/playbooks/roles/fstests/templates/nfs/nfs.config @@ -31,6 +31,13 @@ MOUNT_OPTIONS="-o rdma" TEST_FS_MOUNT_OPTS="-o xprtsec=mtls" MOUNT_OPTIONS="-o xprtsec=mtls" {% endif %} +{% if fstests_nfs_section_nfsd -%} + +# Test NFS over loopback +[nfsd] +TEST_FS_MOUNT_OPTS="-o vers=4.1" +MOUNT_OPTIONS="-o vers=4.1" +{% endif %} {% if fstests_nfs_section_v42 -%} # Test NFSv4.2 diff --git a/playbooks/roles/gen_hosts/defaults/main.yml b/playbooks/roles/gen_hosts/defaults/main.yml index 8d05aa4..1cb3940 100644 --- a/playbooks/roles/gen_hosts/defaults/main.yml +++ b/playbooks/roles/gen_hosts/defaults/main.yml @@ -34,6 +34,7 @@ fs_config_role_path: "/dev/null" fs_config_data: "[section_1]" kdevops_nfsd_enable: False +kdevops_loopback_nfs_enable: False kdevops_smbd_enable: False kdevops_krb5_enable: False kdevops_enable_iscsi: false diff --git a/playbooks/roles/gen_hosts/tasks/main.yml b/playbooks/roles/gen_hosts/tasks/main.yml index a4dd1f5..f498a6f 100644 --- a/playbooks/roles/gen_hosts/tasks/main.yml +++ b/playbooks/roles/gen_hosts/tasks/main.yml @@ -154,7 +154,8 @@ config_val: "{{ 'CONFIG_FSTESTS_' + fs + '_SECTION_' }}" fs_config_data: "{{ lookup('file', fs_config_path) }}" sections_without_default: "{{ fs_config_data | regex_replace('\\[default\\]', multiline=True) }}" - sections_lines: "{{ sections_without_default | regex_findall('^\\[(.*)', multiline=True) }}" + sections_without_default_and_nfsd: "{{ sections_without_default | regex_replace('\\[nfsd\\]', multiline=True) }}" + sections_lines: "{{ sections_without_default_and_nfsd | regex_findall('^\\[(.*)', multiline=True) }}" clean_section_lines: "{{ sections_lines | regex_replace('\\[') | regex_replace('\\]') }}" clean_section_lines_without_fsname: "{{ clean_section_lines | regex_replace(fstests_fstyp + '_') }}" config_sections_targets: "{{ clean_section_lines_without_fsname | replace(\"'\", '') | split(', ') }}" diff --git a/playbooks/roles/gen_hosts/templates/fstests.j2 b/playbooks/roles/gen_hosts/templates/fstests.j2 index 678c90b..abcdafd 100644 --- a/playbooks/roles/gen_hosts/templates/fstests.j2 +++ b/playbooks/roles/gen_hosts/templates/fstests.j2 @@ -5,12 +5,22 @@ {{ kdevops_host_prefix }}-{{ s }}-dev {% endif %} {% endfor %} +{% if kdevops_nfsd_enable %} +{% if kdevops_loopback_nfs_enable %} +{{ kdevops_hosts_prefix }}-nfsd +{% endif %} +{% endif %} [all:vars] ansible_python_interpreter = "{{ kdevops_python_interpreter }}" [baseline] {% for s in fstests_enabled_test_types %} {{ kdevops_host_prefix }}-{{ s }} {% endfor %} +{% if kdevops_nfsd_enable %} +{% if kdevops_loopback_nfs_enable %} +{{ kdevops_hosts_prefix }}-nfsd +{% endif %} +{% endif %} [baseline:vars] ansible_python_interpreter = "{{ kdevops_python_interpreter }}" [dev] @@ -18,6 +28,11 @@ ansible_python_interpreter = "{{ kdevops_python_interpreter }}" {% for s in fstests_enabled_test_types %} {{ kdevops_host_prefix }}-{{ s }}-dev {% endfor %} +{% if kdevops_nfsd_enable %} +{% if kdevops_loopback_nfs_enable %} +{{ kdevops_hosts_prefix }}-nfsd +{% endif %} +{% endif %} {% endif %} [dev:vars] ansible_python_interpreter = "{{ kdevops_python_interpreter }}" diff --git a/playbooks/roles/gen_nodes/tasks/main.yml b/playbooks/roles/gen_nodes/tasks/main.yml index 247cbfc..f497da7 100644 --- a/playbooks/roles/gen_nodes/tasks/main.yml +++ b/playbooks/roles/gen_nodes/tasks/main.yml @@ -213,7 +213,8 @@ config_val: "{{ 'CONFIG_FSTESTS_' + fs + '_SECTION_' }}" fs_config_data: "{{ lookup('file', fs_config_path) }}" sections_without_default: "{{ fs_config_data | regex_replace('\\[default\\]', multiline=True) }}" - sections_lines: "{{ sections_without_default | regex_findall('^\\[(.*)', multiline=True) }}" + sections_without_default_and_nfsd: "{{ sections_without_default | regex_replace('\\[nfsd\\]', multiline=True) }}" + sections_lines: "{{ sections_without_default_and_nfsd | regex_findall('^\\[(.*)', multiline=True) }}" clean_section_lines: "{{ sections_lines | regex_replace('\\[') | regex_replace('\\]') }}" clean_section_lines_without_fsname: "{{ clean_section_lines | regex_replace(fstests_fstyp + '_') }}" config_sections_targets: "{{ clean_section_lines_without_fsname | replace(\"'\", '') | split(', ') }}" diff --git a/scripts/nfsd.Makefile b/scripts/nfsd.Makefile index ebdbb4d..959cc4b 100644 --- a/scripts/nfsd.Makefile +++ b/scripts/nfsd.Makefile @@ -10,6 +10,10 @@ ifeq (y,$(CONFIG_NFSD_EXPORT_STORAGE_ISCSI)) NFSD_EXTRA_ARGS += nfsd_export_storage_iscsi=true endif +ifeq (y,$(CONFIG_FSTESTS_NFS_SECTION_NFSD)) +NFSD_EXTRA_ARGS += kdevops_loopback_nfs_enable=true +endif + NFSD_EXTRA_ARGS += nfsd_export_fstype='$(subst ",,$(CONFIG_NFSD_EXPORT_FSTYPE))' NFSD_EXTRA_ARGS += nfsd_export_path='$(subst ",,$(CONFIG_NFSD_EXPORT_PATH))' NFSD_EXTRA_ARGS += nfsd_threads=$(CONFIG_NFSD_THREADS) diff --git a/workflows/fstests/nfs/Kconfig b/workflows/fstests/nfs/Kconfig index 6a728aa..0b32e71 100644 --- a/workflows/fstests/nfs/Kconfig +++ b/workflows/fstests/nfs/Kconfig @@ -68,6 +68,16 @@ config FSTESTS_NFS_SECTION_TLS help Enabling this will test with the xprtsec=tls mount option. +config FSTESTS_NFS_SECTION_NFSD + bool "Enable testing section: nfsd" + output yaml + default n + depends on FSTESTS_USE_KDEVOPS_NFSD + help + Enabling this will test with an NFS client running on the + NFS server itself. Note that this feature is currently + hard-coded to use NFSv4.1. + config FSTESTS_NFS_SECTION_V42 bool "Enable testing section: nfs_v42" default y