Skip to content

Commit 8924470

Browse files
authored
Merge pull request #1174 from moreati/issue1083-become_flags
ansible_mitogen: Template become command arguments (become_flags)
2 parents 04f7b7a + 66ea10d commit 8924470

File tree

8 files changed

+29
-16
lines changed

8 files changed

+29
-16
lines changed

ansible_mitogen/transport_config.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,12 @@ def become(self):
213213
:data:`True` if privilege escalation should be active.
214214
"""
215215

216+
@abc.abstractmethod
217+
def become_flags(self):
218+
"""
219+
The command line arguments passed to the become executable.
220+
"""
221+
216222
@abc.abstractmethod
217223
def become_method(self):
218224
"""
@@ -290,10 +296,9 @@ def become_exe(self):
290296
@abc.abstractmethod
291297
def sudo_args(self):
292298
"""
293-
The list of additional arguments that should be included in a become
299+
The list of additional arguments that should be included in a sudo
294300
invocation.
295301
"""
296-
# TODO: split out into sudo_args/become_args.
297302

298303
@abc.abstractmethod
299304
def mitogen_via(self):
@@ -431,6 +436,7 @@ def _become_option(self, name):
431436

432437
fallback_options = {
433438
'become_exe',
439+
'become_flags',
434440
}
435441
if name not in fallback_options:
436442
raise
@@ -464,6 +470,9 @@ def remote_user(self):
464470
def become(self):
465471
return self._connection.become
466472

473+
def become_flags(self):
474+
return self._become_option('become_flags')
475+
467476
def become_method(self):
468477
return self._play_context.become_method
469478

@@ -529,19 +538,7 @@ def become_exe(self):
529538
return self._become_option('become_exe')
530539

531540
def sudo_args(self):
532-
return [
533-
mitogen.core.to_text(term)
534-
for term in ansible.utils.shlex.shlex_split(
535-
first_true((
536-
self._play_context.become_flags,
537-
# Ansible <=2.7.
538-
getattr(self._play_context, 'sudo_flags', ''),
539-
# Ansible <=2.3.
540-
getattr(C, 'DEFAULT_BECOME_FLAGS', ''),
541-
getattr(C, 'DEFAULT_SUDO_FLAGS', '')
542-
), default='')
543-
)
544-
]
541+
return ansible.utils.shlex.shlex_split(self.become_flags() or '')
545542

546543
def mitogen_via(self):
547544
return self._connection.get_task_var('mitogen_via')
@@ -676,6 +673,9 @@ def remote_user(self):
676673
def become(self):
677674
return bool(self._become_user)
678675

676+
def become_flags(self):
677+
return self._host_vars.get('ansible_become_flags')
678+
679679
def become_method(self):
680680
return (
681681
self._become_method or
@@ -771,7 +771,7 @@ def sudo_args(self):
771771
mitogen.core.to_text(term)
772772
for s in (
773773
self._host_vars.get('ansible_sudo_flags') or '',
774-
self._host_vars.get('ansible_become_flags') or '',
774+
self.become_flags() or '',
775775
)
776776
for term in ansible.utils.shlex.shlex_split(s)
777777
]

docs/changelog.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ In progress (unreleased)
2323

2424
* :gh:issue:`1083` :mod:`ansible_mitogen`: Templated become executable
2525
(e.g. ``become_exe``).
26+
* :gh:issue:`1083` :mod:`ansible_mitogen`: Templated become executable
27+
arguments (e.g. ``become_flags``).
2628

2729

2830
v0.3.15 (2024-10-28)

tests/ansible/hosts/default.hosts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ ansible_user="{{ lookup('pipe', 'whoami') }}"
3434

3535
[tt_become_by_inv]
3636
tt-become-exe ansible_become=true ansible_become_exe="{{ 'sudo' | trim }}" ansible_become_user=root
37+
tt-become-flags ansible_become=true ansible_become_flags="{{ '--set-home --stdin --non-interactive' | trim }}" ansible_become_user=root
3738
tt-become-pass ansible_become=true ansible_become_pass="{{ 'pw_required_password' | trim }}" ansible_become_user=mitogen__pw_required
3839
tt-become-user ansible_become=true ansible_become_user="{{ 'root' | trim }}"
3940

tests/ansible/integration/become/templated_by_inv.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
vars:
1414
expected_become_users:
1515
tt-become-exe: root
16+
tt-become-flags: root
1617
tt-become-pass: mitogen__pw_required
1718
tt-become-user: root
1819
command:

tests/ansible/integration/become/templated_by_play_keywords.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
gather_facts: false
44
become: true
55
become_exe: "{{ 'sudo' | trim }}"
6+
become_flags: "{{ '--set-home --stdin --non-interactive' | trim }}"
67
become_user: "{{ 'root' | trim }}"
78
tasks:
89
- meta: reset_connection
@@ -22,6 +23,7 @@
2223
gather_facts: false
2324
become: true
2425
become_exe: "{{ 'sudo' | trim }}"
26+
become_flags: "{{ '--set-home --stdin --non-interactive' | trim }}"
2527
become_user: "{{ 'mitogen__pw_required' | trim }}"
2628
vars:
2729
ansible_become_pass: "{{ 'pw_required_password' | trim }}"

tests/ansible/integration/become/templated_by_play_vars.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
vars:
55
ansible_become: true
66
ansible_become_exe: "{{ 'sudo' | trim }}"
7+
ansible_become_flags: "{{ '--set-home --stdin --non-interactive' | trim }}"
78
ansible_become_user: "{{ 'root' | trim }}"
89
tasks:
910
- name: Templated become by play vars, no password
@@ -22,6 +23,7 @@
2223
vars:
2324
ansible_become: true
2425
ansible_become_exe: "{{ 'sudo' | trim }}"
26+
ansible_become_flags: "{{ '--set-home --stdin --non-interactive' | trim }}"
2527
ansible_become_pass: "{{ 'pw_required_password' | trim }}"
2628
ansible_become_user: "{{ 'mitogen__pw_required' | trim }}"
2729
tasks:

tests/ansible/integration/become/templated_by_task_keywords.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
# https://github.com/mitogen-hq/mitogen/issues/1132
66
become: true
77
become_exe: "{{ 'sudo' | trim }}"
8+
become_flags: "{{ '--set-home --stdin --non-interactive' | trim }}"
89
become_user: "{{ 'root' | trim }}"
910
tasks:
1011
- name: Reset connection to target that will be delegate_to
@@ -17,6 +18,7 @@
1718
- name: Templated become by task keywords, with delegate_to
1819
become: true
1920
become_exe: "{{ 'sudo' | trim }}"
21+
become_flags: "{{ '--set-home --stdin --non-interactive' | trim }}"
2022
become_user: "{{ 'root' | trim }}"
2123
delegate_to: "{{ groups.tt_become_bare[0] }}"
2224
command:
@@ -36,6 +38,7 @@
3638
# https://github.com/mitogen-hq/mitogen/issues/1132
3739
become: true
3840
become_exe: "{{ 'sudo' | trim }}"
41+
become_flags: "{{ '--set-home --stdin --non-interactive' | trim }}"
3942
become_user: "{{ 'mitogen__pw_required' | trim }}"
4043
vars:
4144
ansible_become_pass: "{{ 'pw_required_password' | trim }}"
@@ -56,6 +59,7 @@
5659
- name: Templated become by task keywords, with delegate_to
5760
become: true
5861
become_exe: "{{ 'sudo' | trim }}"
62+
become_flags: "{{ '--set-home --stdin --non-interactive' | trim }}"
5963
become_user: "{{ 'mitogen__pw_required' | trim }}"
6064
delegate_to: "{{ groups.tt_become_bare[0] }}"
6165
vars:

tests/ansible/templates/test-targets.j2

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ ansible_user=mitogen__has_sudo_nopw
5959

6060
[tt_become_by_inv]
6161
tt-become-exe ansible_become=true ansible_become_exe="{{ '{{' }} 'sudo' | trim {{ '}}' }}" ansible_become_user=root
62+
tt-become-flags ansible_become=true ansible_become_flags="{{ '{{' }} '--set-home --stdin --non-interactive' | trim {{ '}}' }}" ansible_become_user=root
6263
tt-become-pass ansible_become=true ansible_become_pass="{{ '{{' }} 'pw_required_password' | trim {{ '}}' }}" ansible_become_user=mitogen__pw_required
6364
tt-become-user ansible_become=true ansible_become_user="{{ '{{' }} 'root' | trim {{ '}}' }}"
6465

0 commit comments

Comments
 (0)