<我不是九爷> Ansible

1. 了解什么是ansible

ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:让我们自动化部署APP;自动化管理配置项;自动化的持续交付;自动化的(AWS)云服务管理。

所有的这几个目标本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已。就像我之前有介绍过的Fabric,以及我们基于Fabric开发的自动化应用部署的工具: Essay 。都是做了这么个事——批量的在远程服务器上执行命令 。

那么fabric和ansible有什么差别呢?简单来说fabric像是一个工具箱,提供了很多好用的工具,用来在Remote执行命令,而Ansible则是提供了一套简单的流程,你要按照它的流程来做,就能轻松完成任务。这就像是库和框架的关系一样。

当然,它们之间也是有共同点的——都是基于 paramiko 开发的。这个paramiko是什么呢?它是一个纯Python实现的ssh协议库。因此fabric和ansible还有一个共同点就是不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。

2. 快速安装

上面简单介绍了下这是个什么东西,怎么安装呢?也很简单,因为ansible是python开发的,因此可以这么安装:

sudo esay_install ansible

# 或者

sudo pip install ansible

你也可以从github上clone最新版本,然后安装。

另外需要注意的是,控制服务器(Master)需要安装Python2.6/7,windows上无法使用ansible。被管理的服务器(Managed Node)需要安装Python2.4以上的版本,如果低于2.5,需要安装python-simplejson。

3. 配置

安装完成之后,先来配置下配置项——.ansible.cfg。ansible执行的时候会按照以下顺序查找配置项:

* ANSIBLE_CONFIG (环境变量)

* ansible.cfg (当前目录下)

* .ansible.cfg (用户家目录下)

* /etc/ansible/ansible.cfg

还有一个重要的配置是hosts的配置,所有的远程主机需要在hosts中配置,可以分组。当然hosts也可以执行是指定。先来一个简单的例子,在家目录下新建一个hosts文件:

# hosts

[local]

127.0.0.1

然后在终端执行:

$ ansible -i ~/hosts all -a 'who'

 

# 结果如下:

127.0.0.1 | success | rc=0 >>

Guest    console  Feb  1 16:29

the5fire console  Jan 20 19:50

the5fire ttys018  Feb 22 15:35  (localhost)

这是一条ad-hoc命令——临时执行命令,ad-hoc是ansible里的一个概念, 在上面命令中就是 -a ,具体稍后再说。命令中的all是值hoss中的所有服务器,当然也可以通过 ansible -i ~/hosts local -a'who' 这样根据组名指定服务器。

再说到ansible.cfg的配置,默认ansible执行时会从该配置中加载hosts配置,因此可以通过修改.ansible.cfg来指定默认的hosts文件地址:

# .ansible.cfg

[defaults]

hostfile=/Users/the5fire/hosts

这样下次执行,就不需要 -i 参数了。

4. Ad-Hoc

ad hoc——临时的,在ansible中是指需要快速执行,并且不需要保存的命令。说白了就是执行简单的命令——一条命令。对于复杂的命令后面会说playbook。

那么这个Ad-Hoc命令怎么用呢?上面已经简单的示范了下。在ansible中还有一个Module(模块)的概念,这个模块可以理解为一个库,所有的命令都需要通过模块来执行,比如上面的那个命令: ansible-i ~/hosts all -a 'who' ,其实是调用了默认的command模块: ansible -i ~/hosts all -mcommand -a 'who' ,除了command模块还有其他很多模块,比如你就想ping下这个服务器是不是还存在可以通过ping模块: ansible -i ~/hosts all -m ping 。

还有几个参数需要记录下:

-u username  # 指定ssh连接的用户名

-f 10        # 指定并发数

--sudo [-K]    #  如果需要root权限执行的话,-K参数是用来输入root密码的

你可以通过各种模块来批量完成某个包的安装,或者其他什么需要的操作。 更多模块可以看官网文档: modules

关于Ad-Hoc的更多内容参考这里: intro_adhoc

5. 简单Playbook

上面的ad hoc是指执行一条临时的不需要保存的命令,那么复杂的命令怎么执行呢?因此也就有了playbook这个命令: ansible-playbook 。

playbook(剧本),顾名思义,就是需要定义一个脚本或者说配置文件,然后定义好做什么。一个简单的playbook是这样的,把当前用户名输出到whoami.rst文件中:

# playbook.yml

---

- hosts: local  # hosts中指定

  remote_user: the5fire  # 如果和当前用户一样,则无需指定

  tasks:

    - name: whoami

      shell: 'whoami > whoami.rst'

执行完这个命令后,你可以在local所代表的服务器的用户目录下发现这么个文件。说道这里,要停一下。这个配置文件是yaml格式的,因此你可能需要去了解下YAML: wiki YAML 。

简单解释下上面的playbook,hosts后面根据local是从hosts中读取的,tasks是是关键词,指明了要执行哪些任务;下面的name是任务的名称,shell是前面提到的module(模块),单引号中是命令。

除了tasks之外,还有一个handlers的命令,handlers是在执行tasks之后服务器发生变化之后可供调用的handler,使用起来如下:

# playbook.yml

---

- hosts: local  # hosts中指定

  remote_user: the5fire  # 如果和当前用户一样,则无需指定

  tasks:

      - name: whoami

        copy: src=~/hosts dest=~/hosts.dest  #  本地拷贝到远端

        notify:  # 如果copy执行完之后~/hosts.dest文件发送了变化,则执行

            - clear copy  # 调用handler

  handlers:

      - name: clear copy

        shell: 'mv ~/hosts.dest hosts.del'  # 假装删除

上面只是一个演示,再来一个真实的功能——在local服务器上,从git上clone下来我的blog源码,然后创建虚拟环境,创建数据库,最后运行:

# deploy-blog-simple.yml

---

- hosts: local  # hosts中指定

remote_user: the5fire  # 如果和当前用户一样,则无需指定

tasks:

    - name: check out django_blog

    git: dest=~/demos/django_selfblog repo=https://github.com/the5fire/django_selfblog

        update=yes

    - name: make virtualenv

    shell: 'virtualenv ~/demos'

    - name: install requirements

    pip: requirements=~/demos/django_selfblog/requirements.txt

        virtualenv=~/demos

    - name: init database

    shell: . ./bin/activate && cd django_selfblog/selfblog && ./init_database.sh chdir=~/demos

    - name: run manage.py

    shell: . ./bin/activate && cd django_selfblog/selfblog &&  ./run.sh chdir=~/demos

如果你已经配置好ssh账户免密码登录之后,直接执行: ansible-playbookdeploy-blog-simple.yml 就可以在你指定的服务器上部署,并启动blog了。

 

转载于:https://blog.51cto.com/lwm666/1912697

我不是九爷 带你了解 ansible相关推荐

  1. 我不是九爷 带了解 Unity3D与VR虚拟现实

    对于大多数人来说,可能不知道Unity3D是什么,但是却知道VR虚拟现实是什么,更不会把VR虚拟现实和Unity3D联系在一起,外行的人根本不知道这两者之间有什么关系.那么,今天来给你讲解一下Unit ...

  2. 九爷 带你了解 nginx优化与防盗链

    Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为"engine X",是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP  ...

  3. 九爷带你了解 nginx 日志配置指令详解

    nginx日志配置指令详解 日志对于统计排错来说非常有利的. 本文总结了nginx日志相关的配置如 access_log.log_format.open_log_file_cache.log_not_ ...

  4. 2021/06/20 九析带你轻松完爆 istio (一)

    大纲介绍 **istio是一种服务网格的实现,大概从12个方面 0 istio的简单介绍 1 istio的架构和核心 2 ** 1 istio的架构和核心,有两个平面,数据平面envoy(负责服务间通 ...

  5. c语言如何不产生僵尸进程,第三章 九析带你处理 zombie(defunct) 进程

    目录 1 前言 2 僵尸进程 2.1 进程简介 2.2 僵尸进程例子 2.3 僵尸进程危害 3 处理僵尸进程 3.1 kill 命令 3.2 kill 父进程 3.3 reboot 3.4 magic ...

  6. 九妹带你了解oracle

    一.oracle 体系架构 Oracle的体系结构是数据库的组成,工作过程,以及数据库中数据的组织与管理机制,要了解oracle数据库的体系结构,就必须要理解oracle的主要组件和重要的概念.Ora ...

  7. 九妹带你走向 架构师

    迈向系统架构师 编者按:系统架构师是许多程序员的梦想职业.今天的你也许已经掌握了各种开发工具,并且能够使用各种平台进行开发,但作为一个架构师的要求,也许还有很长的道路.邢波涛先生在LAMP架构上的造诣 ...

  8. mysql用户信息表储存引擎,Mysql表引擎

    MySQL--存储引擎篇 前面总体介绍了MySQL的几个基本命令,这里介绍MySQL的存储引擎. 储存引擎就是指表的类型,数据库的存储引擎决定了表在计算机中的存储方式.存储引擎的概念是MySQL的特点 ...

  9. oracle rac应急_oracle rac 多数据库

    Oracle系列:Oracle RAC集群体系结构 一. Oracle集群体系结构 Oracle RAC,全称是Oracle Real Application Cluster,即真正的应用集群,是or ...

最新文章

  1. pandas使用duplicated函数删除dataframe中重复列名称的数据列、默认保留重复数据列中的第一个数据列(removing duplicate columns in dataframe)
  2. jquerymobile知识点三:弹出层popup
  3. 【Groovy】Groovy 脚本调用 ( Groovy 配置文件格式 | Groovy 配置文件读取 | 完整配置文件及解析代码示例 )
  4. .NET 6 中的 Logging Source Generator
  5. 推荐40个简单的 jQuery 导航插件和教程【下篇】
  6. (二叉树创建+查找)精灵邮差
  7. ffplay.exe操作方式
  8. 面试突击41:notify是随机唤醒吗?
  9. 区块链教程Fabric1.0源代码分析流言算法Gossip服务端一兄弟连区块链教程
  10. [转] Node.js 服务端实践之 GraphQL 初探
  11. MindManager模板百度云下载分享教程
  12. 前端使用 video标签 设置 autoplay 无法自动播放
  13. windows虚机使用IIS服务搭建ftp
  14. 42招健脑秘笈——必看
  15. 打开Windows自带的画图工具
  16. java 吸血鬼数字_用java求吸血鬼数字 | 学步园
  17. 动词的时态(Les temps du verbe )
  18. [kubernetes]-通过initcontainer监控job是否完成
  19. 中断函数实现按键控制LED灯亮灭
  20. Unity3d C#实现程序的加密狗验证功能(PC)

热门文章

  1. 阿里官宣AI框架大牛贾扬清加盟,任职技术VP
  2. 逆天的GPT-2居然还能写代码(但OpenAI却被无情吐槽)
  3. “跨国视频造假窝点”曝光!这个大规模数据集,帮AI揪出99%换脸视频
  4. 不只有BERT!盘点2018年NLP令人激动的10大想法
  5. 保卫Google!刻不容缓
  6. Uber无人车安全员之困:这是一份机械、枯燥、影响心理的工作
  7. 小米高管:已投大量精力研发手机AI芯片,造不造还没定
  8. 过程、性能基线、性能模型与目标之间的关系
  9. Item-Based Collaborative Recommender System
  10. Cocos2d-X开发中国象棋《三》開始场景的实现