Ansible 远程服务器连接 Internet 测试

Email 连接: lonnyliu@126.com


需求

  在使用Ansible过程中不可避免需要了解远端服务器是否能够联通外网,以便进行在线安装软件或者其他.对于运维人员来说普遍的办法有
  
  1. 登录到每台服务器进行 ping 测试(基本上这个时候 `www.baidu.com` 派上用场了)
  2. 使用Ansible直接对以定义好的主机进行远端执行shell命令


  以上两种第一种有可能是普遍的方式,第二种有一部分人在使用但也不否定有其他更好的办法

目标

  快速获取远端服务器连接 Internet 情况

实现

1. 配置Ansible 关闭或者使用缓存进行 facts 收集
2. 进行自定义模块进行远端服务器连接 Internet 测试
3. 收集结果结果做后续使用

代码

  • ansible 配置文件
# cat /etc/ansible.cfg
[defaults]
hostfile =  path # hosts 文件存放位置
roles_path = path # roles 角色目录存放位置
library = path # 自定义模块存放问题
remote_user = root # 远程连接用户
private_key_file = path # 公钥存放位置
host_key_checking = False
deprecation_warnings=False


# 配置使用本地 redis 缓存--自行配置
gathering = smart
fact_caching = redis
fact_caching_timeout = 86400
fact_caching_connection = 127.0.0.1:6379:0:ansiblefact
  • 自定义模块

具体模块介绍请查看官网链接

#!/usr/bin/env python
# -*- coding: utf-8 -*- 
# Author EdwardLiu

"""
检测是否可以连通外网, 使用 url方式, url 为可变参数
"""


from ansible.module_utils.basic import *
import urllib2


def internet_on(url):

    try:

        urllib2.urlopen(url, timeout=1)

        results = {
            'status': 0,
            'messages': "Connection"
        }

        return results

    except urllib2.URLError as err:

        results = {
            'status': 1,
            'messages': "Failed"
        }

        return results


if __name__ == '__main__':
    refactor_module = AnsibleModule(
        argument_spec=dict(
            url=dict(required=True),
        ),
    )

    url = "http://" + refactor_module.params['url']

    if internet_on(url)['status'] == 0:

        result = dict(module='timezone', stdotut=internet_on(url)['messages'], changed=False, rc=0)

        refactor_module.exit_json(**result)

    else:

        result = dict(msg='execute failed', rc=internet_on(url)['status'])

使用介绍

ansible--Ad-Hoc Commands(使用命令行)

  ansible pipeline -m checknetwork -a "url=www.baidu.com"
  pipeline: hosts 文件中组名称
  checknetwork: 自定义模块名称
  url=www.baidu.com 测试外网连接的 URL

效果:

附ansible playbooks使用案例

---
# 判断是否有外网
- name: checkne internet connection
  checknetwork: url={{ check_url }}
  register: result

- debug:
    msg: "System {{ inventory_hostname }} has Connection internet!!!"
  when: result.stdotut == 'Connection'

转载于:https://www.cnblogs.com/edwardlogs/p/Ansible-yuan-cheng-fu-wu-qi-lian-jie-Internet-ce-s.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值