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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.