使用Ansible自动化您的(云或者本地)机器
Ansible任务执行多次和执行一次的效果一样。bash脚本没有很多额外的编码,运行多次通常不安全。而Ansible的任务根据“事实”(收集的系统和环境信息)(“上下文”)再运行。
设计原则
- 异常简单的设置过程和一个最小的学习曲线。
- 管理机器非常快速,并且是同步的。
- 避免自定义代理和开放多余的端口。通过利用现有的SSH守护进程进行代理。
- 对于基础设施的描述,既面向机器,也易于人来阅读。
- 注重安全性和易于审计/检查/重写内容。
- 立即管理新的远程机器,无需引导任何软件。
- 允许使用任何动态语言进行模块开发,而不仅仅是Python。
- 可用作非root用户。
Ansible默认通过SSH协议管理机器。
Ansible安装完成后,不会添加数据库,并且不会有守护进程启动或继续运行。你只需要把它安装在一台机器上(一台笔记本电脑也可以),它可以从这个中心点管理整个远程机器群。当Ansible管理远程机器时,远程机器上不必安装软件,也不需要在这些机器上运行软件,所以当远程机器要迁移到新版本时,不需要更新Ansible。
Playbooks可以被认为是Ansible的主要概念。
Playbooks是Ansible的配置,部署和编排语言。它们可以描述您希望远程系统执行的策略,也可以描述一般IT过程中的一系列步骤。
基本上,可以使用Playbooks来管理远程机器的配置和部署。在更高级的层次上,它们可以对涉及滚动更新的多层次部署进行排序,并且可以将操作委派给其他主机,并且可以与监控服务器和负载平衡器进行交互。
手册被设计成人类可读的,并以基本的文本语言开发。
手册用YAML(类似于标准通用标记语言的子集XML的数据描述语言)语言写成,这种语言的语法,被故意的设计成不像编程语言或脚本,而是一个配置或一个过程的模型。
在我的例子中,我设置了两个带有Vagrant(一个基于Ruby的工具,用于创建和部署虚拟化开发环境)的虚拟机。对于第一个,我已经安装了Ansible,而第二个中,我进行了一些配置。
像我以前的文章中那样配置多机系统。
多机系统的Vagrantfile:
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.define "machine1" do |node1|
node1.vm.network "private_network", ip: "192.168.0.101"
node1.vm.hostname = "machine1"
node1.vm.provider "virtualbox" do |v|
v.memory = 1024
v.cpus = 1
end
end
config.vm.define "machine2" do |node2|
node2.vm.network "private_network", ip: "192.168.0.102"
node2.vm.hostname = "machine2"
node2.vm.provider "virtualbox" do |v|
v.memory = 1024
v.cpus = 1
end
end
end
在machine1上,使用以下命令安装Ansible:
#vagrant ssh machine1
如果要求输入密码,请输入“vagrant”。
安装Ansible的命令:
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible / ansible
sudo apt-get update
sudo apt-get install ansible
编辑/ etc / ansible / hosts并添加IP 192.168.0.101和192.168.0.102。
为检查一切是否正常,运行以下命令:
ansible all -m ping -s -k -u vagrant
输出应该是:
machine2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
第一个Playbook是在第二台机器上安装Java和Tomcat。
Playbook-tomcat.yml:
- hosts: machine2
vars:
http_port: 80
max_clients: 200
remote_user: vagrant
tasks:
- name: updates a server
apt: update_cache=yes
- name: upgrade a server
apt: upgrade=full
- name: install java
apt: name=default-jdk state=latest
- name: install tomcat
apt: name=tomcat7 state=latest
- name: make sure apache is running
service: name=tomcat7 state=started
ansible-playbook playbook-tomcat.yml -sudo -u vagrant --ask-pass
安装完成后,访问Vagrant ssh machine2并键入java -version。
如果一切正常,你应该看到安装的版本。
Ansible仅安装在一台机器上,可以执行命令在其他机器上安装工具或进行操作,这些操作包括对Playbook进行版本控制,虽然这也可以再GitHub上进行。
- 基于机器学习的文本情感极性分析
- Selenium2+python自动化43-判断title(title_is)
- hihoCoder #1142 : 三分求极值
- 容斥原理
- TensorFlow:TensorBoard可视化
- Codeforces 768B Code For 1
- 【干货】深入理解自编码器(附代码实现)
- SlopOne推荐算法(附Python源码)
- 后缀数组(一堆干货)
- POJ 1741 Tree(树的点分治,入门题)
- hihoCoder 1039:字符消除(字符串处理)
- 2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)
- hihoCoder 1051 补提交卡(贪心,枚举)
- LCA 最近公共祖先
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法