码迷,mamicode.com
首页 > 其他好文 > 详细

Ansible基础

时间:2017-11-17 23:28:36      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:linux ansible

介绍:

ansible是基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点

具有批量系统配置、批量程序部署、批量运行命令等功能。

是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。


操作:


以下通过实际演练来更好的理解ansible的工作原理

使用三台机器组建ansible使用环境

注意:三台主机要网络同步时间,101主机作为ansible控制机,106和107主机作为普通服务器

yum -y install  ansible

#安装ansible

基于密钥进行ssh认证

配置/etc/ansible/hosts

ssh-keygen  -t rsa -P ‘‘

for i in 106 107;do ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.$i ;done

ansible -help
-m   指定调用的模块
-a   每个模块都有自己的专有的参数,指定此模块参数
-f   指定每批处理多少台主机,默认5台
#更多的参数可自行了解
eg:
ansible all --list-hosts   #列出当前处于同一模式的所有主机
ansible webservers --list-hosts
ping模块:

ansible all -m ping                 #测试ansible到各个服务器的连通性
192.168.1.106 | SUCCESS => {         #状态是成功的,即连通性是没问题
    "changed": false,           #修改状态是失败,说明我们未做任何修改操作
    "ping": "pong"            #ansible发出ping验证,对方返回pong告知连接正常
}
192.168.1.107 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
ansible-doc  -h   #查看ansible文档的帮助信息
ansible-doc  -l      #列出ansible支持的所有模块信息,如上文只能中的ping模
ansible-doc -s command
#查看指定模块的参数信息,command是一种常用的模块,默认不指定模块时就是使用command

command模块:

[root@node1 ~]#ansible 192.168.1.106 -m command -a ‘pwd chdir=/app‘
#在执行命令pwd之前,先cd进入chdir指定的目录,所以结果显示目录是/app而不是root的家目录
#-m指定模块,-a指定参数(基本都是键值对),只是这里的参数实际上是两台命令一个是pwd,一个是chdir,而这两个命令又有先后之分

ansible 192.168.1.106 -m command -a ‘mkdir dir  chdir=/app creates=dir‘
#创建目录dir,creates表示如果dir已经存在就不再执行mkdir操作,直接跳过。此过程实现幂等性
#幂等:执行一次和执行多次的结果都是一样的
#creates表示指定路径文件不存在才执行指令,而removes则相反,表示指定路径文件存在才执行指令
#creates和removes含义相反,注意区分,而且他们都是针对指定目录下的文件而不针对用户或进程操作

command模块是不能是被shell语法的,所有在用到如bash类的shell时可以使用shell模块
ansible all -m shell -a "echo centos| passwd --stdin user1"   
#shell模块与command模块基本相同,只是此模块支持shell类型的语法
#如果换成command模块,则结果是echo后的内容全部作为字符串输出,即command是不识别管道和passwd等shell语言的

user和group模块:

group模块:
ansible webservers -m group -a ‘name=group1 system=yes  state=present‘
#使用group组模块,向webservers中创建组gruop1,并且是系统组,present是创建此组的含义,absent是删除此组的意思
192.168.1.106 | SUCCESS => {
    "changed": true, 
    "gid": 983, 
    "name": "group1", 
    "state": "present", 
    "system": true
}
#组id、组名称、状态、系统组,操作成功

user模块:
ansible webservers -m user -a "name=tomm groups=group1 state=present uid=20000 shell=/bin/csh"
#创建tomm用户,指定辅助组、uid和shell类型,创建present,
192.168.1.106 | SUCCESS => {   #上述操作成功
    "changed": true, 
    "comment": "", 
    "createhome": true,      #创建家目录
    "group": 20000,          #
    "groups": "group1", 
    "home": "/home/tomm",    #未指定用户家目录,则采用默认
    "name": "tomm", 
    "shell": "/bin/csh", 
    "state": "present", 
    "system": false,   #表示不是系统用户
    "uid": 20000
}
#此时webservers组内的成员都创建了用户tomm

copy模块:

将文件复制到远程位置
ansible webservers -m copy -a ‘src=/root/aaa dest=/app/ owner=daemon group=nobody mode=664‘ 
#使用copy模块,将本地的aaa文件复制到远程主机webservers组中,并修改用户/组和权限
192.168.1.106 | SUCCESS => {
    "changed": true, 
    "checksum": "7272fa0670a2f6d5cf0f5c1e6f31641fad625bf8", 
    "dest": "/app/aaa", 
    "gid": 99, 
    "group": "nobody", 
    "md5sum": "890b22b2dc6ff3f00f2374dce5634526", 
    "mode": "0664", 
    "owner": "daemon", 
    "secontext": "system_u:object_r:default_t:s0", 
    "size": 1493, 
    "src": "/root/.ansible/tmp/ansible-tmp-1510928315.78-72588321449487/source",  #生成临时文件,而不是直接将源文件复制过去
    "state": "file", 
    "uid": 2
}
#此时对aaa文件进行修改后在执行此操作,会发现changed字段依然是true,原因是aaa修改后的hash值改变了

ansible webservers -m copy -a "content=‘hello,ansible‘ dest=/app/bbb owner=daemon group=nobody mode=664"
#本机没有源文件而只是指定字符串,到目标webservers组,即远程主机上就会生成bbb文件,并设置成相应的所属用户权限等信息
#content只是修改文件内容,如果针对文件本身属性进行操作,可以使用file模块

file模块:



























本文出自 “a_pan” 博客,谢绝转载!

Ansible基础

标签:linux ansible

原文地址:http://panpangao.blog.51cto.com/10624093/1982922

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!