From 518ae3fa09a5345d8016fd3d1639b481bcfb9d05 Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Fri, 1 Mar 2024 15:05:34 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E8=87=AA=E5=8A=A8=E5=8C=96=E8=B5=84?= =?UTF-8?q?=E4=BA=A7=E6=8E=A2=E6=B4=BB=E6=94=AF=E6=8C=81Telnet=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=20(#12728)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: jiangweidong --- .../automations/ping/custom/telnet/main.yml | 11 +++ .../ping/custom/telnet/manifest.yml | 16 +++++ apps/ops/ansible/modules/ssh_ping.py | 11 +-- apps/ops/ansible/modules/telnet_ping.py | 70 +++++++++++++++++++ 4 files changed, 100 insertions(+), 8 deletions(-) create mode 100644 apps/assets/automations/ping/custom/telnet/main.yml create mode 100644 apps/assets/automations/ping/custom/telnet/manifest.yml create mode 100644 apps/ops/ansible/modules/telnet_ping.py diff --git a/apps/assets/automations/ping/custom/telnet/main.yml b/apps/assets/automations/ping/custom/telnet/main.yml new file mode 100644 index 000000000..6e905ba27 --- /dev/null +++ b/apps/assets/automations/ping/custom/telnet/main.yml @@ -0,0 +1,11 @@ +- hosts: custom + gather_facts: no + vars: + ansible_connection: local + ansible_shell_type: sh + + tasks: + - name: Test asset connection (telnet) + telnet_ping: + login_host: "{{ jms_asset.address }}" + login_port: "{{ jms_asset.port }}" diff --git a/apps/assets/automations/ping/custom/telnet/manifest.yml b/apps/assets/automations/ping/custom/telnet/manifest.yml new file mode 100644 index 000000000..fc3a0a40a --- /dev/null +++ b/apps/assets/automations/ping/custom/telnet/manifest.yml @@ -0,0 +1,16 @@ +id: ping_by_telnet +name: "{{ 'Ping by telnet' | trans }}" +category: + - device + - host +type: + - all +method: ping +protocol: telnet +priority: 50 + +i18n: + Ping by telnet: + zh: '使用 Python 模块 telnet 测试主机可连接性' + en: 'Ping by telnet module' + ja: 'Pythonモジュールtelnetを使用したホスト接続性のテスト' diff --git a/apps/ops/ansible/modules/ssh_ping.py b/apps/ops/ansible/modules/ssh_ping.py index 700291e24..33df9f969 100644 --- a/apps/ops/ansible/modules/ssh_ping.py +++ b/apps/ops/ansible/modules/ssh_ping.py @@ -7,7 +7,7 @@ __metaclass__ = type DOCUMENTATION = ''' --- -module: custom_ssh_ping +module: ssh_ping short_description: Use ssh to probe whether an asset is connectable description: - Use ssh to probe whether an asset is connectable @@ -16,7 +16,7 @@ description: EXAMPLES = ''' - name: > Ping asset server. - custom_ssh_ping: + ssh_ping: login_host: 127.0.0.1 login_port: 22 login_user: jms @@ -25,15 +25,10 @@ EXAMPLES = ''' RETURN = ''' is_available: - description: MongoDB server availability. + description: Ping server availability. returned: always type: bool sample: true -conn_err_msg: - description: Connection error message. - returned: always - type: str - sample: '' ''' diff --git a/apps/ops/ansible/modules/telnet_ping.py b/apps/ops/ansible/modules/telnet_ping.py new file mode 100644 index 000000000..15f07c62e --- /dev/null +++ b/apps/ops/ansible/modules/telnet_ping.py @@ -0,0 +1,70 @@ +#!/usr/bin/python + +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + +DOCUMENTATION = ''' +--- +module: telnet_ping +short_description: Use telnet to probe whether an asset is connectable +description: + - Use telnet to probe whether an asset is connectable +''' + +EXAMPLES = ''' +- name: > + Telnet asset server. + telnet_ping: + login_host: localhost + login_port: 22 +''' + +RETURN = ''' +is_available: + description: Telnet server availability. + returned: always + type: bool + sample: true +''' + +import telnetlib + +from ansible.module_utils.basic import AnsibleModule + + +# ========================================= +# Module execution. +# + +def common_argument_spec(): + options = dict( + login_host=dict(type='str', required=False, default='localhost'), + login_port=dict(type='int', required=False, default=22), + timeout=dict(type='int', required=False, default=10), + ) + return options + + +def main(): + options = common_argument_spec() + module = AnsibleModule(argument_spec=options, supports_check_mode=True, ) + + result = { + 'changed': False, 'is_available': True + } + host = module.params['login_host'] + port = module.params['login_port'] + timeout = module.params['timeout'] + try: + client = telnetlib.Telnet(host, port, timeout=timeout) + client.close() + except Exception as err: # noqa + result['is_available'] = False + module.fail_json(msg='Unable to connect to asset: %s' % err) + + return module.exit_json(**result) + + +if __name__ == '__main__': + main()