### Summary
ansible-playbook on macOS does not work with group module when loop…s are involved.
You keep closing my bugs! I've filed two bugs prior on the Ansible GitHub:
https://github.com/ansible/ansible/issues/85884
https://github.com/ansible/ansible/issues/85873
I've also just filed a bug with Homebrew:
https://github.com/Homebrew/homebrew-core/issues/245465
Lastly, I started a topic on the Ansible forum:
https://forum.ansible.com/t/ansible-playbook-does-not-working-with-dictionary-and-with-items-loop/44511
### Issue Type
Bug Report
### Component Name
ansible-core, ansible.builtin.group
### Ansible Version
```console
$ ansible --version
ansible [core 2.19.2]
config file = /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/ansible.cfg
configured module search path = ['/Users/chris/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible
ansible collection location = /Users/chris/.ansible/collections:/usr/share/ansible/collections
executable location = /opt/homebrew/bin/ansible
python version = 3.13.7 (main, Aug 14 2025, 11:12:11) [Clang 17.0.0 (clang-1700.0.13.3)] (/opt/homebrew/Cellar/ansible/12.0.0/libexec/bin/python)
jinja version = 3.1.6
pyyaml version = 6.0.2 (with libyaml v0.2.5)
```
### Configuration
```console
# if using a version older than ansible-core 2.12 you should omit the '-t all'
$ ansible-config dump --only-changed -t all
ANSIBLE_PIPELINING(/Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/ansible.cfg) = True
CONFIG_FILE() = /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/ansible.cfg
DEFAULT_ROLES_PATH(/Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/ansible.cfg) = ['/Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/roles']
DEFAULT_VAULT_PASSWORD_FILE(/Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/ansible.cfg) = /opt/ChrisWasHere/.secrets/ansible_vault_password.txt
EDITOR(env: EDITOR) = vim
INTERPRETER_PYTHON(/Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/ansible.cfg) = auto_silent
GALAXY_SERVERS:
CONNECTION:
==========
local:
_____
pipelining(/Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/ansible.cfg) = True
psrp:
____
pipelining(/Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/ansible.cfg) = True
ssh:
___
pipelining(/Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/ansible.cfg) = True
winrm:
_____
pipelining(/Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/ansible.cfg) = True
```
### OS / Environment
```
CAPSULE-V-001-MM037:~ chris$ sw_vers
ProductName: macOS
ProductVersion: 15.4
BuildVersion: 24E248
Bare metal Mac mini host at MacStadium:
Motd Updated : 2025/07/18 16:47:07
Hostname : CAPSULE-V-001-MM037.local
Privte IP Address : 10.210.106.47
OS Info : ProductName: macOS
ProductVersion: 15.4
BuildVersion: 24E248
Hardware Info : Model Identifier: Mac16,10
Model Number: XXXXXXXXXXXX
Chip: Apple M4
Total Number of Cores: 10 (4 performance and 6 efficiency)
Memory: 24 GB
System Firmware Version: 11881.101.1
OS Loader Version: 11881.101.1
Provisioning UDID: XXXXXXXXXXXXXXXXXX
Activation Lock Status: Disabled
Disk Used/Total : 60G / 494G
```
### Steps to Reproduce
add_groups.yml with loops:
```yaml (paste below)
---
# file: roles/common/tasks/add_groups.yml
#
# Order of operation: rm_users.yml -> rm_groups.yml -> add_groups.yml ->
# add_users.yml -> set_homedir_perms.yml
# - name: user management set global groups macOS
# tags:
# - user_mgmt
# - admin_accounts
# group:
# name: "{{ item }}"
# gid: "{{ custom_groups[item].gid if custom_groups[item] is defined else global_groups[item].gid | mandatory }}"
# state: "{{ global_groups[item].state | default('present') }}"
# with_items: "{{ global_groups }}"
# when:
# - (global_groups[item].state|default('present')) == 'present'
# - item not in skip_groups
- name: user management set global groups macOS
tags:
- user_mgmt
- admin_accounts
group:
name: "{{ item }}"
# gid: "{{ custom_groups[item].gid if custom_groups[item] is defined else global_groups[item].gid | mandatory }}"
# gid: "{{ global_groups[item].gid }}"
# state: "{{ global_groups[item].state | default('present') }}"
gid: "{{ item.gid | mandatory }}"
state: "{{ item.state | default('present') }}"
# with_list: global_groups
loop: "{{ global_groups | dict2items }}"
when:
- (global_groups[item].state|default('present')) == 'present'
- item not in skip_groups
- name: user management set local groups macOS
tags:
- user_mgmt
group:
name: "{{ item }}"
gid: "{{ item.gid | mandatory }}"
state: "{{ item.state | default('present') }}"
with_items: "{{ local_groups }}"
when: (global_groups[item].state|default('present')) == 'present'
- name: user management set custom groups macOS
tags:
- user_mgmt
group:
name: "{{ item | mandatory }}"
gid: "{{ custom_groups[item].gid | mandatory }}"
state: "{{ custom_groups[item].state | default('present') }}"
with_items: "{{ custom_groups.keys() }}"
when: custom_groups is defined
# vim:ft=ansible:
```
add_groups.yml without loops:
```
---
# file: roles/common/tasks/add_groups.yml
#
# Order of operation: rm_users.yml -> rm_groups.yml -> add_groups.yml ->
# add_users.yml -> set_homedir_perms.yml
# - name: user management set global groups macOS
# tags:
# - user_mgmt
# - admin_accounts
# group:
# name: "{{ item }}"
# gid: "{{ custom_groups[item].gid if custom_groups[item] is defined else global_groups[item].gid | mandatory }}"
# state: "{{ global_groups[item].state | default('present') }}"
# with_items: "{{ global_groups }}"
# when:
# - (global_groups[item].state|default('present')) == 'present'
# - item not in skip_groups
#- name: debug global_groups
# debug:
# var: test_global_groups
- name: user management set global groups macOS
tags:
- user_mgmt
- admin_accounts
- groups_only
group:
name: production_ansible
gid: 10001
state: present
# gid: "{{ item.gid }}"
# state: "{{ item.state | default('present') }}"
# loop: "{{ test_global_groups | dict2items }}"
# when:
# - (test_global_groups[item].state|default('present')) == 'present'
# - item not in skip_groups
#- name: user management set global groups macOS
# tags:
# - user_mgmt
# - admin_accounts
# group:
# name: "{{ item.key }}"
# gid: "{{ item.gid }}"
# state: "{{ item.state | default('present') }}"
# loop: "{{ test_global_groups | dict2items }}"
# when:
# - (test_global_groups[item].state|default('present')) == 'present'
# - item not in skip_groups
#- name: user managment set local groups macOS
# tags:
# - user_mgmt
# group:
# name: "{{ item }}"
# gid: "{{ item.gid | mandatory }}"
# state: "{{ item.state | default('present') }}"
# with_items: "{{ local_groups }}"
# when: (global_groups[item].state|default('present')) == 'present'
#- name: user managment set custom groups macOS
# tags:
# - user_mgmt
# group:
# name: "{{ item }}"
# gid: "{{ custom_groups[item].gid | mandatory }}"
# state: "{{ custom_groups[item].state | default('present') }}"
# with_items: "{{ custom_groups.keys() }}"
# when: custom_groups is defined
#
...
# vim:ft=ansible
```
group_vars/all/group_list:
```
---
# file: groups_vars/all/group_list [0/1865]
# desc: Dictionary of all groups, both global and local.
# Any group whose gid doesn't match the user's uid must be declared.
#
# Example:
# (key) dba:
# (required) gid: 10019
# (optional) state: present
#
global_groups:
production_ansible:
gid: 10001
staging_ansible:
gid: 20001
grafana:
gid: 10501
prometheus:
gid: 10502
zookeeper:
gid: 10503
rundeck:
gid: 10504
nginx:
gid: 10505
gnupgserver:
gid: 10506
sequoia:
gid: 10507
#group_list:
# production_ansible:
# gid: 10001
# staging_ansible:
# gid: 20001
# grafana:
# gid: 10501
# prometheus:
# gid: 10502
# zookeeper:
# gid: 10503
# rundeck:
# gid: 10504
# nginx:
# gid: 10505
## These lists should be declared under group_vars or host_vars. These empty lists
## are here for compatibility.
local_groups: []
custom_groups: {}
local_remove_groups: []
local_admin_users: []
local_service_users: []
local_remove_users: []
custom_service_users: []
host_local_service_users: []
global_remove_groups:
#local_remove_groups:
#global_groups:
#local_groups:
...
# vim:ft=ansible
```
roles/common/vars/main.yml:
```
#SPDX-License-Identifier: MIT-0
---
# vars file for common
001_vault_secrets_file: inventory/{{ deployment_enviroment }}/group_files/all/001_vault_secrets.yml.gpg
test_global_groups:
production_ansible:
gid: 10001
staging_ansible:
gid: 20001
grafana:
gid: 10501
prometheus:
gid: 10502
zookeeper:
gid: 10503
rundeck:
gid: 10504
nginx:
gid: 10505
gnupgserver:
gid: 10506
sequoia:
gid: 10507
...
# vim:ft=ansible
```
### Expected Results
Here's it work without loops!
```
ansible-playbook --inventory inventory/staging/staging playbooks/manage_users_and_groups.yml --private-key ~/.ssh/staging_ansible_id_ed25519 --user staging_ansible --limit capsule-v-001-mm037 -vvvvv --skip-tags to_skip &> ~/Temporary/ansible-playbook.common_role.with_debugger_no_loops.txt
```
[ansible-playbook.common_role.with_debugger_no_loops.txt](https://github.com/user-attachments/files/22504269/ansible-playbook.common_role.with_debugger_no_loops.txt)
### Actual Results
```console
Here's it failing with loops:
ansible-playbook --inventory inventory/staging/staging playbooks/manage_users_and_groups.yml --private-key ~/.ssh/staging_ansible_id_ed25519 --user staging_ansible --limit capsule-v-001-mm037 -vvvvv --skip-tags to_skip &> ~/Temporary/ansible-playbook.common_role.with_debgger.output.txt
Output of ansible-playbook.common_role.with_debgger.output.txt:
ansible-playbook [core 2.19.2]
config file = /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/ansible.cfg
configured module search path = ['/Users/chris/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible
ansible collection location = /Users/chris/.ansible/collections:/usr/share/ansible/collections
executable location = /opt/homebrew/bin/ansible-playbook
python version = 3.13.7 (main, Aug 14 2025, 11:12:11) [Clang 17.0.0 (clang-1700.0.13.3)] (/opt/homebrew/Cellar/ansible/12.0.0/libexec/bin/python)
jinja version = 3.1.6
pyyaml version = 6.0.2 (with libyaml v0.2.5)
Using /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/ansible.cfg as config file
Reading vault password file: /opt/ChrisWasHere/.secrets/ansible_vault_password.txt
setting up inventory plugins
Loading collection ansible.builtin from
host_list declined parsing /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/inventory/staging/staging as it did not pass its verify_file() method
script declined parsing /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/inventory/staging/staging as it did not pass its verify_file() method
auto declined parsing /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/inventory/staging/staging as it did not pass its verify_file() method
Parsed /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/inventory/staging/staging inventory source with yaml plugin
Loading collection community.general from /opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible_collections/community/general
Loading callback plugin default of type stdout, v2.0 from /opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible/plugins/callback/default.py
Attempting to use 'junit' callback.
Attempting to use 'minimal' callback.
Skipping callback 'minimal', as we already have a stdout callback.
Attempting to use 'oneline' callback.
Skipping callback 'oneline', as we already have a stdout callback.
Attempting to use 'tree' callback.
PLAYBOOK: manage_users_and_groups.yml ******************************************
Positional arguments: playbooks/manage_users_and_groups.yml
verbosity: 5
private_key_file: /Users/chris/.ssh/staging_ansible_id_ed25519
remote_user: staging_ansible
connection: ssh
become_method: sudo
tags: ('all',)
skip_tags: ('to_skip',)
inventory: ('/Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/inventory/staging/staging',)
subset: capsule-v-001-mm037
forks: 5
1 plays in playbooks/manage_users_and_groups.yml
PLAY [All common roles] ********************************************************
TASK [Gathering Facts] *********************************************************
task path: /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/playbooks/manage_users_and_groups.yml:4
Including module_utils file ansible/__init__.py
Including module_utils file ansible/module_utils/__init__.py
Including module_utils file ansible/module_utils/_internal/_ansiballz/_loader.py
Including module_utils file ansible/module_utils/_internal/__init__.py
Including module_utils file ansible/module_utils/_internal/_ansiballz/__init__.py
Including module_utils file ansible/module_utils/_internal/_errors.py
Including module_utils file ansible/module_utils/_internal/_json/_profiles/_module_legacy_c2m.py
Including module_utils file ansible/module_utils/_internal/_json/__init__.py
Including module_utils file ansible/module_utils/_internal/_json/_profiles/__init__.py
Including module_utils file ansible/module_utils/_internal/_datatag/__init__.py
Including module_utils file ansible/module_utils/_internal/_dataclass_validation.py
Including module_utils file ansible/module_utils/_internal/_datatag/_tags.py
Including module_utils file ansible/module_utils/_internal/_json/_profiles/_module_legacy_m2c.py
Including module_utils file ansible/module_utils/_internal/_messages.py
Including module_utils file ansible/module_utils/_internal/_patches/_socket_patch.py
Including module_utils file ansible/module_utils/_internal/_patches/__init__.py
Including module_utils file ansible/module_utils/_internal/_patches/_sys_intern_patch.py
Including module_utils file ansible/module_utils/_internal/_traceback.py
Including module_utils file ansible/module_utils/_internal/_stack.py
Including module_utils file ansible/module_utils/basic.py
Including module_utils file ansible/module_utils/_internal/_debugging.py
Including module_utils file ansible/module_utils/_internal/_deprecator.py
Including module_utils file ansible/module_utils/_internal/_plugin_info.py
Including module_utils file ansible/module_utils/_internal/_validation.py
Including module_utils file ansible/module_utils/common/_utils.py
Including module_utils file ansible/module_utils/common/__init__.py
Including module_utils file ansible/module_utils/common/arg_spec.py
Including module_utils file ansible/module_utils/common/file.py
Including module_utils file ansible/module_utils/common/json.py
Including module_utils file ansible/module_utils/_internal/_json/_legacy_encoder.py
Including module_utils file ansible/module_utils/_internal/_json/_profiles/_tagless.py
Including module_utils file ansible/module_utils/common/locale.py
Including module_utils file ansible/module_utils/common/parameters.py
Including module_utils file ansible/module_utils/common/collections.py
Including module_utils file ansible/module_utils/common/process.py
Including module_utils file ansible/module_utils/common/sys_info.py
Including module_utils file ansible/module_utils/common/text/converters.py
Including module_utils file ansible/module_utils/common/text/__init__.py
Including module_utils file ansible/module_utils/common/text/formatters.py
Including module_utils file ansible/module_utils/common/validation.py
Including module_utils file ansible/module_utils/common/warnings.py
Including module_utils file ansible/module_utils/_internal/_event_utils.py
Including module_utils file ansible/module_utils/_internal/_text_utils.py
Including module_utils file ansible/module_utils/compat/selinux.py
Including module_utils file ansible/module_utils/compat/__init__.py
Including module_utils file ansible/module_utils/compat/typing.py
Including module_utils file ansible/module_utils/_internal/_patches/_dataclass_annotation_patch.py
Including module_utils file ansible/module_utils/datatag.py
Including module_utils file ansible/module_utils/distro/__init__.py
Including module_utils file ansible/module_utils/distro/_distro.py
Including module_utils file ansible/module_utils/errors.py
Including module_utils file ansible/module_utils/facts/ansible_collector.py
Including module_utils file ansible/module_utils/facts/__init__.py
Including module_utils file ansible/module_utils/facts/collector.py
Including module_utils file ansible/module_utils/facts/compat.py
Including module_utils file ansible/module_utils/facts/default_collectors.py
Including module_utils file ansible/module_utils/facts/hardware/aix.py
Including module_utils file ansible/module_utils/facts/hardware/__init__.py
Including module_utils file ansible/module_utils/facts/hardware/base.py
Including module_utils file ansible/module_utils/facts/hardware/darwin.py
Including module_utils file ansible/module_utils/facts/hardware/dragonfly.py
Including module_utils file ansible/module_utils/facts/hardware/freebsd.py
Including module_utils file ansible/module_utils/facts/hardware/hpux.py
Including module_utils file ansible/module_utils/facts/hardware/hurd.py
Including module_utils file ansible/module_utils/facts/hardware/linux.py
Including module_utils file ansible/module_utils/_internal/_concurrent/_futures.py
Including module_utils file ansible/module_utils/_internal/_concurrent/__init__.py
Including module_utils file ansible/module_utils/_internal/_concurrent/_daemon_threading.py
Including module_utils file ansible/module_utils/facts/hardware/netbsd.py
Including module_utils file ansible/module_utils/facts/hardware/openbsd.py
Including module_utils file ansible/module_utils/facts/hardware/sunos.py
Including module_utils file ansible/module_utils/facts/namespace.py
Including module_utils file ansible/module_utils/facts/network/aix.py
Including module_utils file ansible/module_utils/facts/network/__init__.py
Including module_utils file ansible/module_utils/facts/network/base.py
Including module_utils file ansible/module_utils/facts/network/darwin.py
Including module_utils file ansible/module_utils/facts/network/dragonfly.py
Including module_utils file ansible/module_utils/facts/network/fc_wwn.py
Including module_utils file ansible/module_utils/facts/network/freebsd.py
Including module_utils file ansible/module_utils/facts/network/generic_bsd.py
Including module_utils file ansible/module_utils/facts/network/hpux.py
Including module_utils file ansible/module_utils/facts/network/hurd.py
Including module_utils file ansible/module_utils/facts/network/iscsi.py
Including module_utils file ansible/module_utils/facts/network/linux.py
Including module_utils file ansible/module_utils/facts/network/netbsd.py
Including module_utils file ansible/module_utils/facts/network/nvme.py
Including module_utils file ansible/module_utils/facts/network/openbsd.py
Including module_utils file ansible/module_utils/facts/network/sunos.py
Including module_utils file ansible/module_utils/facts/other/facter.py
Including module_utils file ansible/module_utils/facts/other/__init__.py
Including module_utils file ansible/module_utils/facts/other/ohai.py
Including module_utils file ansible/module_utils/facts/sysctl.py
Including module_utils file ansible/module_utils/facts/system/apparmor.py
Including module_utils file ansible/module_utils/facts/system/__init__.py
Including module_utils file ansible/module_utils/facts/system/caps.py
Including module_utils file ansible/module_utils/facts/system/chroot.py
Including module_utils file ansible/module_utils/facts/system/cmdline.py
Including module_utils file ansible/module_utils/facts/system/date_time.py
Including module_utils file ansible/module_utils/facts/system/distribution.py
Including module_utils file ansible/module_utils/facts/system/dns.py
Including module_utils file ansible/module_utils/facts/system/env.py
Including module_utils file ansible/module_utils/facts/system/fips.py
Including module_utils file ansible/module_utils/facts/system/loadavg.py
Including module_utils file ansible/module_utils/facts/system/local.py
Including module_utils file ansible/module_utils/facts/system/lsb.py
Including module_utils file ansible/module_utils/facts/system/pkg_mgr.py
Including module_utils file ansible/module_utils/facts/system/platform.py
Including module_utils file ansible/module_utils/facts/system/python.py
Including module_utils file ansible/module_utils/facts/system/selinux.py
Including module_utils file ansible/module_utils/facts/system/service_mgr.py
Including module_utils file ansible/module_utils/compat/version.py
Including module_utils file ansible/module_utils/facts/system/ssh_pub_keys.py
Including module_utils file ansible/module_utils/facts/system/systemd.py
Including module_utils file ansible/module_utils/facts/system/user.py
Including module_utils file ansible/module_utils/facts/timeout.py
Including module_utils file ansible/module_utils/facts/utils.py
Including module_utils file ansible/module_utils/facts/virtual/base.py
Including module_utils file ansible/module_utils/facts/virtual/__init__.py
Including module_utils file ansible/module_utils/facts/virtual/dragonfly.py
Including module_utils file ansible/module_utils/facts/virtual/freebsd.py
Including module_utils file ansible/module_utils/facts/virtual/hpux.py
Including module_utils file ansible/module_utils/facts/virtual/linux.py
Including module_utils file ansible/module_utils/facts/virtual/netbsd.py
Including module_utils file ansible/module_utils/facts/virtual/openbsd.py
Including module_utils file ansible/module_utils/facts/virtual/sunos.py
Including module_utils file ansible/module_utils/facts/virtual/sysctl.py
Including module_utils file ansible/module_utils/parsing/convert_bool.py
Including module_utils file ansible/module_utils/parsing/__init__.py
Including module_utils file ansible/module_utils/six/__init__.py
<capsule-v-001-mm037> Attempting python interpreter discovery.
<10.210.106.47> ESTABLISH SSH CONNECTION FOR USER: staging_ansible
<10.210.106.47> SSH: ansible.cfg set ssh_args: (-C)(-o)(ControlMaster=auto)(-o)(ControlPersist=60s)
<10.210.106.47> SSH: ANSIBLE_PRIVATE_KEY_FILE/private_key_file/ansible_ssh_private_key_file set: (-o)(IdentityFile="/Users/chris/.ssh/staging_ansible_id_ed25519")
<10.210.106.47> SSH: ansible_password/ansible_ssh_password not set: (-o)(KbdInteractiveAuthentication=no)(-o)(PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey)(-o)(PasswordAuthentication=no)
<10.210.106.47> SSH: ANSIBLE_REMOTE_USER/remote_user/ansible_user/user/-u set: (-o)(User="staging_ansible")
<10.210.106.47> SSH: ANSIBLE_TIMEOUT/timeout set: (-o)(ConnectTimeout=10)
<10.210.106.47> SSH: Set ssh_common_args: ()
<10.210.106.47> SSH: Set ssh_extra_args: ()
<10.210.106.47> SSH: found only ControlPersist; added ControlPath: (-o)(ControlPath="/Users/chris/.ansible/cp/2e613f8131")
<10.210.106.47> SSH: Restrict number of password prompts in case incorrect password is provided.: (-o)(NumberOfPasswordPrompts=1)
<10.210.106.47> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/Users/chris/.ssh/staging_ansible_id_ed25519"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="staging_ansible"' -o ConnectTimeout=10 -o 'ControlPath="/Users/chris/.ansible/cp/2e613f8131"' -o NumberOfPasswordPrompts=1 10.210.106.47 '/bin/sh -c '"'"'echo FOUND; command -v '"'"'"'"'"'"'"'"'python3.13'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.12'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.11'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.10'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.9'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.8'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python3'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3'"'"'"'"'"'"'"'"'; echo ENDFOUND && sleep 0'"'"''
<10.210.106.47> (0, b'FOUND\n/usr/bin/python3\n/usr/bin/python3\nENDFOUND\n', b'')
Using module file /opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible/modules/setup.py
Pipelining is enabled.
<10.210.106.47> ESTABLISH SSH CONNECTION FOR USER: staging_ansible
<10.210.106.47> SSH: ansible.cfg set ssh_args: (-C)(-o)(ControlMaster=auto)(-o)(ControlPersist=60s)
<10.210.106.47> SSH: ANSIBLE_PRIVATE_KEY_FILE/private_key_file/ansible_ssh_private_key_file set: (-o)(IdentityFile="/Users/chris/.ssh/staging_ansible_id_ed25519")
<10.210.106.47> SSH: ansible_password/ansible_ssh_password not set: (-o)(KbdInteractiveAuthentication=no)(-o)(PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey)(-o)(PasswordAuthentication=no)
<10.210.106.47> SSH: ANSIBLE_REMOTE_USER/remote_user/ansible_user/user/-u set: (-o)(User="staging_ansible")
<10.210.106.47> SSH: ANSIBLE_TIMEOUT/timeout set: (-o)(ConnectTimeout=10)
<10.210.106.47> SSH: Set ssh_common_args: ()
<10.210.106.47> SSH: Set ssh_extra_args: ()
<10.210.106.47> SSH: found only ControlPersist; added ControlPath: (-o)(ControlPath="/Users/chris/.ansible/cp/2e613f8131")
<10.210.106.47> SSH: Restrict number of password prompts in case incorrect password is provided.: (-o)(NumberOfPasswordPrompts=1)
<10.210.106.47> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/Users/chris/.ssh/staging_ansible_id_ed25519"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="staging_ansible"' -o ConnectTimeout=10 -o 'ControlPath="/Users/chris/.ansible/cp/2e613f8131"' -o NumberOfPasswordPrompts=1 10.210.106.47 '/bin/sh -c '"'"'sudo --non-interactive -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-bhiouucrbnnkwcjekhgxhoysifovmsyl ; /usr/bin/python3'"'"'"'"'"'"'"'"' && sleep 0'"'"''
<10.210.106.47> Escalation succeeded
<10.210.106.47> (0, b'\n{"ansible_facts": {"ansible_env": {"TERM": "unknown", "SHELL": "/bin/zsh", "USER": "root", "SUDO_USER": "staging_ansible", "SUDO_UID": "20001", "MAIL": "/var/mail/root", "PATH": "/usr/bin:/bin:/usr/sbin:/sbin", "PWD": "/private/var/home/staging_ansible", "SHLVL": "1", "SUDO_COMMAND": "/bin/sh -c echo BECOME-SUCCESS-bhiouucrbnnkwcjekhgxhoysifovmsyl ; /usr/bin/python3", "HOME": "/var/home/staging_ansible", "LOGNAME": "root", "SUDO_GID": "20001", "_": "/usr/bin/python3", "__CF_USER_TEXT_ENCODING": "0x0:0:0", "SDKROOT": "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk", "CPATH": "/usr/local/include", "LIBRARY_PATH": "/usr/local/lib", "MANPATH": "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/share/man:/Library/Developer/CommandLineTools/usr/share/man:/Library/Developer/CommandLineTools/Toolchains/XcodeDefault.xctoolchain/usr/share/man:", "LC_CTYPE": "C.UTF-8"}, "ansible_is_chroot": false, "ansible_system": "Darwin", "ansible_kernel": "24.4.0", "ansible_kernel_version": "Darwin Kernel Version 24.4.0: Wed Mar 19 21:11:02 PDT 2025; root:xnu-11417.101.15~1/RELEASE_ARM64_T8132", "ansible_machine": "arm64", "ansible_python_version": "3.9.6", "ansible_fqdn": "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa", "ansible_hostname": "CAPSULE-V-001-MM037", "ansible_nodename": "CAPSULE-V-001-MM037.local", "ansible_domain": "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa", "ansible_userspace_bits": "64", "ansible_architecture": "arm64", "ansible_model": "Mac16,10", "ansible_product_name": "Mac16,10", "ansible_osversion": "24E248", "ansible_osrevision": "199506", "ansible_processor": "Apple M4", "ansible_processor_cores": "10", "ansible_processor_vcpus": "10", "ansible_memtotal_mb": 24576, "ansible_memfree_mb": 3627, "ansible_uptime_seconds": 1507979, "ansible_lsb": {}, "ansible_distribution": "MacOSX", "ansible_distribution_release": "24.4.0", "ansible_distribution_version": "15.4", "ansible_distribution_major_version": "15", "ansible_os_family": "Darwin", "ansible_interfaces": ["anpi0", "anpi1", "anpi3", "ap1", "awdl0", "bridge0", "en0", "en1", "en2", "en3", "en4", "en5", "en6", "en7", "gif0", "llw0", "lo0", "stf0", "utun0", "utun1", "utun2", "utun3"], "ansible_lo0": {"device": "lo0", "ipv4": [{"address": "127.0.0.1", "netmask": "255.0.0.0", "network": "127.0.0.0", "broadcast": "127.255.255.255"}], "ipv6": [{"address": "::1", "prefix": "128"}, {"address": "fe80::1%lo0", "prefix": "64", "scope": "0x1"}], "type": "loopback", "flags": ["UP", "LOOPBACK", "RUNNING", "MULTICAST"], "macaddress": "unknown", "mtu": "16384", "options": ["PERFORMNUD", "DAD"]}, "ansible_gif0": {"device": "gif0", "ipv4": [], "ipv6": [], "type": "unknown", "flags": ["POINTOPOINT", "MULTICAST"], "macaddress": "unknown", "mtu": "1280"}, "ansible_stf0": {"device": "stf0", "ipv4": [], "ipv6": [], "type": "unknown", "flags": [], "macaddress": "unknown", "mtu": "1280"}, "ansible_anpi1": {"device": "anpi1", "ipv4": [], "ipv6": [], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "macaddress": "7e:ed:2e:b3:ac:2f", "mtu": "1500", "options": ["CHANNEL_IO"], "media": "Unknown", "media_select": "none", "status": "inactive"}, "ansible_anpi3": {"device": "anpi3", "ipv4": [], "ipv6": [], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "macaddress": "7e:ed:2e:b3:ac:31", "mtu": "1500", "options": ["CHANNEL_IO"], "media": "Unknown", "media_select": "none", "status": "inactive"}, "ansible_anpi0": {"device": "anpi0", "ipv4": [], "ipv6": [], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "macaddress": "7e:ed:2e:b3:ac:2e", "mtu": "1500", "options": ["CHANNEL_IO"], "media": "Unknown", "media_select": "none", "status": "inactive"}, "ansible_en5": {"device": "en5", "ipv4": [], "ipv6": [], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "macaddress": "7e:ed:2e:b3:ac:0e", "mtu": "1500", "options": ["PERFORMNUD", "DAD"], "media": "Unknown", "media_select": "none", "status": "inactive"}, "ansible_en6": {"device": "en6", "ipv4": [], "ipv6": [], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "macaddress": "7e:ed:2e:b3:ac:0f", "mtu": "1500", "options": ["PERFORMNUD", "DAD"], "media": "Unknown", "media_select": "none", "status": "inactive"}, "ansible_en7": {"device": "en7", "ipv4": [], "ipv6": [], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "macaddress": "7e:ed:2e:b3:ac:11", "mtu": "1500", "options": ["PERFORMNUD", "DAD"], "media": "Unknown", "media_select": "none", "status": "inactive"}, "ansible_en2": {"device": "en2", "ipv4": [], "ipv6": [], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "PROMISC", "SIMPLEX", "MULTICAST"], "macaddress": "36:bf:f5:38:f8:80", "mtu": "1500", "options": ["TSO4", "TSO6", "CHANNEL_IO"], "media": "Unknown", "media_select": "autoselect", "media_type": "full-duplex", "status": "inactive"}, "ansible_en3": {"device": "en3", "ipv4": [], "ipv6": [], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "PROMISC", "SIMPLEX", "MULTICAST"], "macaddress": "36:bf:f5:38:f8:84", "mtu": "1500", "options": ["TSO4", "TSO6", "CHANNEL_IO"], "media": "Unknown", "media_select": "autoselect", "media_type": "full-duplex", "status": "inactive"}, "ansible_en4": {"device": "en4", "ipv4": [], "ipv6": [], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "PROMISC", "SIMPLEX", "MULTICAST"], "macaddress": "36:bf:f5:38:f8:8c", "mtu": "1500", "options": ["TSO4", "TSO6", "CHANNEL_IO"], "media": "Unknown", "media_select": "autoselect", "media_type": "full-duplex", "status": "inactive"}, "ansible_ap1": {"device": "ap1", "ipv4": [], "ipv6": [], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "macaddress": "3e:a1:09:7e:dc:98", "mtu": "1500", "options": ["PERFORMNUD", "DAD"], "media": "Unknown", "media_select": "autoselect", "media_type": "none", "status": "inactive"}, "ansible_en1": {"device": "en1", "ipv4": [], "ipv6": [{"address": "fe80::1848:57fd:ab6f:f72b%en1", "prefix": "64"}], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "macaddress": "46:20:95:8d:3c:c1", "mtu": "1500", "options": ["PERFORMNUD", "DAD"], "media": "Unknown", "media_select": "autoselect", "media_type": "none"}, "ansible_awdl0": {"device": "awdl0", "ipv4": [], "ipv6": [{"address": "fe80::bce1:38ff:fefd:a346%awdl0", "prefix": "64", "scope": "0xf"}], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "macaddress": "be:e1:38:fd:a3:46", "mtu": "1500", "options": ["PERFORMNUD", "DAD"], "media": "Unknown", "media_select": "autoselect", "status": "active"}, "ansible_llw0": {"device": "llw0", "ipv4": [], "ipv6": [{"address": "fe80::bce1:38ff:fefd:a346%llw0", "prefix": "64", "scope": "0x10"}], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "macaddress": "be:e1:38:fd:a3:46", "mtu": "1500", "options": ["PERFORMNUD", "DAD"], "media": "Unknown", "media_select": "autoselect", "media_type": "none"}, "ansible_en0": {"device": "en0", "ipv4": [{"address": "10.210.106.47", "netmask": "255.255.255.0", "network": "10.210.106.0", "broadcast": "10.210.106.255"}], "ipv6": [{"address": "fe80::74:1680:3411:1cc1%en0", "prefix": "64"}], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "macaddress": "d0:11:e5:b1:a3:22", "mtu": "1500", "options": ["PERFORMNUD", "DAD"], "media": "Unknown", "media_select": "autoselect", "media_type": "10Gbase-", "media_options": ["full-duplex"], "status": "active"}, "ansible_bridge0": {"device": "bridge0", "ipv4": [], "ipv6": [], "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "macaddress": "36:bf:f5:38:f8:80", "mtu": "1500", "options": ["PERFORMNUD", "DAD"], "media": "Unknown", "media_select": "Unknown", "media_type": "unknown type", "status": "inactive"}, "ansible_utun0": {"device": "utun0", "ipv4": [], "ipv6": [{"address": "fe80::76bd:b46e:783d:5c38%utun0", "prefix": "64", "scope": "0x13"}], "type": "unknown", "flags": ["UP", "POINTOPOINT", "RUNNING", "MULTICAST"], "macaddress": "unknown", "mtu": "1380", "options": ["PERFORMNUD", "DAD"]}, "ansible_utun1": {"device": "utun1", "ipv4": [], "ipv6": [{"address": "fe80::fee4:e473:d665:f5e%utun1", "prefix": "64", "scope": "0x14"}], "type": "unknown", "flags": ["UP", "POINTOPOINT", "RUNNING", "MULTICAST"], "macaddress": "unknown", "mtu": "2000", "options": ["PERFORMNUD", "DAD"]}, "ansible_utun2": {"device": "utun2", "ipv4": [], "ipv6": [{"address": "fe80::ce81:b1c:bd2c:69e%utun2", "prefix": "64", "scope": "0x15"}], "type": "unknown", "flags": ["UP", "POINTOPOINT", "RUNNING", "MULTICAST"], "macaddress": "unknown", "mtu": "1000", "options": ["PERFORMNUD", "DAD"]}, "ansible_utun3": {"device": "utun3", "ipv4": [], "ipv6": [{"address": "fe80::bcaa:8fad:d071:320e%utun3", "prefix": "64", "scope": "0x16"}], "type": "unknown", "flags": ["UP", "POINTOPOINT", "RUNNING", "MULTICAST"], "macaddress": "unknown", "mtu": "1500", "options": ["PERFORMNUD", "DAD"]}, "ansible_default_ipv4": {"gateway": "10.210.106.1", "interface": "en0", "device": "en0", "type": "ether", "flags": ["UP", "BROADCAST", "SMART", "RUNNING", "SIMPLEX", "MULTICAST"], "macaddress": "d0:11:e5:b1:a3:22", "mtu": "1500", "options": ["PERFORMNUD", "DAD"], "media": "Unknown", "media_select": "autoselect", "media_type": "10Gbase-", "media_options": ["full-duplex"], "status": "active", "address": "10.210.106.47", "netmask": "255.255.255.0", "network": "10.210.106.0", "broadcast": "10.210.106.255"}, "ansible_default_ipv6": {}, "ansible_all_ipv4_addresses": ["10.210.106.47"], "ansible_all_ipv6_addresses": ["fe80::1848:57fd:ab6f:f72b%en1", "fe80::bce1:38ff:fefd:a346%awdl0", "fe80::bce1:38ff:fefd:a346%llw0", "fe80::74:1680:3411:1cc1%en0", "fe80::76bd:b46e:783d:5c38%utun0", "fe80::fee4:e473:d665:f5e%utun1", "fe80::ce81:b1c:bd2c:69e%utun2", "fe80::bcaa:8fad:d071:320e%utun3"], "ansible_ssh_host_key_dsa_public": "AAAAB3NzaC1kc3MAAACBAPur8QlyLLw+6UKYFu7aTlQ21IgbU89jBX7LAJ7FenNLe/weXo9xHKF7oG8kSSjoOzQNlnPScMLlre29HlWKNd8IjD+SzjVwzF3vVto8O65BYhrYT0vam1Ts56UoEhgIr+51B55OKGoHdzsgQGkQYUwrIsRboW1MJGToqdQlUBtbAAAAFQDw4z9gagusRN1pPkqUsvn49P8vIwAAAIEA6eiytuZ6SOym1L1EGjKM/YRiFD5wPaj/uKnMJn+QT1ctlU2U+V2pD4lclDThbK1Utvf6c/h0Id2l59K8vk3FwexSyBaFHr+/JILRVPcRX9XxPVih0OjbrY8EHSiPtz6IQ8IVbFYOMSfqzq+wD6VHMCyrpVqU4FodBRNbShghFIgAAACBAIGpnSzbUSl3YLygIXkTsk8orSXwSAB74vZImlbqbrVmDZpycdQJ2Q82GaOCQaW+YCRUI9jd9/40FJPuee8GOU3bGYzBDruWTi9XGlCtuIHP1sSc7XZUSw3bCGes/W406SLNkSll469LNqo2ZaPY0WLyrD3GpIsJK6F1jht/MKs6", "ansible_ssh_host_key_dsa_public_keytype": "ssh-dss", "ansible_ssh_host_key_rsa_public": "AAAAB3NzaC1yc2EAAAADAQABAAABgQDMb0Gz3tmMIjfXrOWhPas1Gehsg28RzBlg21l0eAsJfxp+VAh9O6uVWWG7O7kW8goyOiid/OSyujh+Nu/oxba5wFbEYbTU/9ncBKTdlx/KGZjztoO2TcXzuYXnCActCCOsdS1zMP783rZXJnPDsHaqrBs9BM4Ke6ok/3a1lVXBp2UIPB/RX0JEiE5+/ouPVIDiEJnKZ9KWx0PT56Hn3T7vyFO1wPtq37B2B/75iDDslGObtH5ENcKRpAAj+FvMq59UEex+LiaurTPtSLB1bQfksRAkv2VCMyr1GM2Wku0j8K1eNG/mhgTDdzNYN3wLXIo/b+jDEcNQulascpxxzjDgdWZa5mOigz0S64XBwuR28AgfyO+dsyWDWn2JbExcHKzgL7/Dd1E5jVRiQrgC/dWz+eUuXYAaSSC4sKrjPSP20wBjQYmziNm6d7vBwvyf7y9em+WkJADhKubEKIx+1s9pbEqGwKq8U9QxL+79ENWawCiCal5QDPUR8T1wRoWfn8M=", "ansible_ssh_host_key_rsa_public_keytype": "ssh-rsa", "ansible_ssh_host_key_ecdsa_public": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC6MMFJ3osh8+vAnn6iFNYxc8CRVWZlgs+LoET7fc0nFC9zYc3xjmiMvmQbMX78mSBW6hD0FsyLYFw1weBXKTzE=", "ansible_ssh_host_key_ecdsa_public_keytype": "ecdsa-sha2-nistp256", "ansible_ssh_host_key_ed25519_public": "AAAAC3NzaC1lZDI1NTE5AAAAIL41X5HM1EUb+ak8y0/8yANS3CcPZtbCY7AehiqjnB/R", "ansible_ssh_host_key_ed25519_public_keytype": "ssh-ed25519", "ansible_dns": {"nameservers": ["8.8.8.8"]}, "ansible_user_id": "root", "ansible_user_uid": 0, "ansible_user_gid": 0, "ansible_user_gecos": "System Administrator", "ansible_user_dir": "/var/root", "ansible_user_shell": "/bin/zsh", "ansible_real_user_id": 0, "ansible_effective_user_id": 0, "ansible_real_group_id": 0, "ansible_effective_group_id": 0, "ansible_iscsi_iqn": "", "ansible_selinux": {"status": "Missing selinux Python library"}, "ansible_selinux_python_present": false, "ansible_hostnqn": "", "ansible_fips": false, "ansible_loadavg": {"1m": 2.576171875, "5m": 2.31689453125, "15m": 2.0439453125}, "ansible_virtualization_type": "", "ansible_virtualization_role": "", "ansible_virtualization_tech_guest": [], "ansible_virtualization_tech_host": [], "ansible_system_capabilities_enforced": "N/A", "ansible_system_capabilities": "N/A", "ansible_apparmor": {"status": "disabled"}, "ansible_date_time": {"year": "2025", "month": "09", "weekday": "Monday", "weekday_number": "1", "weeknumber": "38", "day": "22", "hour": "18", "minute": "37", "second": "36", "epoch": "1758591456", "epoch_int": "1758591456", "date": "2025-09-22", "time": "18:37:36", "iso8601_micro": "2025-09-23T01:37:36.844721Z", "iso8601": "2025-09-23T01:37:36Z", "iso8601_basic": "20250922T183736844721", "iso8601_basic_short": "20250922T183736", "tz": "PDT", "tz_dst": "PDT", "tz_offset": "-0700"}, "ansible_local": {}, "ansible_fibre_channel_wwn": [], "ansible_python": {"version": {"major": 3, "minor": 9, "micro": 6, "releaselevel": "final", "serial": 0}, "version_info": [3, 9, 6, "final", 0], "executable": "/Library/Developer/CommandLineTools/usr/bin/python3", "has_sslcontext": true, "type": "cpython"}, "ansible_pkg_mgr": "homebrew", "ansible_service_mgr": "launchd", "gather_subset": ["all"], "module_setup": true}, "invocation": {"module_args": {"gather_subset": ["all"], "gather_timeout": 10, "filter": [], "fact_path": "/etc/ansible/facts.d"}}}\n', b'')
ok: [capsule-v-001-mm037]
TASK [common : include_tasks] **************************************************
task path: /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/roles/common/tasks/main.yml:26
included: /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/roles/common/tasks/rm_groups.yml for capsule-v-001-mm037
TASK [common : user management remove global groups linux] *********************
task path: /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/roles/common/tasks/rm_groups.yml:7
skipping: [capsule-v-001-mm037] => (item=None) => {
"ansible_loop_var": "item",
"changed": false,
"false_condition": "(global_groups[item].state|default('present')) == 'absent'",
"item": null,
"skip_reason": "Conditional result was False"
}
skipping: [capsule-v-001-mm037] => {
"changed": false,
"msg": "All items skipped"
}
TASK [common : user management remove local groups linux] **********************
task path: /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/roles/common/tasks/rm_groups.yml:20
skipping: [capsule-v-001-mm037] => {
"changed": false,
"skipped_reason": "No items in the list"
}
TASK [common : include_tasks] **************************************************
task path: /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/roles/common/tasks/main.yml:32
included: /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/roles/common/tasks/add_groups.yml for capsule-v-001-mm037
TASK [common : debug global_groups] ********************************************
task path: /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/roles/common/tasks/add_groups.yml:20
ok: [capsule-v-001-mm037] => {
"test_global_groups": {
"gnupgserver": {
"gid": 10506
},
"grafana": {
"gid": 10501
},
"nginx": {
"gid": 10505
},
"production_ansible": {
"gid": 10001
},
"prometheus": {
"gid": 10502
},
"rundeck": {
"gid": 10504
},
"sequoia": {
"gid": 10507
},
"staging_ansible": {
"gid": 20001
},
"zookeeper": {
"gid": 10503
}
}
}
TASK [common : user management set global groups macOS] ************************
task path: /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/roles/common/tasks/add_groups.yml:24
[ERROR]: Task failed: Finalization of task args for 'ansible.builtin.group' failed: Error while resolving value for 'gid': object of type 'dict' has no attribute 'gid'
Task failed.
Origin: /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/roles/common/tasks/add_groups.yml:24:3
22 var: test_global_groups
23
24 - name: user management set global groups macOS
^ column 3
<<< caused by >>>
Finalization of task args for 'ansible.builtin.group' failed.
Origin: /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/roles/common/tasks/add_groups.yml:28:3
26 - user_mgmt
27 - admin_accounts
28 group:
^ column 3
<<< caused by >>>
Error while resolving value for 'gid': object of type 'dict' has no attribute 'gid'
Origin: /Users/chris/Projects/checkouts/capsule-cloud-ops/MacStadium_ansible/roles/common/tasks/add_groups.yml:30:10
28 group:
29 name: "{{ item.key }}"
30 gid: "{{ item.gid }}"
^ column 10
failed: [capsule-v-001-mm037] (item={'key': 'production_ansible', 'value': {'gid': 10001}}) => {
"ansible_loop_var": "item",
"changed": false,
"item": {
"key": "production_ansible",
"value": {
"gid": 10001
}
},
"msg": "Task failed: Finalization of task args for 'ansible.builtin.group' failed: Error while resolving value for 'gid': object of type 'dict' has no attribute 'gid'"
}
failed: [capsule-v-001-mm037] (item={'key': 'staging_ansible', 'value': {'gid': 20001}}) => {
"ansible_loop_var": "item",
"changed": false,
"item": {
"key": "staging_ansible",
"value": {
"gid": 20001
}
},
"msg": "Task failed: Finalization of task args for 'ansible.builtin.group' failed: Error while resolving value for 'gid': object of type 'dict' has no attribute 'gid'"
}
failed: [capsule-v-001-mm037] (item={'key': 'grafana', 'value': {'gid': 10501}}) => {
"ansible_loop_var": "item",
"changed": false,
"item": {
"key": "grafana",
"value": {
"gid": 10501
}
},
"msg": "Task failed: Finalization of task args for 'ansible.builtin.group' failed: Error while resolving value for 'gid': object of type 'dict' has no attribute 'gid'"
}
failed: [capsule-v-001-mm037] (item={'key': 'prometheus', 'value': {'gid': 10502}}) => {
"ansible_loop_var": "item",
"changed": false,
"item": {
"key": "prometheus",
"value": {
"gid": 10502
}
},
"msg": "Task failed: Finalization of task args for 'ansible.builtin.group' failed: Error while resolving value for 'gid': object of type 'dict' has no attribute 'gid'"
}
failed: [capsule-v-001-mm037] (item={'key': 'zookeeper', 'value': {'gid': 10503}}) => {
"ansible_loop_var": "item",
"changed": false,
"item": {
"key": "zookeeper",
"value": {
"gid": 10503
}
},
"msg": "Task failed: Finalization of task args for 'ansible.builtin.group' failed: Error while resolving value for 'gid': object of type 'dict' has no attribute 'gid'"
}
failed: [capsule-v-001-mm037] (item={'key': 'rundeck', 'value': {'gid': 10504}}) => {
"ansible_loop_var": "item",
"changed": false,
"item": {
"key": "rundeck",
"value": {
"gid": 10504
}
},
"msg": "Task failed: Finalization of task args for 'ansible.builtin.group' failed: Error while resolving value for 'gid': object of type 'dict' has no attribute 'gid'"
}
failed: [capsule-v-001-mm037] (item={'key': 'nginx', 'value': {'gid': 10505}}) => {
"ansible_loop_var": "item",
"changed": false,
"item": {
"key": "nginx",
"value": {
"gid": 10505
}
},
"msg": "Task failed: Finalization of task args for 'ansible.builtin.group' failed: Error while resolving value for 'gid': object of type 'dict' has no attribute 'gid'"
}
failed: [capsule-v-001-mm037] (item={'key': 'gnupgserver', 'value': {'gid': 10506}}) => {
"ansible_loop_var": "item",
"changed": false,
"item": {
"key": "gnupgserver",
"value": {
"gid": 10506
}
},
"msg": "Task failed: Finalization of task args for 'ansible.builtin.group' failed: Error while resolving value for 'gid': object of type 'dict' has no attribute 'gid'"
}
failed: [capsule-v-001-mm037] (item={'key': 'sequoia', 'value': {'gid': 10507}}) => {
"ansible_loop_var": "item",
"changed": false,
"item": {
"key": "sequoia",
"value": {
"gid": 10507
}
},
"msg": "Task failed: Finalization of task args for 'ansible.builtin.group' failed: Error while resolving value for 'gid': object of type 'dict' has no attribute 'gid'"
}
[capsule-v-001-mm037] TASK: common : user management set global groups macOS (debug)> [ERROR]: Unexpected Exception, this is probably a bug: [Errno 1] Operation not permitted
Traceback (most recent call last):
File "/opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible/cli/__init__.py", line 660, in cli_executor
exit_code = cli.run()
File "/opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible/cli/playbook.py", line 153, in run
results = pbex.run()
File "/opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible/executor/playbook_executor.py", line 188, in run
result = self._tqm.run(play=play)
File "/opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible/executor/task_queue_manager.py", line 344, in run
play_return = strategy.run(iterator, play_context)
File "/opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible/plugins/strategy/linear.py", line 216, in run
results.extend(self._wait_on_pending_results(iterator))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
File "/opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible/plugins/strategy/__init__.py", line 793, in _wait_on_pending_results
results = self._process_pending_results(iterator)
File "/opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible/plugins/strategy/__init__.py", line 169, in inner
dbg.cmdloop()
~~~~~~~~~~~^^
File "/opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible/plugins/strategy/__init__.py", line 1139, in cmdloop
cmd.Cmd.cmdloop(self)
~~~~~~~~~~~~~~~^^^^^^
File "/opt/homebrew/Cellar/python@3.13/3.13.7/Frameworks/Python.framework/Versions/3.13/lib/python3.13/cmd.py", line 134, in cmdloop
line = input(self.prompt)
File "/opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible/executor/process/worker.py", line 110, in _term
os.killpg(self.pid, signum)
~~~~~~~~~^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 1] Operation not permitted
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/homebrew/Cellar/ansible/12.0.0/libexec/lib/python3.13/site-packages/ansible/cli/__init__.py", line 669, in cli_executor
raise AnsibleError("Unexpected Exception, this is probably a bug.") from ex
ansible.errors.AnsibleError: Unexpected Exception, this is probably a bug: [Errno 1] Operation not permitted
```
### Code of Conduct
- [x] I agree to follow the Ansible Code of Conduct