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

ansible的使用

时间:2015-07-16 22:45:36      阅读:717      评论:0      收藏:0      [点我收藏+]

标签:ansible

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 作业


ansible的使用

标签:ansible

原文地址:http://10534728.blog.51cto.com/10524728/1675272

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