比较简单的远程连接主机执行命令就可以用paramiko来解决
现在要把执行的任务调度到需要执行的机器上
现在只要不是开发管的都是运维管的,从ups电池,打印机,服务器,后来运维领域出了puppet,saltstack,ansible后起之秀,ansible和saltstack都是python写的,有开源版,也有商业版,比如ansible的tower就是要收费的。
工具可能是自动化的一个环节。把工具结合在一起就形成了一个完整的平台
这个是翻译的书
ansible基于ssh链接,比较方便快捷,控制的主机可以称为master,被控制的主机可以称为agent,也就是无agent的设计,用的是现成的ssh链接,借用了linux已有的东西,数据通过网络传输现在到被控主机来执行,可以人为直接操作,也可以直接编写剧本playbook,playbook实际用yaml来写,类似xml
可以操作一些模块和插件,最终都是要被控的主机来做我们想要的东西,一般不光执行命令,而且要知道执行的结果好坏
ansible是python开发,使用了paramiko和pyYaml库,一个解决访问的问题,一个解决配置文件
这次直接在linux上试试,因为windows很可能编译不过
启动一个fedora
安装ansible的时候,要安装pycrypto这样一个底层加密库,windows是要编译的
这里安装了下
现在执行的命令,命令行显示不清晰
看看设置里有没有terminal,现在命令行没显示,用起来很不方便,设置里不用bash,用sh
现在就从bash变成了shell
linux下这样就直接安装pycharm
安装好ansible,就可以在pycharm里写程序了
windows的安装比较麻烦
ansible的配置文件一般放在用户的家目录下,读取配置的顺序会去找配置项,
ansible_config 在环境变量下读取
ansible.cfg 当前目录下读取
~/.ansible.cfg 用户家目录下
/etc/ansible/ansible.cfg
由近及远
在ansible上要做一些配置
定义一个资产清单,告诉你配置的资源在哪里,是一个清单
这是一个ini文件。下面就要去家目录里定义这样一个文件
这里可以分组写主机
现在两个配置文件写好了
m指的是module,模块,ansible all -m ping ping清单里所有的主机
另外一台centos主机可以ping到
注意文件路径
现在就有效果,现在是按照当前用户去访问的
创建个密钥对
拷贝公钥到被控主机
现在就用ssh来登录成功了
再试一次还是不可以,因为不是用root用户运行的,而是你链接的当前的用户
需要修改几个值
告诉下一次登录的用户是谁,链接过去使用root来访问
这样就成功了
通过ssh登录到了对方,将命令交给对方,这边由shell模块,在shell中运行命令,将标准输出中的结果最后返回来
现在这个命令是没有的
返回来的是stderr的结果
ansible内部传输数据可以用sftp,也可以用scp方式。
ansible更强大的不是像现在这样,而是playbook,是yaml语言来编写的配置文件,或者叫编排工具,将所有的编排好,到被控节点上去执行。
ansible galaxy,分享你写的playbook。
借助ssh,只要你能在shell中执行,都 没什么问题
有写公司需要一个深度定制,写一个类似ansible的这样一个工具
现在先想把shell脚本推过去,然后去执行,然后把结果拿回来。任务有成功和失败之分,然后考虑跨机房,中间可以经过vpn通道。
还要保留历史版本,做了什么事情必须留痕
开源的大家一起开发,最终都会走分支,因为到最后代码的合并始终都是个问题
云平台一定要可计量才能卖,所以有些开源软件没钱挣,就要改变开源协议,而且做开源软件等于造轮子,要了解的东西有很多才能编程
开发这样一个运维平台,bs开发接口是必须实现的,人机交互接口,无论用JQuery还是react都可以做
架构,系统应该分为三部分:
第一部分,人机交互用的,webserver也就是在这之前有人写前端调用这个webserver的接口
分成三大块,人机交互用webserver打交道,对所有的agent进行管理的话用master server
matser只要负责管理这些agent,并且将任务分配给agent,agent运行不同任务,将任务运行的结果返回给master,如果要做审计,就把一些任务运行详细情况记录大数据库里,方便查询
其实也可以不用ssh来演化,用rpc执行任务也可以,用rpc通信,微服务内部全是rpc通信的对外暴露的是resultful风格的,内部为了搞笑全是rpc通信。
agent就是利用自己的资源,跑执行的任务,并返回结果