Re: [RFC PATCH 2/2] ansible.cfg: generate an ansible.cfg file in TOPDIR
Chuck Lever <[email protected]>
| Newsgroups | dev.linux.lists.kdevops |
|---|---|
| Organization | kernel.org |
| Message-ID | <[email protected]> |
On 9/1/25 8:00 AM, Daniel Gomez wrote: > On 28/08/2025 22.28, Chuck Lever wrote: >> From: Chuck Lever <[email protected]> >> >> I need an ansible.cfg that is generated by the Kconfig menu, but >> whose pathname is selected dynamically based on where kdevops is >> being run rather than having that path baked into the .config. > > I'm trying to review the previous conversation before these patches as well as > this series. Please, let me know if I'm understanding something wrong: > > I think what we need is not to have individual configuration paths (as we > have now) for ansible.cfg, inventory, etc. What we want is to have one sandbox > folder, our TOPDIR, and have our kdevops sandbox directory there. All files > generated and consumed by kdevops should then use that path. > > Would this work? Well I think that would work for my particular usage, however: If I'm reading between the lines of the Ansible pathname help texts, it appears that these settings can specify search paths, not a single file. In particular, the ANSIBLE_CFG_INVENTORY_FILE string is a comma- separated list. And, if ANSIBLE_CFG_FILE is an empty string, then there is a default set of locations /outside of/ the CWD that Ansible searches for a configuration. I'm not against your suggestion of specifying a sandbox pathname at all; that would be a good UX simplification. There are these details, though, and I don't have any suggestions about that at the moment. > See below: > > kdevops-tree $ make defconfig-selftest-xarray O=path/to/sandbox0 > # Now path/to/sandbox0 contains the generated .config, extra_vars.yml, etc > kdevops-tree $ make menuconfig O=path/to/sandbox0 > kdevops-tree $ make O=path/to/sandbox0 > kdevops-tree $ make bringup O=path/to/sandbox0 > ... > kdevops-tree $ make defconfig-tmpfs O=path/to/sandbox1 > ... > path/to/sandbox0 $ make linux > path/to/sandbox0 $ make selftests > path/to/sandbox0 $ make selftests-xarray > ... > path/to/sandbox1 $ make > path/to/sandbox1 $ make bringup > path/to/sandbox1 $ make linux > path/to/sandbox1 $ make fstests > path/to/sandbox1 $ make fstests-baseline > > To clarify: instead of letting users override individual file paths, we allow > customization of the topdir directory (with O=) where all files are created. > If O= is not passed, then PWD is assumed. I think it would still be useful to > support customizing individual files, but only relative to TOPDIR. That would > keep the structure cleaner, for example, using subdirectories for Ansible files, > kconfigs, SSH, virsh, and so on. > >> Signed-off-by: Chuck Lever <[email protected]> >> --- >> Makefile | 8 ++++++++ >> kconfigs/Kconfig.ansible_cfg | 12 ++++++++++++ >> 2 files changed, 20 insertions(+) >> >> diff --git a/Makefile b/Makefile >> index b6fdbe67fc07..b014faa5632e 100644 >> --- a/Makefile >> +++ b/Makefile >> @@ -27,10 +27,15 @@ KDEVOPS_NODES_ROLE_TEMPLATE_DIR := $(KDEVOPS_PLAYBOOKS_DIR)/roles/gen_nodes/tem >> export KDEVOPS_NODES_TEMPLATE := >> export KDEVOPS_MRPROPER := >> >> +ifeq (y,$(CONFIG_ANSIBLE_CFG_FILE_DEFAULT)) >> +ANSIBLE_CFG_FILE := $(TOPDIR_PATH)/ansible.cfg >> +export ANSIBLE_CONFIG := $(ANSIBLE_CFG_FILE) >> +else > > What I'm suggesting above is to always use this new option. And perhaps > keep ANSIBLE_CFG_FILE configurable but inside TOPDIR. For example: > ANSIBLE_CFG_FILE=ansible/ansible.cfg. > >> ifneq ($(strip $(CONFIG_ANSIBLE_CFG_FILE)),) >> ANSIBLE_CFG_FILE := $(shell echo $(CONFIG_ANSIBLE_CFG_FILE) | tr --delete '"') >> export ANSIBLE_CONFIG := $(ANSIBLE_CFG_FILE) >> endif >> +endif >> ANSIBLE_INVENTORY_FILE := $(shell echo $(CONFIG_ANSIBLE_CFG_INVENTORY) | tr --delete '"') >> >> KDEVOPS_INSTALL_TARGETS := >> @@ -86,6 +91,9 @@ CFLAGS += $(INCLUDES) >> ANSIBLE_EXTRA_ARGS += kdevops_version='$(PROJECTRELEASE)' >> ANSIBLE_EXTRA_ARGS += topdir_path_has_sha256sum='$(TOPDIR_PATH_HAS_SHA256SUM)' >> ANSIBLE_EXTRA_ARGS += topdir_path_sha256sum='$(TOPDIR_PATH_SHA256SUM)' >> +ifeq (y,$(CONFIG_ANSIBLE_CFG_FILE_DEFAULT)) >> +ANSIBLE_EXTRA_ARGS += ansible_cfg_file='$(ANSIBLE_CFG_FILE)' >> +endif >> >> export KDEVOPS_HOSTS_TEMPLATE := hosts.j2 >> >> diff --git a/kconfigs/Kconfig.ansible_cfg b/kconfigs/Kconfig.ansible_cfg >> index dbd189f5d19e..a44f760912cf 100644 >> --- a/kconfigs/Kconfig.ansible_cfg >> +++ b/kconfigs/Kconfig.ansible_cfg >> @@ -18,6 +18,16 @@ config ANSIBLE_CFG_INVENTORY_SET_BY_CLI >> bool >> default $(shell, scripts/check-cli-set-var.sh KDEVOPS_HOSTS) >> >> +config ANSIBLE_CFG_FILE_DEFAULT >> + bool "Use a sensible default location for the ansible.cfg file" >> + default N >> + help >> + When this option is set to Y, kdevops creates an ansible.cfg >> + in a sensible default location, using the settings defined >> + in this Kconfig menu. >> + >> +if !ANSIBLE_CFG_FILE_DEFAULT >> + > > I think we don't need this if you agree with the approach above. > >> config ANSIBLE_CFG_FILE >> string "Ansible configuration file" >> output yaml >> @@ -41,6 +51,8 @@ config ANSIBLE_CFG_FILE >> For more details, refer to the Ansible documentation: >> https://docs.ansible.com/ansible/latest/reference_appendices/config.html#the-configuration-file >> >> +endif # ANSIBLE_CFG_FILE_DEFAULT >> + >> menu "Ansible Callback Plugin Configuration" >> choice >> prompt "Ansible Callback Plugin" -- Chuck Lever