-
1-1 自动化运维开发实战课程导学
-
2-1 自动化工程总体设计
-
2-2 章节介绍
-
2-3 学习环境硬件准备
-
2-4 Python等基础环境安装
-
2-5 Mysql、Mongo、Redis安装
-
2-6 让工程在ubuntu上run起来
-
2-7 pycharm打开工程
-
2-8 课程学习方法和建议
-
3-1 DevOPS工程快速入门引导
-
3-2 Ipython的基本操作
-
3-3 python基础知识
-
3-4 python的迭代器
-
3-5 python匿名函数+正则表达式
-
3-6 Python 模块的导入、装饰器 面向对象编程
-
3-7 Django工程快速入门引导
-
3-8 第一个DevOPS工程及Django的settings文件配置
-
3-9 对象模型models
-
3-10 建立工程模型
-
3-11 模型迁移
-
3-12 工程功能设计
-
3-13 信息采集接口功能实现
-
3-14 信息提供接口功能实现
-
3-15 Django日志输出logging模块
-
3-16 Django学习与邮件发送
-
3-17 邮件发送功能代码实现
-
3-18 IMOOCC工程中对于django框架的应用
-
3-19 IMOOCC工程对于django的框架设计改动
-
3-20 IMOOCC工程用到的表models定义和字段设计
-
3-21 IMOOCC工程用到的外键关联
-
3-22 工程初识和环境搭建--从githup上下载代码和安装模块
-
4-1 服务端资产扫描、扫描发现
-
4-2 IMOOCC前台资产管理前台界面功能
-
4-3 IMOOCC资产管理服务探测的流程
-
4-4 探测协议和模块
-
4-5 nmap工具探测使用
-
4-6 Python-nmap模块的使用
-
4-7 Python中telnet模块判断ssh服务主机
-
4-8 通过Python存活扫描的列表
-
4-9 主机登录探测
-
4-10 pexpect和paramiko模块
-
4-11 场景脚步模拟ssh用户密码登录和会话控制
-
4-12 paramiko模块ssh用户密码登录
-
4-13 通过操作系统获取主机资产信息
-
4-14 主机资产信息的重要性和探测对象
-
4-15 主机资产(系统主机名、系统版本)获取方式
-
4-16 主机资产(MAC地址信息获取)
-
4-17 主机资产(机器型号、sn序列号)获取
-
4-18 yaml工程的配置文件读取
-
4-19 程序代码逻辑梳理
-
4-20 敏感数据库的加密解密-AES
-
4-21 探测资产信息获取执行掩饰
-
4-22 逻辑图示探测资产信息
-
5-1 章节内容介绍及规划
-
5-2 网络设备snmp资产信息获取
-
5-3 网络设备snmp客户端
-
5-4 掩饰pysnmp模块调用执行
-
5-5 工程对于网络设备扫描代码梳理
-
5-6 工程对于网络设备扫描代码知识点总结
-
5-7 服务器资产信息扫描归类
-
5-8 服务器资产信息扫描归类的逻辑实现
-
5-9 Docker容器扫描
-
5-10 Docker服务安装及测试镜像启动
-
5-11 Docker扫描关键信息获取.mov音频
-
5-12 Docker登录扫描关键信息代码的逻辑
-
5-13 Docker登录扫描关键信息代码执行掩饰
-
5-14 kvm物理机资产探测扫描-kvm虚拟机环境安装
-
5-15 kvm物理机资产探测扫描-通过kvm宿主机关联虚拟机的方式
-
5-16 ESX物理机资产探测扫描-利用Vmware提供的sdk探测ESX
-
5-17 (资产探测、扫描发现进阶)章节知识回顾
-
6-1 Ansible自动化任务执行的意义
-
6-2 Ansible的介绍和安装
-
6-3 Ansible主要配置文件介绍
-
6-4 Ansible.cfg的常用配置项介绍
-
6-5 hosts主机资产清单配置方式
-
6-6 实现ssh密码登录执行命令
-
6-7 实现ssh密钥登录执行命令
-
6-8 ad-hoc模式概念和命令行执行
-
6-9 ad-hoc常用模块介绍
-
6-10 ad-hoc常用模块场景演练
-
6-11 ad-hoc系统信息获取、服务安装、服务管理
-
6-12 ad-hoc常用模块场景演练-代码部署
-
6-13 playbook的组成及其优劣
-
6-14 playbook命令执行方式和执行选项
-
6-15 playbook基本场景使用
-
6-16 playbook剧本中的变量自定义方式
-
6-17 playbook剧本中变量定义方式
-
6-18 playbook基本语句之条件判断
-
6-19 playbook基本语句之循环语句讲解演示
-
6-20 playbook基本语句之条件结合循环语句的使用场景
-
6-21 playbook异常处理
-
6-22 Ansible自动化任务执行tag标签任务控制
-
6-23 剧本中的include用户介绍
-
6-24 官方所建议的roted剧本目录结构
-
6-25 roles场景演练——剧本结构梳理
-
6-26 roles场景演练执行
-
6-27 场景演练注意问题及效果确认
-
7-1 章节内容介绍
-
7-2 Ansible模块中的核心类介绍
-
7-3 InventoryManager调用
-
7-4 InventoryManager+VariableManager常用方法使用
-
7-5 ad-hoc任务执行
-
7-6 playbook剧本的任务执行
-
7-7 CallbackBase类方法改写
-
7-8 playbook模式下的CallbackBase类方法改写
-
7-9 Ansible模块核心类总结
-
7-10 基于Ansible+Django的自动化任务接口设计
-
7-11 utils层核心任务类的封装代码实现
-
7-12 utils层核心代码执行演示及调试方法介绍
-
7-13 view视图层基础场景演示
-
7-14 关于POST方法和客户端浏览器提交方式
-
7-15 json数据格式和内容及数据处理
-
7-16 工程接口设计及URL路由
-
7-17 工程view视图层代码逻辑实现及自动化接口执行演示
-
7-18 自动化工程事件日志及状态记录
-
7-19 pymongo执行基础的CURD操作
-
7-20 关于事件日志的记录
-
7-21 事件日志的记录代码部分讲解
-
7-22 事件日志的记录代码执行演示
-
7-23 任务执行锁及基本的redis操作
-
7-24 工程中的任务执行锁代码梳理和执行演示
-
8-1 课程内容总结
-
8-2 尾声
1-1 自动化运维开发实战课程导学
2-1 自动化工程总体设计
2.1.1 自动化扫描发现;
2.1.2 自动化任务执行;
2-2 章节介绍
2-3 学习环境硬件准备
2-4 Python等基础环境安装
技术手记:https://www.imooc.com/t/1352822#Article
2-5 Mysql、Mongo、Redis安装
- apt-get install mysql-server -y
- apt-get install redis-server -y
- apt-get install mongodb -y
2-6 让工程在ubuntu上run起来
2-7 pycharm打开工程
工程的依赖包:
Django==1.8.2 ansible==2.4.1.0 appnope==0.1.0 asn1crypto==0.23.0 backports.shutil-get-terminal-size==1.0.0 bcrypt==3.1.4 certifi==2017.7.27.1 cffi==1.11.2 chardet==3.0.4 cryptography==2.1.3 decorator==4.1.2 diff-match-patch==20121119 django-crispy-forms==1.7.0 django-crontab==0.7.1 django-formtools==2.1 django-import-export==0.5.1 enum34==1.1.6 et-xmlfile==1.0.1 future==0.16.0 httplib2==0.9.2 idna==2.6 ipaddress==1.0.18 ipython==5.5.0 ipython-genutils==0.2.0 jdcal==1.3 jieba==0.39 Jinja2==2.10 ldap3==2.4 MarkupSafe==1.0 MySQL-python==1.2.5 odfpy==1.3.5 openpyxl==2.4.9 paramiko==2.4.0 pathlib2==2.3.0 pexpect==4.2.1 pickleshare==0.7.4 ply==3.10 prompt-toolkit==1.0.15 ptyprocess==0.5.2 pyasn1==0.3.7 pycparser==2.18 pycrypto==2.6.1 pycryptodome==3.4.7 Pygments==2.2.0 pymongo==3.5.1 PyNaCl==1.2.0 pysmi==0.1.3 pysnmp==4.3.9 python-nmap==0.6.1 pytz==2017.3 pyvmomi==6.5.0.2017.5.post1 PyYAML==3.12 redis==2.10.6 requests==2.18.4 scandir==1.6 simplegeneric==0.8.1 simplejson==3.13.2 six==1.11.0 tablib==0.12.1 traitlets==4.3.2 unicodecsv==0.14.1 urllib3==1.22 wcwidth==0.1.7 Whoosh==2.7.4 xadmin==0.6.1 xlrd==1.1.0 xlwt==1.3.0
2-8 课程学习方法和建议
3-1 DevOPS工程快速入门引导
3-2 Ipython的基本操作
3-3 python基础知识
3-4 python的迭代器
3-5 python匿名函数+正则表达式
3-6 Python 模块的导入、装饰器 面向对象编程
3-7 Django工程快速入门引导
3-8 第一个DevOPS工程及Django的settings文件配置
3-9 对象模型models
3-10 建立工程模型
3-11 模型迁移
- python manage.py makemigrations
- python manage.py migrate
- 字符编码shebang设置_*_ coding:utf8 _*_
3-12 工程功能设计
3-13 信息采集接口功能实现
3-14 信息提供接口功能实现
3-15 Django日志输出logging模块
3-16 Django学习与邮件发送
Django的官方文档:https://docs.djangoproject.com/zh-hans/2.1/
3-17 邮件发送功能代码实现 mp4
Django发送邮件:https://docs.djangoproject.com/zh-hans/2.1/topics/email/
3-18 IMOOCC工程中对于django框架的应用
3-19 IMOOCC工程对于django的框架设计改动
3-20 IMOOCC工程用到的表models定义和字段设计
scanhosts/models.py;
# -*- coding: utf-8 -*- from django.db import models # Create your models here. # 扫描后资产设备基础信息初表 class HostLoginifo(models.Model): TYPE_CHIOCE = ( ('0', 'kvm'), ('1', 'docker'), ('2', 'vmx'), ) ip = models.CharField(max_length=64,null=False,verbose_name=u"主机IP信息") ssh_port = models.CharField(max_length=32,null=True,verbose_name=u"ssh登录的端口") ssh_user = models.CharField(max_length=32,null=True,verbose_name=u"ssh登录的用户") ssh_passwd = models.CharField(max_length=64,null=True,verbose_name=u"ssh登录的用户",default="") ssh_rsa = models.CharField(max_length=64,null=True,verbose_name=u"登录使用的私钥",default="") rsa_pass = models.CharField(max_length=64,null=True,verbose_name=u"私钥的秘药",default="") system_ver = models.CharField(max_length=256,null=True,verbose_name=u"操作系统版本",default="") hostname = models.CharField(max_length=256,null=True,verbose_name=u"操作系统主机名",default="") ssh_status = models.IntegerField(verbose_name=u"0-登录失败,1-登录成功",default=0) ssh_type = models.IntegerField(verbose_name=u"1-rsa登录,2-dsa登录,3-普通用户rsa登录,4-docker成功,5-docker无法登录",default=0) mac_address = models.CharField(max_length=512,verbose_name=u"mac地址列表",default="") sn = models.CharField(max_length=256,verbose_name=u"SN-主机的唯一标示",default="") mathine_type = models.CharField(max_length=256,verbose_name=u"机器的类型 1=物理服务器,2=虚拟资产,3=网络设备 0=其他类型(未知)",default="") sn_key = models.CharField(max_length=256,verbose_name=u"唯一设备ID",default="") host_type = models.CharField(max_length=256,verbose_name=u"虚拟机上宿主机的类型",default="",null=True) class Meta: verbose_name = u'初始化扫描信息表' verbose_name_plural = verbose_name db_table = "hostloginifo"
apps/detail/models.py;
# -*- coding:utf-8 -*- from django.db import models import django.utils.timezone as timezone # 用户登录信息表(服务器、虚拟机) class ConnectionInfo(models.Model): # 用户连接相关信息 ssh_username = models.CharField(max_length=10, default='', verbose_name=u'ssh用户名', null=True) ssh_userpasswd = models.CharField(max_length=40, default='', verbose_name=u'ssh用户密码', null=True) ssh_hostip = models.CharField(max_length=40, default='', verbose_name=u'ssh登录的ip', null=True) ssh_host_port = models.CharField(max_length=10, default='', verbose_name=u'ssh登录的端口', null=True) ssh_rsa = models.CharField(max_length=64, default='', verbose_name=u'ssh私钥') rsa_pass = models.CharField(max_length=64, default='', verbose_name=u'私钥的密钥') # 0-登录失败,1-登录成功 ssh_status = models.IntegerField(default=0, verbose_name=u'用户连接状态,0-登录失败,1-登录成功') # 1-rsa登录,2-dsa登录,3-普通用户_rsa登录,4-docker成功,5-docker无法登录 ssh_type = models.IntegerField(default=0, verbose_name=u'用户连接类型, 1-rsa登录,2-dsa登录,' u'3-ssh_rsa登录,4-docker成功,5-docker无法登录') # 唯一对象标示 sn_key = models.CharField(max_length=256, verbose_name=u"唯一设备ID", default="") class Meta: verbose_name = u'用户登录信息表' verbose_name_plural = verbose_name db_table = "connectioninfo" # 用户登录信息表(交换机、网络设备) class NetConnectionInfo(models.Model): tel_username = models.CharField(max_length=10, default='', verbose_name=u'用户名', null=True) tel_userpasswd = models.CharField(max_length=40, default='', verbose_name=u'设备用户密码', null=True) tel_enpasswd = models.CharField(max_length=40, default='', verbose_name=u'设备超级用户密码', null=True) tel_host_port = models.CharField(max_length=10, default='', verbose_name=u'设备登录的端口', null=True) tel_hostip = models.CharField(max_length=40, default='', verbose_name=u'设备登录的ip', null=True) # 0-登录失败,1-登录成功 tel_status = models.IntegerField(default=0, verbose_name=u'用户连接状态,0-登录失败,1-登录成功') tel_type = models.IntegerField(default=0, verbose_name=u'用户连接类型, 1-普通用户可登录,2-超级用户可登录') # 唯一对象标示 sn_key = models.CharField(max_length=256, verbose_name=u"唯一设备ID", default="") dev_info = models.ForeignKey('NetWorkInfo') class Meta: verbose_name = u'网络设备用户登录信息' verbose_name_plural = verbose_name db_table = "netconnectioninfo" # 机柜的信息 class CabinetInfo(models.Model): cab_name = models.CharField(max_length=10, verbose_name=u'机柜编号') # 1-10分别代表1~10层 cab_lever = models.CharField(max_length=2, verbose_name=u'机器U数,1-10分别代表1~10层') class Meta: verbose_name = u'机柜信息表' verbose_name_plural = verbose_name db_table = "cabinetinfo" # 物理服务器信息 class PhysicalServerInfo(models.Model): # server_name = models.CharField(max_length=15, verbose_name=u'服务器名') server_ip = models.CharField(max_length=40, verbose_name=u'服务器IP') # 机器的类型 dell or other? machine_brand = models.CharField(max_length=60, default='--', verbose_name=u'服务器品牌') # 机器的类型 # machine_type = models.IntegerField(default=0, verbose_name=u'服务器,0-物理服务器,1-虚拟服务器,2-') system_ver = models.CharField(max_length=30, default='', verbose_name=u'操作系统版本') sys_hostname = models.CharField(max_length=15, verbose_name=u'操作系统主机名') mac = models.CharField(max_length=512, default='', verbose_name=u'MAC地址') sn = models.CharField(max_length=256, verbose_name=u'SN-主机的唯一标识', default='') vir_type = models.CharField(max_length=2, verbose_name=u'宿主机类型', default='') # 物理服务器关联的机柜 ser_cabin = models.ForeignKey('CabinetInfo') # 用户登录系统信息 conn_phy = models.ForeignKey('ConnectionInfo') class Meta: verbose_name = u'物理服务器信息表' verbose_name_plural = verbose_name db_table = "physicalserverinfo" # 虚拟设备信息 class VirtualServerInfo(models.Model): # server_name = models.CharField(max_length=15, verbose_name=u'服务器名') server_ip = models.CharField(max_length=40, verbose_name=u'服务器IP') # 机器的类型 0=kvm,2=虚拟资产,3=网络设备 0=其他类型(未知) server_type = models.CharField(max_length=80, default='', verbose_name=u'服务器类型:kvm,Vmware,Docker,others') system_ver = models.CharField(max_length=30, default='', verbose_name=u'操作系统版本') sys_hostname = models.CharField(max_length=15, verbose_name=u'操作系统主机名') mac = models.CharField(max_length=512, default='', verbose_name=u'MAC地址') sn = models.CharField(max_length=256, verbose_name=u'SN-主机的唯一标识', default='') # 虚拟设备关联的物理服务器 vir_phy = models.ForeignKey('PhysicalServerInfo') # 用户登录系统信息 conn_vir = models.ForeignKey('ConnectionInfo') class Meta: verbose_name = u'虚拟设备表' verbose_name_plural = verbose_name db_table = "virtualserverinfo" # 网络设备表 class NetWorkInfo(models.Model): host_ip = models.CharField(max_length=40, verbose_name=u'网络设备ip') host_name = models.CharField(max_length=10, verbose_name=u'网络设备名') sn = models.CharField(max_length=256, verbose_name=u"SN-设备的唯一标识", default="") # 网络设备所在的机柜 net_cab = models.ForeignKey('CabinetInfo') class Meta: verbose_name = u'网络设备表' verbose_name_plural = verbose_name db_table = "networkinfo" class OtherMachineInfo(models.Model): ip = models.CharField(max_length=40, verbose_name=u'设备ip') sn_key = models.CharField(max_length=256, verbose_name=u'设备的唯一标识') machine_name = models.CharField(max_length=20, verbose_name=u'设备名称') remark = models.TextField(default='', verbose_name=u'备注') reson_str = models.CharField(max_length=128, verbose_name=u"归纳原因", default='') # 关联的机柜 oth_cab = models.ForeignKey('CabinetInfo') class Meta: verbose_name = u'其它设备表' verbose_name_plural = verbose_name db_table = 'othermachineinfo' class StatisticsRecord(models.Model): datatime = models.DateTimeField(verbose_name=u"更新时间", default=timezone.now().strftime('%Y-%m-%d')) all_count = models.IntegerField(verbose_name=u"所有设备数量", default=0) pyh_count = models.IntegerField(verbose_name=u"物理设备数量", default=0) net_count = models.IntegerField(verbose_name=u"网络设备数量", default=0) other_count = models.IntegerField(verbose_name=u"其他设备数量", default=0) kvm_count = models.IntegerField(verbose_name=u"KVM设备数量", default=0) docker_count = models.IntegerField(verbose_name=u"Docker设备数量", default=0) vmx_count = models.IntegerField(verbose_name=u"VMX设备数量", default=0) class Meta: verbose_name = u'扫描后的汇总硬件统计信息' verbose_name_plural = verbose_name db_table = 'statisticsrecord'
3-21 IMOOCC工程用到的外键关联
3-22 工程初识和环境搭建--从githup上下载代码和安装模块
IMOOCC的工程代码地址:https://github.com/iopsgroup/imoocc
- git clone https://github.com/iopsgroup/imoocc
- git pull xxx
- git push xxx
- pip install -r requirements.txt
工程模块的安装;
4-1 服务端资产扫描、扫描发现
4-2 IMOOCC前台资产管理前台界面功能
4-3 IMOOCC资产管理服务探测的流程
4-4 探测协议和模块
4-5 nmap工具探测使用
4-6 Python-nmap模块的使用
4-7 Python中telnet模块判断ssh服务主机
4-8 通过Python存活扫描的列表