ansible 基于ssh 快速上手(python)没有限制语言(bash,python,perl,ruby)Fedora ,rackspace,evernote在用
saltstack (c/s)架构 python
puppet (c/s)架构 Google在用 ruby语言 (master ,node)
chef (c/s)架构 ruby (workstation开发,server,node ) 须要git,有web uinode
若是你是新手,就不要犹豫了,ansible是你最好的选择,本人菜鸟一个。废话少说,开始安装!python
实验环境:git
192.168.3.190 web
192.168.3.191apache
192.168.3.192vim
192.168.3.193ruby
1)配置ssh免密码登录bash
root@debian:~# ssh localhost架构
root@debian:~# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsassh
root@debian:~# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
root@debian:~# scp -r /root/.ssh 其余机器:/root
root@debian:~# chmod 600 /root/.ssh/authorized_keys
接下来:
2)root@debian:~# apt-get install ansible
root@debian:~# ansible --version
ansible 1.7.2
3)Ansible配置
a) 主机定义:
root@debian:~# vim /etc/ansible/hosts
[local]
192.168.3.190 能够是IP或主机名;
[other]
192.168.3.191
192.168.3.192
192.168.3.193
在这里,我定义了两个组,简单说一下,一个主机能够有多个组,建议组名好记一些,由于测试要用。固然你也能够看文件里面的注释。
b)测试
语法ansible <host-pattern> [options]
ansible <pattern_goes_here> -m<module_name> -a <arguments>
root@debian:~# ansible other -m ping
192.168.3.192 | success >> {
"changed": false,
"ping": "pong"
}
192.168.3.191 | success >> {
"changed": false,
"ping": "pong"
使用ping测试,以上显示成功,能够继续其余操做(若是你不懂ping,神仙也救不了你啦)
常见命令选项:
-m 模块名
-a 参数
-s是此用户sudo无需输入密码
注意:命令有挺多的,只列举了几个经常使用的。
我用ansible的须要是,老大有的时候让我去改配置文件或者上传点东西太浪费时间啦,我不能一台台机器去ssh吧,如今不流行devops嘛!若是你不懂什么意思,仍是去多看看书吧,虽然我也不懂!
3)安装服务(能够用playbook):
root@debian:~# ansible local -a 'apt-get -y install softname'
root@debian:~# ansible all -m command -a "apt-get -y install softname"
命令执行的结果是同样,目前看,单引号和双引号没什么区别,但没有是不行的。
4)文件管理模块-file
主要用来设置文件、连接、目录的属性,或者移除文件、连接、目录,不少其余的模块也会包含这种做用(简单演示怎么用,上手快,其余的细节还需本身去领悟)
##远程拷贝文件----COPY
ansible other -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ owner=root group=root mode=0644"
##删除远程的文件
ansible other -m file -a "dest=/tmp/ansible.cfg state=absent mode=0644" 删除远程的目录
说明:(1)State:如果是目录不存在,那么会建立目录;若是是文件不存在,那么不会建立文件;若是是link,那么软连接会被建立或者修改;若是是absent,那么目录下的全部文件都会被删除,若是是touch,会建立不存在的目录和文件
(2)copy:
backup:在覆盖以前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代“src”,能够直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,若是源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归设定目录的权限,默认为系统默认权限
force:若是目标主机包含该文件,但内容不一样,若是设置为yes,则强制覆盖,若是为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:全部的file模块里的选项均可以在这里使用
src:被复制到远程主机的本地文件,能够是绝对路径,也能够是相对路径。若是路径是一个目录,它将递归复制。在这种状况下,若是路径使用“/”来结尾,则只复制目录里的内容,若是没有使用“/”来结尾,则包含目录在内的整个内容所有复制,相似于rsync。
5)用playbook安装服务:
root@debian:~# cat apache2.yml
---
- hosts: other
tasks:
- name: Install apache2 web server
apt: pkg=apache2 state=installed update_cache=true
接下来执行playbook
root@debian:~# ansible-playbook apache2.yml
注意事项:YAML 还有一个小的怪癖. ansible的 YAML 文件通常开始行都应该是 --- 这是 YAML 格式的一部分, 代表一个文件的开始.(本人试验过,能够去掉不写的!)
列表中的全部成员都开始于相同的缩进级别, 而且使用一个 "- " 做为开头(一个横杠和一个空格):
一个字典是由一个简单的 键: 值 的形式组成(这个冒号后面必须是一个空格):
总结:第一天学习ansible,把学习的过程记录下来!稍后会继续学习其余模块。
有没有以为自动化很爽!!!