内容简介:Ansible 是一款自动化管理,官网官网说他是”Ansible is Simple IT Automation”–简单的自动化 IT 工具,他主要是让我们自动化部署应用,自动化管理配置项,自动化的持续交付,自动化的云服务管理。比如说你有一个任务,需要在1000台线上服务器配置缓存系统 ats,那么你不可能一台 一台的ssh 登陆服务器去安装配置,这样的效率估计也只能看着公司倒闭了。所以,需要借助一些自动化工具批量化的部署实现安装、更新等操作。类似于 cobbler 自动 PEX 安装机器。
Ansible 是一款自动化管理,官网 https://www.ansible.com/
官网说他是”Ansible is Simple IT Automation”–简单的自动化 IT 工具,他主要是让我们自动化部署应用,自动化管理配置项,自动化的持续交付,自动化的云服务管理。
比如说你有一个任务,需要在1000台线上服务器配置缓存系统 ats,那么你不可能一台 一台的ssh 登陆服务器去安装配置,这样的效率估计也只能看着公司倒闭了。所以,需要借助一些自动化 工具 批量化的部署实现安装、更新等操作。类似于 cobbler 自动 PEX 安装机器。
如何安装
安装 ansible 你可以通过 GitHub 的源码编译安装,也可以通过 pip 去安装,因为 ansible 是用 python 写的。此外,ansible 被 redhat 收购,所以如果是 redhat7 或者 Fedora 系统的话,可以直接:
yum -y install ansible
如果是 Ubuntu
sudo apt-get install ansible
或者
pip install ansible
如何学习
一般学习一个新工具,通常是去看官网的文档,当然国内也有一些机构翻译了中文文档比如马哥团队翻译的 Ansible 中文权威指南
如何使用
基本的使用,可以参考此前写的ansible 使用,看这里
Playbooks
Playbooks 是 Ansible的配置,部署,编排语言.他们可以被描述为一个需要希望远程主机执行命令的方案,或者一组IT程序运行的命令集合.
如果 Ansible 模块你是工作室中的工具,那么 playbooks 就是你设置的方案计划.
在基础层面, playbooks 可以被用来管理用于部署到远程主机的配置文件.在更高的层面上,playbooks 可以依次对多层式架构上的服务器执行上线包括滚动更新在内的操作并可以将操作委托给其他主机包括在此过程中发生的与监视服务器,负载均衡服务器的交互操作在内.
虽然这里讲发很多,但是不需要立刻一次性全部学完.你可以从小功能开始,当你需要的时候再来这里找对应的功能即可.
执行playbook
ansible-playbook deploy.yml
语法
最基本的playbook脚本分为三个部分:
1.在什么机器上以什么身份执行
- hosts
- users
…
2.执行的任务是都有什么 - tasks
3.善后的任务都有什么 - handlers
deploy.yml文件
--- - hosts: webservers vars: http_port: 80 max_clients: 200 user: root tasks: - name: ensure apache is at the latest version yum: pkg=httpd state=latest - name: write the apache config file template: src=/srv/httpd.j2 dest=/etc/httpd.conf notify: - restart apache - name: ensure apache is running service: name=httpd state=started handlers: - name: restart apache service: name=httpd state=restarted
主机和用户
key | 含义 |
---|---|
hosts | 为主机的IP,或者主机组名,或者关键字all |
user | 在远程以哪个用户身份执行。 |
become | 切换成其它用户身份执行,值为yes或者no |
become_method | 与became一起用,指可以为‘sudo’/’su’/’pbrun’/’pfexec’/’doas’ |
become_user | 与bacome_user一起用,可以是root或者其它用户名 |
脚本里用became的时候,执行的playbook的时候可以加参数–ask-become-pass,则会在执行后提示输入sudo密码。
ansible-playbook deploy.yml --ask-become-pass
Tasks任务列表
- tasks是从上到下顺序执行,如果中间发生错误,那么整个playbook会中止。你可以改修文件后,再重新执行。
- 每一个task的对module的一次调用。使用不同的参数和变量而已。
- 每一个task最好有name属性,这个是供人读的,没有实际的操作。然后会在命令行里面输出,提示用户执行情况。
语法
task的基本写法:
tasks: - name: make sure apache is running service: name=httpd state=running
其中name是可选的,也可以简写成下面的例子。
tasks: - service: name=httpd state=running -
写name的task在playbook执行时,会显示对应的名字,信息更友好、丰富。写name是个好习惯!
TASK: [make sure apache is running] ************************************************************* changed: [yourhost]
没有写name的task在playbook执行时,直接显示对应的task语法。在调用同样的module多次后,不同意分辨执行到哪步了。
TASK: [service name=httpd state=running] ************************************** changed: [yourhost]
参数的不同写法
最上的代码展示了最基本的传入module的参数的方法 key=value
tasks: - name: make sure apache is running service: name=httpd state=running
当需要传入参数列表太长时,可以分隔到多行:
tasks: - name: Copy ansible inventory file to client copy: src=/etc/ansible/hosts dest=/etc/ansible/hosts owner=root group=root mode=0644
或者用yml的字典传入参数
tasks: - name: Copy ansible inventory file to client copy: src: /etc/ansible/hosts dest: /etc/ansible/hosts owner: root group: root mode: 0644
TASK的执行状态
task中每个action会调用一个module,在module中会去检查当前系统状态是否需要重新执行。
如果本次执行了,那么action会得到返回值changed;
如果不需要执行,那么action得到返回值ok
module的执行状态的具体判断规则由各个module自己决定和实现的。例如,”copy” module的判断方法是比较文件的checksum,代码如下:
https://github.com/ansible/ansible-modules-core/blob/devel/files/copy.py状态示例
以一个copy文件的task为例子:
tasks: - name: Copy the /etc/hosts copy: src=/etc/hosts dest=/etc/hosts
第一次执行,它的结果是这个样子的:
TASK的状态是changed
第二次执行是下面这个样子的:
TASK的状态是ok,由于第一次执行copy_hosts.yml的时候,已经拷贝过文件,那么ansible目标文件的状态避免重复执行.
下面我更改vm-rhel7-1的/etc/hosts, 再次执行看看:
以上所述就是小编给大家介绍的《自动化工具--Ansible使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。