You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ansible/test/integration/targets/connection_persistent/connection_plugins/persistent.py

73 lines
1.8 KiB
Python

from __future__ import annotations
DOCUMENTATION = """
options:
persistent_connect_timeout:
type: int
default: 30
ini:
- section: persistent_connection
key: connect_timeout
env:
- name: ANSIBLE_PERSISTENT_CONNECT_TIMEOUT
vars:
- name: ansible_connect_timeout
persistent_command_timeout:
type: int
default: 30
ini:
- section: persistent_connection
key: command_timeout
env:
- name: ANSIBLE_PERSISTENT_COMMAND_TIMEOUT
vars:
- name: ansible_command_timeout
persistent_log_messages:
type: boolean
ini:
- section: persistent_connection
key: log_messages
env:
- name: ANSIBLE_PERSISTENT_LOG_MESSAGES
vars:
- name: ansible_persistent_log_messages
"""
import json
import os
import pickle
from ansible.playbook.play_context import PlayContext
from ansible.plugins.connection import NetworkConnectionBase
class Connection(NetworkConnectionBase):
transport = 'persistent'
supports_persistence = True
def _connect(self):
self._connected = True
def update_play_context(self, pc_data):
"""
This is to ensure that the PlayContext.deserialize method remains functional,
preventing it from breaking the network connection plugins that rely on it.
See:
https://github.com/ansible-collections/ansible.netcommon/blob/50fafb6875bb2f57e932a7a50123513b48bd4fd5/plugins/connection/httpapi.py#L258
"""
pc = self._play_context = PlayContext()
pc.deserialize(
pickle.loads(
pc_data.encode(errors='surrogateescape')
)
)
def get_capabilities(self, *args, **kwargs):
return json.dumps({
'pid': os.getpid(),
'ppid': os.getppid(),
**self._play_context.dump_attrs()
})