设为首页 收藏本站
查看: 4363|回复: 1

[经验分享] ansible的使用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-17 09:33:18 | 显示全部楼层 |阅读模式
                      ansible的介绍及使用
一、ansible 模块名                              说明

file                                                用于配置文件属性
yum                                             用于管理软件包
cron                                            配置计划任务
copy                                            复制文件到远程主机
command                                  在远程主机上执行命令
shell/raw                                     类似于command模块,支持管道与通配符
user/group                                 配置用户/用户组
service                                         用于管理服务
ping                                            检测远程主机是否存活
setup                                           远程主机基本信息
mount                                         配置挂载点

二、file 模块
参数                                     说明
group                               定义文件/目录的所属组                           
owner                               定义文件/目录的所属人
mode                                定义文件/目录的权限
path                                  定义文件/目录的路径
recurse                             递归设置目录的属性  类似于-R的设置
                                         定义文件的状态
                                          directory:如果目录不存在,创建目录
state                                  touch:如果文件不存在,创建文件
                                          link:创建软连接
                                           hard:创建硬链接
                                           absent:删除文件或目录
eg:
1、创建目录
ansible  all -m file -a "path=/root/20150701 state=directory"
2、创建文件
ansible all -m file -a "path=/root/20150701/test.txt  state=touch"   
3、删除文件
ansible all -m file -a "path=/root/20150701/test.txt state=absebt"                          
4、创建软链接
ansible all -m file -a "src=/etc/passwd desk=/root/ansible/passwd state=link"

三、copy 模块
参数                                    说明
src                                   源文件/目录路径
desk                                目标路径
backup                           覆盖之前,是否备份文件
owner                             设定文件/目录的所属人
group                             设定文件/目录的所属组
mode                              设定文件/目录的权限
1、拷贝文件至远程主机
ansible  all -m copy -a "src=/root/20150701/test.txt desk=/root/ansible owner=root group=root mode=0755"
2、拷贝新文件至远程主机,且备份
ansible all -m copy -a "src=/root/20150701/test.txt desk=/root/ansible backup=yes" 远程文件覆盖,且备份

四、command 模块
参数                            说明
creates                    跟文件名,当该文件存在,则命令不执行
chdir                       在执行命令之前,切换到相关目录
removes                 跟文件名,当该文件不存在,则该命令不执行
1、常规用法
ansible all -m command -a "uptime"
2、特定参数 chdir
ansible all -m command -a "chdir=/root/ansible ls"
3、特定参数 creates
ansible all -m command -a "creates=/root/ansible/2015.txt uptime" uptime 命令会被跳过,因为2015.txt 文件存在
4、特定参数 removes
ansible all -m command -a "removes=/root/ansible/2015.txt uptime" 与creates相反,文件存在,则命令执行

五、cron 模块
参数                            说明

bachup                    对远程主机上的原任务计划内容修改之前做备份
mimute                    分钟(0-59,*,*/2,……)
hour                         小时(0-23,*,*/2,……)
day                           日(1-31,*,*/2,……)
month                      月(1-12,*,*/2,……)
weekday                   周(0-7,*,……)
name                        该任务的描述
job                            要执行的任务,依赖于state=present
special_time            指定什么时候执行,参数:\reboot,yearly,annually,monthly,weekly,daily,hourly
state                         确认该任务计划是创建(present)还是删除(absent)
user                          以哪个用户的身份执行
eg1:每天5 点30 分执行ls 命令(默认state=present)
ansible all -m cron -a "name='list files in ansible_dir' minute=30 hour=5 job='ls -l
/root/ansible'"
eg2:执行备份操作
ansible all -m cron -a "name='list files in ansible_dir' backup=yes minute=10
hour=2 job='uptime' "
eg3://删除指定计划任务
ansible all -m cron -a "name='list files in ansible_dir' state=absent"

六、yum 模块
参数名                                          说明
enablerepo                               启用指定yum 源
name                                    要进行操作的软件包的名字,也可以传递一个url 或者一个本地的rpm 包的路径, 安装软件                        组也是由@开头。
state                                      定义软件包状态
                                                present:安装
                                                absent:删除
                                                latest:安装最新的
                           创建repo 文件
//传输repo 文件到远程主机
ansible all -m copy -a "src=/root/bruce/centos.repo dest=/etc/yum.repos.d/"
//启用repo,安装httpd 包
ansible all -m yum -a "enablerepo=centos6u5 name=httpd state=present"
http 包
http 包安装完毕
//直接安装网络rpm 包,安装nginx 源repo 包
ansible all -m yum -a \"name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6
.ngx.noarch.rpm state=present"
nginx 的repo 包安装完毕
//安装nginx 软件包
ansible all -m yum -a "name=nginx state=present"

七、service 模块
通过yum 安装完软件包后,需要做的就是配置文件以及启动服务了,那么service提供的就是启动服务的功能。
参数名                                   说明
arguments                        给命令行提供一些选项
enabled                             是否开机启动:yes|no,类似于chkconfig
name                                 服务名称
runlevel                             运行级别
sleep                               如果执行restarted,stop 跟start 的间隔
state                               对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
// 启动上面安装的httpd 服务
ansible all -m service -a "name=httpd state=started enabled=yes"
httpd 启动成功
// 启动指定路径的服务
ansible all -m service -a "name=foo pattern=/usr/bin/foo state=started"
//指定重启eth0 操作
ansible all -m service -a "name=network state=restarted args=eth0"

八、user 模块
参数名                     说明
home                  指定家目录,需要createhome 为yes
group                 指定主用户组
groups                指定从用户组
uid                      用户UID
password            设置用户密码(需要为hash 密码值)
name                    用户名
createhome          是否创建家目录
system                 是否创建为系统用户
remove               当state=absent 时,删除家目录
state                  创建或删除用户
shell                  指定用户shell 环境
注意:password 这个功能有些问题,通过测试发现其存在字符限制,hash 密码
不能全部被获取,仅能获取部分字符插入至远程主机的/etc/shadow 文件中。
// 创建组-bruce
ansible all -m group -a "name=bruce state=present"
// 创建用户jason,属于bruce 组,家目录为:/home/memcached
ansible all -m user -a \
"name=jason group=bruce createhome=yes home=/home/memcached shell=/bin/bash
"
查看用户相关属性
//删除用户及其家目录
ansible all -m user -a "name=jason state=absent remove=yes"
//列出所有的ansible 模块
ansible-doc -l
//模块参数查询
ansible-doc -s 模块名
以上相关模块介绍是平时使用较多的模块,当然ansible 拥有大量的其他模块供
用户使用,可以在后期的实际应用场景中探索并补充。

九、进阶用法

    如果ansible 只能通过上面的方式完成任务,那也不算什么自动化了,它的强大
之处在于ansible 可以将所有的操作放置与playbooks 这边的功能里面,playbook
被翻译为剧本,在这里听起来感觉蛮奇怪的,其实想想也是没有问题,剧本就是
定义了主人公,情节等流程化的东西,playbooks 就是将不同的任务整理在一起,
然后通过ansible 调用后自动执行。类似于将传统的linux 命令整合在一起,形成
shell 脚本。
1. playbook 介绍
    playbook 是由一个或多个“play”组成的列表。play 的主要功能在于将事先归并为
一组的主机装扮成事先通过ansible 中的task 定义好的角色。从根本上来讲,所
谓task 无非是调用ansible 的一个module。将多个play 组织在一个playbook 中,
即可以让它们联合起来按事先编排的机制完成某一任务。
2. playbook 简单示例
- hosts: mfs_node
user: root
19
vars:
- motd_warning: 'WARNING: Use by ACME Employees ONLY'
tasks:
- name: setup a MOTD
copy: dest=/etc/motd content="{{ motd_warning }}"
notify: say someting
handlers:
- name: say someting
command: echo "copy OK"
以上示例主要分为四个部分
Target section
定义将要执行playbook 的远程主机组
Variable section
定义playbook 运行时需要使用的变量
Task section
定义将要在远程主机上执行的任务列表
Handler section
定义task 执行完成以后需要调用的任务
步骤参数说明:
Target section
参数名 说明
hosts 定义远程的主机组
user/remote_user 执行该任务组的用户
sudo 如果设置为yes,执行该任务组的用户在执行任务的时候,获
取root 权限
sudo_user 如果你设置user 为tom,sudo 为yes,sudo_user 为jerry,则tom
用户则会获取jerry 用户的权限
connection 通过什么方式连接到远程主机,默认为ssh
gather_facts 除非你明确说明不需要在远程主机上执行setup 模块,否则默
认会自动执行。如果你确实不需要setup 模块所传递过来的变
量,你可以启用该选项
Variable section
vars 直接定义参数值
vars_files 调用定义了参数变量的文件
vars_prompt
Task section
方式1 - name: install apache
action: yum name=httpd state=installed
方式2 - name: configure apache
copy: src=files/httpd.conf dest=/etc/httpd/conf/httpd.conf
方式3 - name: restart apache
service:
name: httpd
state: restarted
20
Handler section
tasks:
- name: template configuration file
template: src=template.j2 dest=/etc/foo.conf
notify:
- restart memcached
- restart apache
handlers:
- name: restart memcached
service: name= memcached state=restarted
- name: restart apache
service: name=httpd state=restarted
3. 简单案例
- hosts: all
user: root
vars:
tasks:
- name: install memcached
yum: name=memcached state=installed
- name: set memcached size
set_fact: memcached_size="{{ ansible_memtotal_mb / 4}}"
- name: copy configurations
template: src=files/memcached.j2 dest=/etc/sysconfig/memcached
notify:
- start memcached
handlers:
- name: start memcached
service: name=memcached state=started enabled=yes
调用set_fact 定义的参数
ansible-playbook memcached_install.yml //执行改yml 作业

                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-87529-1-1.html 上篇帖子: Ansible中的tags使用 下篇帖子: 自动化运维工具Ansible之Playbooks基础应用
累计签到:102 天
连续签到:1 天
发表于 2015-7-17 17:11:34 | 显示全部楼层
不错,够详细!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表