当前位置: 首页 > news >正文

自动化运维(四)第一个Ansible任务

AWX和Ansible已经安装好,接下来我们使用一个简单的任务,要学习一下怎么使用这个工具。我们首先准备一下测试环境,我的测试环境共有6台虚拟机,服务器信息如下:

Ansible服务器192.168.110.170自动化管理服务器
WEB服务器192.168.110.250测试WEB服务器安装Nginx
数据库服务器192.168.110.150安装Mysql
DNS服务器192.168.110.22内网dns,安装DNSmasq
Redis服务器192.168.110.28缓存服务器安装redis
Jenkins服务器192.168.110.151

发布代码到测试服务器

为了配置Ansible  来管理这些指定的节点,我们需要执行一系列步骤,来确保 Ansible能够与这些节点进行通信和管理。下面介绍如何配置 AWX 管理这些服务器:

环境配置

首先,你需要确保 Ansible安装的服务器(192.168.110.170)能够访问你想要管理的其他服务器。这意味着网络上没有阻止 Ansible访问这些目标服务器的防火墙或者其他网络安全设置,主要涉及到三个方面:网络连通性、防火墙设置、以及SSH权限设置。下面是一些具体的步骤来检查和确保这些访问权限:

网络连通性测试
  • Ping 测试: 使用 ping 命令来检测 AWX 服务器能否到达其他服务器。例如,你可以从 Ansible服务器 ping 192.168.110.250(Nginx服务器)。
ping 192.168.110.250

如果你收到回复,表明在网络层面上,两台服务器是连通的。

检查防火墙设置

确保没有防火墙规则阻止 Ansible服务器与其他服务器之间的通信。这可能需要你检查每台服务器上的防火墙设置,包括但不限于iptables、ufw或是云平台的安全组设置。

  • 对于使用 iptables 的系统:

    检查当前的规则,尤其是那些可能会Drop或Reject数据包的规则。

    sudo iptables -L
    
  • 对于使用 ufw 的系统:

    检查 ufw 的状态以及相关规则是否允许来自 Ansible服务器的连接。

    sudo ufw status
    
SSH权限设置
  • 无密码 SSH 登录: AWX/Ansible 通常使用 SSH 私钥来认证。确保 Ansible服务器的 SSH 公钥已经添加到其他服务器的~/.ssh/authorized_keys文件中,并且对应的用户有权做需要的操作。可参考我的另一篇博文《Linux服务器之间SSH免密登陆》

  • 检查 SSH 配置: 在 Ansible服务器上检查是否能够无密码登录到目标服务器。

    ssh 192.168.110.250
    

    如果无法成功连接,请检查~/.ssh/authorized_keys文件的权限设置,确保 SSH 服务配置正确,且没有在/etc/hosts.deny中被拒绝。

特定端口通信

除了基础的 SSH 访问,你可能需要保证 Ansible服务器能够通过特定端口访问比如 MySQL、Nginx 或 Kubernetes 相关的服务端口。这需要确定这些服务监听的端口对 AWX 服务器开放且没有被防火墙规则所阻挡。

确保所有必要的通信通道打开后,你就可以顺利在 Ansible中管理这些节点了。若存在任何连通性问题,从上述检查中定位并解决问题。如果是在企业环境中,还可能需要与网络团队合作,确保网络策略满足要求。

第一个Ansible任务

我们现在创建一个简单的Ansible任务,来实现所有的服务器ping www.baidu.com这个域名,判断这些服务器是否可以正常连外网。

创建inventory文件

你可以在Ansible主机上创建一个inventory文件,然后在playbook中指定这个inventory文件。在inventory文件中,你可以定义所有的目标主机。然后你可以在playbook中定义一个任务,使用shell或command模块运行ping命令,然后检查返回的结果。

首先,创建一个名为hosts的inventory文件,内容如下:

[web]
192.168.110.250[db]
192.168.110.150[dns]
192.168.110.22[redis]
192.168.110.28[jenkins]
192.168.110.151
创建playbook文件

然后,创建一个名为check_internet.yml的playbook,内容如下:

---
- name: Check internet connectionhosts: allgather_facts: notasks:- name: Ping www.baidu.comcommand: ping -c 1 www.baidu.comregister: resultignore_errors: true- name: Show resultdebug:msg: "Ping www.baidu.com success."when: result.rc == 0- name: Show errordebug:msg: "Ping www.baidu.com failed."when: result.rc != 0
运行执行任务

最后,你可以运行以下命令,使Ansible根据你的inventory文件和playbook执行任务:

ansible-playbook -i hosts check_internet.yml

这个命令会在所有在inventory文件中定义的主机上运行ping命令,然后根据返回的结果输出相应的信息。

执行的结果如下:


PLAY [Check internet connection] *********************************************************************************************************************************************************TASK [Ping www.baidu.com] ****************************************************************************************************************************************************************
changed: [192.168.110.28]
changed: [192.168.110.22]
changed: [192.168.110.151]
changed: [192.168.110.150]
[DEPRECATION WARNING]: Distribution Ubuntu 20.04 on host 192.168.110.250 should use /usr/bin/python3, but is using /usr/bin/python for backward compatibility with prior Ansible 
releases. A future Ansible release will default to using the discovered platform python for this host. See 
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings can be 
disabled by setting deprecation_warnings=False in ansible.cfg.
changed: [192.168.110.250]TASK [Show result] ***********************************************************************************************************************************************************************
ok: [192.168.110.250] => {"msg": "Ping www.baidu.com success."
}
ok: [192.168.110.150] => {"msg": "Ping www.baidu.com success."
}
ok: [192.168.110.22] => {"msg": "Ping www.baidu.com success."
}
ok: [192.168.110.28] => {"msg": "Ping www.baidu.com success."
}
ok: [192.168.110.151] => {"msg": "Ping www.baidu.com success."
}TASK [Show error] ************************************************************************************************************************************************************************
skipping: [192.168.110.250]
skipping: [192.168.110.22]
skipping: [192.168.110.150]
skipping: [192.168.110.28]
skipping: [192.168.110.151]PLAY RECAP *******************************************************************************************************************************************************************************
192.168.110.150            : ok=2    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
192.168.110.151            : ok=2    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
192.168.110.22             : ok=2    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
192.168.110.250            : ok=2    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
192.168.110.28             : ok=2    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

 从目前的结果看,这几台服务器都可以正常访问外网。

相关文章:

  • MySQL中 in 和 exists 区别
  • Springboot集成knife4j (swagger)
  • 突破!AI机器人拥有嗅觉!仿生嗅觉芯片研究登上Nature子刊
  • STC89C51学习笔记(二)
  • Flutter-发布插件到pub上传不上问题
  • RedisDesktopManager 安装
  • 网络基础二——TCP可靠性实现机制补充
  • Composer常见错误及解决方法
  • 金融中的数学知识
  • 内部类(InnerClass) 总结
  • 计算机网络-从输入网址到访问网站的全过程
  • 金融数据_PySpark-3.0.3随机森林(RandomForestClassifier)实例
  • AI大模型与网球运动结合的应用场景及案例分析
  • 精品PPT-2023年无人驾驶汽车车联网网络安全方案
  • Unity开发者3D模型基础
  • 【Amaple教程】5. 插件
  • 【EOS】Cleos基础
  • Electron入门介绍
  • Git的一些常用操作
  • input的行数自动增减
  • js对象的深浅拷贝
  • leetcode98. Validate Binary Search Tree
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • tensorflow学习笔记3——MNIST应用篇
  • Vue ES6 Jade Scss Webpack Gulp
  • 代理模式
  • 前端学习笔记之观察者模式
  • 算法---两个栈实现一个队列
  •  一套莫尔斯电报听写、翻译系统
  • 主流的CSS水平和垂直居中技术大全
  • No resource identifier found for attribute,RxJava之zip操作符
  • AI算硅基生命吗,为什么?
  • raise 与 raise ... from 的区别
  • ​520就是要宠粉,你的心头书我买单
  • # centos7下FFmpeg环境部署记录
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (转)linux 命令大全
  • (转)可以带来幸福的一本书
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net专家(张羿专栏)
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [Avalon] Avalon中的Conditional Formatting.