diff --git a/changelogs/fragments/ssh_config_add_dynamicforward_option.yml b/changelogs/fragments/ssh_config_add_dynamicforward_option.yml new file mode 100644 index 0000000000..0252c94c46 --- /dev/null +++ b/changelogs/fragments/ssh_config_add_dynamicforward_option.yml @@ -0,0 +1,2 @@ +minor_changes: + - ssh_config - add ``dynamicforward`` option (https://github.com/ansible-collections/community.general/pull/9192). \ No newline at end of file diff --git a/plugins/modules/ssh_config.py b/plugins/modules/ssh_config.py index d974f45373..1f8098b25f 100644 --- a/plugins/modules/ssh_config.py +++ b/plugins/modules/ssh_config.py @@ -139,6 +139,11 @@ options: - Sets the C(ControlPersist) option. type: str version_added: 8.1.0 + dynamicforward: + description: + - Sets the C(DynamicForward) option. + type: str + version_added: 10.1.0 requirements: - paramiko ''' @@ -272,6 +277,7 @@ class SSHConfig(object): controlmaster=self.params.get('controlmaster'), controlpath=self.params.get('controlpath'), controlpersist=fix_bool_str(self.params.get('controlpersist')), + dynamicforward=self.params.get('dynamicforward'), ) config_changed = False @@ -376,6 +382,7 @@ def main(): controlmaster=dict(type='str', default=None, choices=['yes', 'no', 'ask', 'auto', 'autoask']), controlpath=dict(type='str', default=None), controlpersist=dict(type='str', default=None), + dynamicforward=dict(type='str'), user=dict(default=None, type='str'), user_known_hosts_file=dict(type='str', default=None), ), diff --git a/tests/integration/targets/ssh_config/tasks/options.yml b/tests/integration/targets/ssh_config/tasks/options.yml index f88f99081f..203c782487 100644 --- a/tests/integration/targets/ssh_config/tasks/options.yml +++ b/tests/integration/targets/ssh_config/tasks/options.yml @@ -21,6 +21,7 @@ controlmaster: "auto" controlpath: "~/.ssh/sockets/%r@%h-%p" controlpersist: yes + dynamicforward: '10080' state: present register: options_add check_mode: true @@ -55,6 +56,7 @@ controlmaster: "auto" controlpath: "~/.ssh/sockets/%r@%h-%p" controlpersist: yes + dynamicforward: '10080' state: present register: options_add @@ -78,6 +80,7 @@ controlmaster: "auto" controlpath: "~/.ssh/sockets/%r@%h-%p" controlpersist: yes + dynamicforward: '10080' state: present register: options_add_again @@ -105,6 +108,7 @@ - "'controlmaster auto' in slurp_ssh_config['content'] | b64decode" - "'controlpath ~/.ssh/sockets/%r@%h-%p' in slurp_ssh_config['content'] | b64decode" - "'controlpersist yes' in slurp_ssh_config['content'] | b64decode" + - "'dynamicforward 10080' in slurp_ssh_config['content'] | b64decode" - name: Options - Update host community.general.ssh_config: @@ -118,6 +122,7 @@ controlmaster: no controlpath: "~/.ssh/new-sockets/%r@%h-%p" controlpersist: "600" + dynamicforward: '11080' state: present register: options_update @@ -143,6 +148,7 @@ controlmaster: no controlpath: "~/.ssh/new-sockets/%r@%h-%p" controlpersist: "600" + dynamicforward: '11080' state: present register: options_update @@ -171,6 +177,7 @@ - "'controlmaster no' in slurp_ssh_config['content'] | b64decode" - "'controlpath ~/.ssh/new-sockets/%r@%h-%p' in slurp_ssh_config['content'] | b64decode" - "'controlpersist 600' in slurp_ssh_config['content'] | b64decode" + - "'dynamicforward 11080' in slurp_ssh_config['content'] | b64decode" - name: Options - Ensure no update in case option exist in ssh_config file but wasn't defined in playbook community.general.ssh_config: @@ -204,6 +211,7 @@ - "'controlmaster no' in slurp_ssh_config['content'] | b64decode" - "'controlpath ~/.ssh/new-sockets/%r@%h-%p' in slurp_ssh_config['content'] | b64decode" - "'controlpersist 600' in slurp_ssh_config['content'] | b64decode" + - "'dynamicforward 11080' in slurp_ssh_config['content'] | b64decode" - name: Debug debug: @@ -255,8 +263,9 @@ - "'controlmaster auto' not in slurp_ssh_config['content'] | b64decode" - "'controlpath ~/.ssh/sockets/%r@%h-%p' not in slurp_ssh_config['content'] | b64decode" - "'controlpersist yes' not in slurp_ssh_config['content'] | b64decode" + - "'dynamicforward 10080' not in slurp_ssh_config['content'] | b64decode" -# Proxycommand and ProxyJump are mutually exclusive. +# Proxycommand and ProxyJump are mutually exclusive. # Reset ssh_config before testing options with proxyjump - name: Copy sample config file @@ -276,6 +285,7 @@ controlmaster: "auto" controlpath: "~/.ssh/sockets/%r@%h-%p" controlpersist: yes + dynamicforward: '10080' state: present register: options_add check_mode: true @@ -310,6 +320,7 @@ controlmaster: "auto" controlpath: "~/.ssh/sockets/%r@%h-%p" controlpersist: yes + dynamicforward: '10080' state: present register: options_add @@ -333,6 +344,7 @@ controlmaster: "auto" controlpath: "~/.ssh/sockets/%r@%h-%p" controlpersist: yes + dynamicforward: '10080' state: present register: options_add_again @@ -360,6 +372,7 @@ - "'controlmaster auto' in slurp_ssh_config['content'] | b64decode" - "'controlpath ~/.ssh/sockets/%r@%h-%p' in slurp_ssh_config['content'] | b64decode" - "'controlpersist yes' in slurp_ssh_config['content'] | b64decode" + - "'dynamicforward 10080' in slurp_ssh_config['content'] | b64decode" - name: Options - Update host community.general.ssh_config: @@ -373,6 +386,7 @@ controlmaster: no controlpath: "~/.ssh/new-sockets/%r@%h-%p" controlpersist: "600" + dynamicforward: '11080' state: present register: options_update @@ -398,6 +412,7 @@ controlmaster: no controlpath: "~/.ssh/new-sockets/%r@%h-%p" controlpersist: "600" + dynamicforward: '11080' state: present register: options_update @@ -426,6 +441,7 @@ - "'controlmaster no' in slurp_ssh_config['content'] | b64decode" - "'controlpath ~/.ssh/new-sockets/%r@%h-%p' in slurp_ssh_config['content'] | b64decode" - "'controlpersist 600' in slurp_ssh_config['content'] | b64decode" + - "'dynamicforward 11080' in slurp_ssh_config['content'] | b64decode" - name: Options - Ensure no update in case option exist in ssh_config file but wasn't defined in playbook community.general.ssh_config: @@ -459,6 +475,7 @@ - "'controlmaster no' in slurp_ssh_config['content'] | b64decode" - "'controlpath ~/.ssh/new-sockets/%r@%h-%p' in slurp_ssh_config['content'] | b64decode" - "'controlpersist 600' in slurp_ssh_config['content'] | b64decode" + - "'dynamicforward 11080' in slurp_ssh_config['content'] | b64decode" - name: Debug debug: @@ -510,3 +527,4 @@ - "'controlmaster auto' not in slurp_ssh_config['content'] | b64decode" - "'controlpath ~/.ssh/sockets/%r@%h-%p' not in slurp_ssh_config['content'] | b64decode" - "'controlpersist yes' not in slurp_ssh_config['content'] | b64decode" + - "'dynamicforward 10080' not in slurp_ssh_config['content'] | b64decode"