ansible使用1.7 怎么使用ansible使用

& &前段时间把线上域名的代码存放目录,日志目录,以及常用(nginx,php,nodejs,golang等)服务的安装目录都调整到统一的路径下,为方便使用ansible进行批量管理。以下是我在本地测试环境部署安装ansible的文档,让大家参考以下:一、基础介绍1、简介是新出现的自动化运维工具,基于开发,集合了众多运维工具(、、、、)的优点,实现了批量系统配置、批量部署、批量运行命令等功能。是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是所运行的模块,只是提供一种框架。主要包括:、连接插件:负责和被监控端实现通信;、:指定操作的主机,是一个里面定义监控的主机;、各种模块核心模块、模块、自定义模块;、借助于插件完成记录日志邮件等功能;、:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。&2、总体架构650) this.width=650;" src="/upload/images//01.jpg" style="float:" title="image001.jpg" alt="wKiom1fjUl2D6WF3AAGRO6aIttg845.jpg-wh_50" />3、特性、:不需要在被管控主机上安装任何;、:无服务器端,使用时直接运行命令即可;、:基于模块工作,可使用任意语言开发模块;、,:使用语言定制剧本;、:基于工作;、:可实现多级指挥。&4、优点、轻量级,无需在客户端安装,更新时,只需在操作机上进行一次更新即可;、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;、使用编写,维护更简单,语法过于复杂;、支持。&5、任务执行流程&650) this.width=650;" src="/upload/images//02.jpg" title="image002.jpg" style="float:" alt="wKiom1fjUl6wVr6kAAJplxNnwd8681.jpg-wh_50" />说明:、以上内容大多是基于他人分享的基础上总结而来,学习借鉴之用;、本次安装基于 CentOS 7系统环境。&二、Ansible基础安装与配置1、Ansible基础安装(1)、centos7 默认已安装好 python2.7安装&(2)、setuptools模块安装&(3)、pycrypto模块安装&(4)、PyYAML模块安装&&(5)、Jinja2模块安装&&(6)、paramiko模块安装&&(7)、simplejson模块安装&(8)、ansible安装&2、Ansible配置(1)、SSH免密钥登录设置生成公钥私钥生成公钥和私钥写入信任文件(将分发到其他服务器,并在所有服务器上执行如下指令):&(2)、ansible配置&主机组定义&(3)、简单测试说明:第一次运行时,需要输入一下“”【进行公钥验证】,后续无需再次输入。650) this.width=650;" src="/upload/images//03.png" title="image003.png" style="float:" alt="wKioL1fjUl7QD794AAApapy23TU128.png-wh_50" />再次运行····················3、常用模块使用(1)、setup用来查看远程主机的一些基本信息&650) this.width=650;" src="/upload/images//05.png" title="image005.png" style="float:" alt="wKioL1fjUl_SArArAACPhfz_3Lo067.png-wh_50" />(2)、ping用来测试远程主机的运行状态650) this.width=650;" src="/upload/images//06.png" title="image006.png" style="float:" alt="wKioL1fjUl_S8OJaAAAlBVQ93J0668.png-wh_50" />(3)、file设置文件的属性相关选项如下::需要在两种情况下强制创建软链接,一种是不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项::定义文件目录的属组:定义文件目录的权限:定义文件目录的属主:必选项,定义文件目录的路径:递归设置文件的属性,只对目录有效:被链接的源文件路径,只应用于的情况:被链接到的路径,只应用于的情况::如果目录不存在,就创建目录:即使文件不存在,也不会被创建:创建软链接:创建硬链接:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间:删除目录、文件或者取消链接文件示例:远程文件符号链接创建&650) this.width=650;" src="/upload/images//07.png" title="image007.png" style="float:" alt="wKiom1fjUmCwka77AABrdCFYerE199.png-wh_50" />远程文件信息查看650) this.width=650;" src="/upload/images//08.png" title="image008.png" style="float:" alt="wKiom1fjUmDy3sP6AAApK0-qDdc513.png-wh_50" />(4)、copy复制文件到远程主机相关选项如下::在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项::用于替代“”,可以直接设定指定文件的值:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录:递归设定目录的权限,默认为系统默认权限:如果目标主机包含该文件,但内容不同,如果设置为,则强制覆盖,如果为,则只有当目标主机的目标位置不存在该文件时,才复制。默认为:所有的模块里的选项都可以在这里使用:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“”来结尾,则只复制目录里的内容,如果没有使用“”来结尾,则包含目录在内的整个内容全部复制,类似于。&示例:将本地文件“”复制到远程服务器&650) this.width=650;" src="/upload/images//09.png" title="image009.png" style="float:" alt="wKioL1fjUmHBIDBLAACWWHXps68661.png-wh_50" />远程文件信息查看&650) this.width=650;" src="/upload/images//010.png" title="image010.png" style="float:" alt="wKioL1fjUmGBN_lbAAApJqFp5oc103.png-wh_50" />(5)、command在远程主机上执行命令相关选项如下::一个文件名,当该文件存在,则该命令不执行:要执行的指令:在执行指令之前,先切换到该目录:一个文件名,当该文件不存在,则该选项不执行:切换来执行指令,该执行路径必须是一个绝对路径&示例:&650) this.width=650;" src="/upload/images//011.png" title="image011.png" style="float:" alt="wKiom1fjUmLxFwRlAAAoaRxKxpk923.png-wh_50" />(6)、shell切换到某个执行指定的指令,参数与相同。与不同的是,此模块可以支持命令管道,同时还有另一个模块也具备此功能:示例:先在本地创建一个脚本&将创建的脚本文件分发到远程650) this.width=650;" src="/upload/images//012.png" title="image012.png" style="float:" alt="wKiom1fjUmKR8eqqAACQugPbxNo557.png-wh_50" />远程执行&650) this.width=650;" src="/upload/images//013.png" title="image013.png" style="float:" alt="wKioL1fjUmKzSK4cAAAi_KwOiSQ593.png-wh_50" />(7)、更多模块其他常用模块,比如:service、cron、yum、synchronize就不一一例举,可以结合自身的系统环境进行测试。:系统服务管理:计划任务管理:包安装管理:使用同步文件:系统用户管理:系统用户组管理&(8)、一些概念补充playbook的组成:playbook是由一个或多个“play”组成的列表,可以让它们联同起来按事先编排的机制执行;所谓无非是调用的一个,而在模块参数中可以使用变量;模块执行是幂等的,这意味着多次执行是的,因为其结果均一致;&执行:中的各任务按次序逐个在中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。在顺序运行某时,如果中途发生错误,所有已执行任务都将回滚,因此,在修改后重新执行一次即可;&task组成:每个都应该有其,用于的执行结果输出,建议其内容尽可能清晰地描述任务执行步骤。如果未提供,则的结果将用于输出;&notify指定handler的执行机制:“”这个可用于在每个的最后被触发,在中列出的操作称为,仅在所有的变化发生完成后一次性地执行指定操作。&本文出自 “早起的鸟儿有虫吃” ,请务必保留此出处http://hejianping./5364Ansible中文权威指南 & 国内最专业的Ansible中文官方学习手册lixiaocheng18 的BLOG
用户名:lixiaocheng18
文章数:36
评论数:29
访问量:70615
注册日期:
阅读量:5863
阅读量:12276
阅读量:340271
阅读量:1042363
51CTO推荐博文
研究了一个多礼拜saltstack,这东西除了偶尔不稳定之外,感觉啥活都能干。楼主,趁着没事,再研究下ansible吧。打开ansible官网,两行文字映入眼帘。Ansible is the simplest way&to automate IT.意思是ansible是IT管理最简单的方法,简单归简单,不知道干的活有没有saltstack多了?。下面就开始楼主的ansible之旅了。ansible有啥特点呢?还是官网首页?最下面的三块,简单用楼主的中国式英语翻译下。简单,ansible自然的自动化语言与允许运维人员,开发者,和IT管理人员在很短的时间内完成自动化项目。无代理,默认使用SSH而不需要客户端。避免了额外的端口开启,提高安全性,避免不必要的管理,减少CPU的使用干的活多,ansible能干自动完成软件部署,配置管理,流程化管理,和cloud provisioning。开始看文档了先把ansible安装上去,再说别的吧楼主的系统的debian7,写一下debian7上面的安装方法。安装需要的工具。&aptitude&-y&&install&make&automake&autoconf&gcc&gcc-c++&libtools&python-dev&python-setuptools&pip安装ansible要用到的python模块aptitude&-y&install&paramiko&PyYAML&jinja2&httplib2下载ansible的最新版本。git&clone&git:///ansible/ansible.git编译&&安装cd&ansible
make&installOK安装完成了。完成之后,把ansible这个源码包里面的examples文件夹拷贝到/etc/ansible下。/etc/ansible是ansible是默认配置文件路径,但是编译安装的时候没有生成这个路径,我们需要手动建立。而examples文件夹下面是ansible默认的配置文件,及例子。root@ansible:~/ansible#&mkdir&/etc/ansible
root@ansible:~/ansible#&cp&-r&examples/*&/etc/ansible/
root@ansible:~/ansible#&ls&/etc/ansible/
ansible.cfg&&DOCUMENTATION.yml&&hosts&&issues&&playbooks&&scripts
root@ansible:~/ansible#这个ansible.cfg是ansible的主配置文件,装好之后随便看看。最新的版本是1.7root@ansible:~/ansible#&ansible&--version
ansible&1.7
root@ansible:~/ansible#&ansible&--help&&/dev/null
root@ansible:~/ansible#ansible管理主机,DNS域名,IP都可以,先弄个主机到到本地hosts里面root@ansible:~#&echo&&&"10.240.162.109&salt-master"&&&/etc/hosts楼主定义了一个主机名,一个IP到/etc/ansible/hosts里面。 /etc/ansible/hosts是默认的hostfile路径lixc@ansible:~$&grep&&&hostfile&&/etc/ansible/ansible.cfg&
hostfile&&&&&&&=&/etc/ansible/hosts
root@ansible:/home#&echo&-e&&"salt-master\n10.240.162.112"&&/etc/ansible/hosts检查一下lixc@ansible:/home$&cat&/etc/ansible/hosts&
salt-master
10.240.162.112OK,和salt一样先看看机器是否连通。楼主这里用的是ssh key。所以不需要加用户密码了。通了,返回了一个json格式的结果lixc@ansible:/home$&ansible&all&-m&&ping
salt-master&|&success&&&&{
&&&&"changed":&false,&
&&&&"ping":&"pong"
10.240.162.112&|&success&&&&{
&&&&"changed":&false,&
&&&&"ping":&"pong"
}注意这个地方是有个坑的,由于ansible执行的时候需要把临时模块拷贝到客户端,而默认的拷贝方式是通过tftp来的方式拷贝的,如果你的客户端没有装sftp,那么执行ansible会出错的。lixc@salt-master:~$&dpkg&-l&sftp
dpkg-query:&no&packages&found&matching&sft看到没,楼主的就没装sftp。那楼主用咋传的呢,用的是scp。 下面的这一行本来是注释起来的,把注释去掉就OK了lixc@ansible:~$&grep&"scp_if_ssh"&/etc/ansible/ansible.cfg&
scp_if_ssh&=&True还有个坑就是,即使装了tftp也不一定能用,咋回事呢,你的ssh要启用它才OK,看下面就知道了。root@salt-master:/home/lixc#&grep&"Subsystem"&&/etc/ssh/sshd_config&
Subsystem&sftp&/usr/lib/openssh/sftp-serverOK拷贝个文件玩玩,lixc@ansible:/home$&ansible&salt-master&-m&copy&-a&"src=./testfile&dest=/tmp"
salt-master&|&success&&&&{
&&&&"changed":&true,&
&&&&"dest":&"/tmp/testfile",&
&&&&"gid":&1000,&
&&&&"group":&"lixc",&
&&&&"md5sum":&"d41d8cd98f00b204e9800998ecf8427e",&
&&&&"mode":&"0644",&
&&&&"owner":&"lixc",&
&&&&"size":&0,&
&&&&"src":&"/home/lixc/.ansible/tmp/ansible-tmp-.42-67/source",&
&&&&"state":&"file",&
&&&&"uid":&1000
}查看一下,拷贝过去了没?lixc@ansible:/home$&ansible&salt-master&&-a&"ls&/tmp/testfile"
salt-master&|&success&|&rc=0&&&
/tmp/testfile下面说说ansible的工作流程吧,工作流程差不多是这样的ansible通过OPENSSH或者python的pramamiko连接客户端把ansible module推送到客户端。推送到客户端哪里的呢,请看lixc@ansible:~$&grep&"remote_tmp"&/etc/ansible/ansible.cfg&
remote_tmp&&&&&=&$HOME/.ansible/tmp
lixc@ansible:~$&ansible&salt-master&&-a&"ls&&~/.ansible"
salt-master&|&success&|&rc=0&&&
tmp3.通过ssh执行客户端上的ansible module4.执行完毕5.删除刚刚推送过去的ansible module本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
22:49:00 09:23:24Ansible初使用(1) - 推酷
Ansible初使用(1)
1、安装Ansible
# yum -y install epel-release
# yum -y install ansible
# ansible --version
ansible 2.1.0.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
2、设置SSH密钥
在Ansible服务端生成密钥,并且复制公钥到节点中。&
# ssh-keygen -t rsa
使用ssh-copy-id命令来复制Ansible公钥到节点中。
# ssh-copy-id -i root@172.16.74.244
3、为Ansible定义节点清单
编辑文件/etc/ansible/hosts 维护着Ansible要管理的服务器清单
# vim /etc/ansible/hosts
[docker-deploy]
172.16.74.244
172.16.74.245
4、尝试在Ansible服务端运行命令
使用ping检查‘docker-deploy’或者ansible节点的连通性
# ansible -m ping 'docker-deploy'
172.16.74.244 | SUCCESS =& {
&changed&: false,
&ping&: &pong&
172.16.74.245 | SUCCESS =& {
&changed&: false,
&ping&: &pong&
执行shell命令
例子1:检查Ansible节点的运行时间(uptime) ,由于这些模块均是默认的,因此可以不加-m 模块名称。
# ansible -m command -a &uptime& 'docker-deploy'
172.16.74.244 | SUCCESS | rc=0 &&
12:28:55 up
load average: 0.00, 0.01, 0.02
172.16.74.245 | SUCCESS | rc=0 &&
12:28:55 up
load average: 0.00, 0.01, 0.03
例子2:重定向输出到文件中
# ansible -m command -a &df -Th& 'docker-deploy' & ~/test.txt
# cat ~/test.txt
172.16.74.244 | SUCCESS | rc=0 &&
Filesystem
Used Avail Use% Mounted on
/dev/mapper/centos-root xfs
0% /dev/shm
0% /sys/fs/cgroup
172.16.74.245 | SUCCESS | rc=0 &&
Filesystem
Used Avail Use% Mounted on
/dev/mapper/centos-root xfs
0% /dev/shm
0% /sys/fs/cgroup
5、ansible常用模块
1、command:命令模块,默认模块,用于在远程执行命令,不支持变量。
ansible 192.168.139.128 -a 'date'
2、cron:计划任务模块:
ansible 192.168.139.128 -m cron -a 'minute=&*/10& job=&/bin/echo &hell&& name=&test job&
3、user:用户管理模块:
ansible webserver -m user -a 'name=&node1& '
4、copy:远程复制模块
a、复制文件至远程主机:
ansible webserver -m copy -a 'src=/etc/motd dest=/tmp/moth owner=root mode=640'
b、往远程主机文件写入内容:使用content代替src。&
ansible webserver -m copy -a 'content=&ansible test\n test& dest=/tmp/moth '
5、file:设置文件属性模块
a、设置指定文件属性:
ansible webserver -m file -a 'owner=mysql group=mysql mode=644 path=/etc/motd'
b、创建文件符号链接:
ansible webserver -m file -a ' path=/tmp/motd.link src=/etc/motd state=link'
6、ping:测试指定主机网络是否通讯:
ansible webserver -m ping
7、service:指定服务状态模块管理(必须保证远程主机事先安装好指定服务)
enabled:是否开机自动启动 true/false
name:服务名称
start:状态,取值为startd,stopd,restartd
ansible webserver -m service -a 'enabled=true name=httpd state=started'
8、shell模块: 在远程主机上运行命令,支持管道、变量等在使用复制命令时使用。
ansible webserver -m shell -a 'echo password |passwd –stdin node1'
9、script:将本地脚步复制到远程主机上并运行(注意本地主机脚步路径使用相对路劲)
ansible webserver -m script -a &test.sh&
10、yum:程序安装&
name:指定要安装的程序包,可以带上版本号 &state:preset,laster表示安装最新,absent卸载
ansible all -i ~/hosts -m yum -a 'name=libselinux-python state=present'
11、setup:收集远程主机的facts&
ansible hostname -m setup
每个被管理节点在接受并运行管理命令之前,会将自己主机相关信息,操作系统版本、ip地址等会报告给ansible主机&
用于将状态报告给ansible主机直接调用其变量。
12、查看模块帮助命令:
ansible-doc -l
ansible-doc -s Modules 查看支持模块
用来查看远程主机的一些基本信息
在正式运行playbook之前,可以使用–check 或 -C 选项来检测playbook都会改变哪些内容,显示的结果跟真正执行时一模一样,但不会真的对被管理的服务器产生影响
可以直接通过ansible-playbook命令来指定主机:
# ansible-playbook playbook.yml --limit webservers
如果想知道在执行playbook时,哪些主机将会受影响,则使用–list-hosts选项:
# ansible-playbook playbook.yml --list-hosts
-v:显示详细输出
-f 10:就是limit 10个任务并发
ansible-playbook user.yml -f 10
-i:指定inventory文件
当然,Ansible最核心的内容,还是诸如Playbook、roles以及jinja2模板文件的编写等,使其处理复杂的系统应用场景等
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致liangey 的BLOG
用户名:liangey
文章数:140
评论数:32
访问量:14259
注册日期:
阅读量:5863
阅读量:12276
阅读量:340271
阅读量:1042363
51CTO推荐博文
& & &上次写了个puppet安装的文档,今天给大家介绍另外一款自动化运维工具:ansible& & &ansible自动化工具只需要在一台机器上安装,其他机器不需要安装任何东西,这就是ansible比puppet, saltstck方便的地方。ansible的特点有哪些呢?下面为你逐个介绍:特点:(1)、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;(2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;(3)、使用python编写,维护更简单;(4)、基于SSH工作;(5)、支持文件同步并且对修改之前的文件进行备份,支持回滚;& & & & 好了,下面我们开始安装ansible:首先得准备好安装环境&&&&&我这里准备了两台机器:
&&&&&server1:&192.168.1.231&
&&&&&server2:&192.168.1.232一、安装准备#在server1上部署
#关闭防火墙iptables
service&iptables&stop
chkconfig&iptables&off
#并且修改SELINUX=disabled
sed&-i's#SELINUX=enforcing#SELINUX=disabled#g'&/etc/selinux/config
#使用yum安装python等软件
&yum&install&PyYAML.x86_64&python-paramiko.noarch&python-jinja2.x86_64&python-devel&Cy二、下载安装包#下载ansible和setuptools安装包
wget&https://pypi.python.org/packages/source/a/ansible/ansible-1.7.2.tar.gz
wget&https://pypi.python.org/packages/source/s/setuptools/setuptools-7.0.tar.gz三、解压安装软件#解压安装setuptools
tar&zfxv&setuptools-7.0.tar.gz
cd&setuptools-7.0
python&setup.py&install
#解压安装ansible
tar&fzvx&ansible-1.7.2.tar.gz&
cd&ansible-1.7.2
python&setup.py&build&
python&setup.py&install
mkdir&/etc/ansible
cp&examples/ansible.cfg&/etc/ansible/
cp&examples/hosts&/etc/ansible/
cd&..四、修改配置文件#配置ansible,我这里默认是不需要修改的
vi&/etc/ansible/ansible.cfg
hostfile&&&&&&&=&/etc/ansible/hosts
library&&&&&&&&=&/usr/share/ansible
remote_tmp&&&&&=&$HOME/.ansible/tmp
pattern&&&&&&&&=&*
forks&&&&&&&&&&=&5
poll_interval&&=&15
sudo_user&&&&&&=&ansible
#ask_sudo_pass&=&True
#ask_pass&&&&&&=&True
transport&&&&&&=&smart
remote_port&&&&=&22
module_lang&&&&=&C
#修改/etc/ansible/hosts文件
#local_Server
[localhost]
192.168.1.232&&&#server2的IP五、SSH通信设置#ssh互信
[root@ansibleserver&~]#ssh-keygen&Cb&1024&-t&rsa
#不断的回车即可
The&key's&randomart&image&is:
+--[&RSA&2048]----+
|&&&&o&&o.&&&&&&&&|
|&&&&&+=o&.&&&&&&&|
|&&&&&.=+*&o&&&&&&|
|&&&&&&o*&OE.&&&&&|
|&&&&&&&.S.=&&&&&&|
|&&&&&&&+..&&&&&&&|
|&&&&&&.&+&&&&&&&&|
|&&&&&&&.&&&&&&&&&|
|&&&&&&&&&&&&&&&&&|
+-----------------+#然后进入.ssh/目录下
[root@ansibleserver&~]#cd&.ssh/
cat&*.pub&&&authorized_keys
chmod&CR&700&.
#再通过scp命令将authorized_keys拷贝到客户端192.168.1.232
scp&authorized_keys&root@192.168.1.232:/root/.ssh/authorized_keys
#执行scp出现的错误以及解决方法:
scp:&/root/.ssh/authorized_keys:&No&such&file&or&directory
#解决方法:在客户端也直接生成一个ssh-keygen&Cb&124&Ct&rsa文件即可,这样的做法主要是生成.ssh/的目录,服务端才能够将公钥拷贝过去#测试互信是否成功
[root@ansibleserver&~]#&ssh&192.168.1.232
Last&login:&Tue&Mar&17&22:56:26&2015&from&192.168.1.231
#无需密码,直接登录成功!说明互信已经成功了!
[root@localhost&~]#&ifconfig&
eth1&&&&&&Link&encap:Ethernet&&HWaddr&08:00:27:41:28:38&&
&&&&&&&&&&inetaddr:192.168.1.232&Bcast:192.168.1.255&Mask:255.255.255.0六、模块测试模块命令-i&设备列表路径,可以指定一些动态路径
-f&并发任务数
-private-key&私钥路径
-m&模块名称
-M&模块夹的路径
-k&登陆密码
-K&sudo密码
-t&输出结果保存路径
-B&后台运行超时时间
-P&调查后台程序时间
-u&执行用户
-U&sudo用户
-l&限制设备范围
-s&是此用户sudo无需输入密码ping模块#使用ansible的ping模块测试client是否能够通信!
#注意:all&代表所有client的意思
[root@ansibleserver&~]#&ansible&all&-m&ping
192.168.1.232&|&success&&&&{
&&&&"changed":&false,&
&&&&"ping":"pong"
127.0.0.1&|&success&&&&{
&&&&"changed":&false,&
&&&&"ping":"pong"
[root@ansibleserver&~]#&ansible&all&-m&command&-a&"date"
192.168.1.232&|&success&|&rc=0&&&
Tue&Mar&17&23:06:43&EDT&2015
127.0.0.1&|&success&|&rc=0&&&
Tue&Mar&17&23:06:44&EDT&2015安装软件测试[root@ansibleserver&~]#&ansible&all&-m&command&-a&"yum&install&unzip&-y"
192.168.1.232&|&success&|&rc=0&&&
Loaded&plugins:&fastestmirror
Setting&up&Install&Process
Determining&fastest&mirrors
Installed:
&&unzip.x86_64&0:6.0-1.el6&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Complete!copy模块#拷贝文件到远程主机
相关选项如下:
backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代“src”,可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。实例:拷贝本地的/root/script目录所有内容到192.168.1.232的/tmp目录下
注意:因为script后面没有加/&,所以拷贝的是整个目录
ansible&192.168.1.232&-m&copy&-a&"src=/root/script&dest=/tmp/owner=root&group=root&mode=0644"
#拷贝成功的返回信息
192.168.1.232&|&success&&&&{
&&&"changed":&true,&
&&&"dest":&"/tmp/",&
&&&"src":&"/root/script"
#切换到192.168.1.232机器中查看
[root@localhost&~]#&ls&/tmp/script/
a.txt&&b.txt
#拷贝script目录的文件实例:
注意:这里的script后面是加了/&,所以只拷贝script目录下的文件
[root@ansibleserver&script]#&ansible&192.168.1.232&-m&copy&-a"src=/root/script/&dest=/tmp/script/&owner=root&group=root&mode=0644"
192.168.1.232&|&success&&&&{
&&&&"changed":&true,&
&&&&"dest":"/tmp/script/",&
&&&&"src":"/root/script"
}在192.168.1.232的script目录下查看内容
[root@localhost&script]#&ll
-rw-r--r--&1&root&root&0&Mar&17&23:38&a.txt
-rw-r--r--&1&root&root&0&Mar&17&23:38&b.txt
-rw-r--r--&1&root&root&0&Mar&1723:38&c.txt
-rw-r--r--&1&root&root&0&Mar&1723:38&d.txt
#backup参数:有yes|no两个选项
ansible&192.168.1.232&-m&copy&-a&"src=/root/script/&dest=/tmp/script/owner=root&group=root&mode=0644&backup=yes"
提示:例如,src和dest同时有个a.txt文件,如果在src修改了a.txt&&再执行copy的时候,dest就会生成一个备份
[root@localhost&script]#&ll
-rw-r--r--&1&root&root&12&Mar&18&03:09&a.txt
-rw-r--r--&1&root&root&&0&Mar&18&03:08&a.txt.@03:09~&
#因为a.txt被修改过了,所以生成了一个备份
[root@localhost&script]#&cat&a.txt&&#这里被修改过,然后copy过来的
hello&world
[root@localhost&script]#&cat&a.txt.\@03\:09~&#备份的a.txt默认没有内容file模块#使用file模块,更改文件的用户和权限
[root@ansibleserver&~]#&ansible&192.168.1.232&-m&file&-a&"dest=/tmp/a.txtmode=600"
#查看更改情况
[root@localhost&tmp]#&ll
-rw-------&&1&root&root&&&&0&Mar&17&23:38&a.txt
#创建目录,类似mkdir&Cp
[root@ansibleserver&~]#&ansible&192.168.1.232&-m&file&-a"dest=/tmp/to/c&mode=755&owner=root&group=root&state=directory"
#查看创建情况
[root@localhost&c]#&pwd
#删除文件或者目录
[root@ansibleserver&~]#&ansible&192.168.1.232&-m&file&-a"dest=/tmp/a.txt&state=absent"
192.168.1.232&|&success&&&&{
&&&&"changed":&true,&
&&&&"path":"/tmp/a.txt",&
&&&&"state":"absent"
#查看删除情况
[root@localhost&tmp]#&ll
-rw-r--r--&&1&root&root&&&&0&Mar&17&23:38&b.txt
drwxr-xr-x&&2&root&root&4096&Mar&1723:38&script
drwxr-xr-x&&3&root&root&4096&Mar&1723:53&to
-rw-------.&1&root&root&&&&0&Dec&2819:45&yum.logcron模块#注意:cron是为远程主机定义任务计划的
#批量定义远程主机上的定时任务
#首先我们在本地的/etc/ansible/目录下定义一个cron.yml文件
-&hosts:&192.168.1.232&&#远程主机IP
&&remote_user:&root&&&&#指定执行的用户
&&tasks:&&&&&&&&&&&&&&&&#任务
&&&&-&name:&cron&&&&&&&#任务名称
&&&&&&cron:&name='cp&file'&minute=1job='/usr/bin/tmp/script/test.sh'
提示:name&为注释名称,minute为执行任务的时间间隔,job为执行的脚本
#定义好之后,我们执行下ansible-playbook命令
[root@ansibleserver&ansible]#&ansible-playbook&cron.yml
PLAY&RECAP********************************************************************
192.168.1.232&&&&&&&&&&&&&&:ok=2&&&&changed=1&&&&unreachable=0&&&&failed=0
#出现ok=2&change=1,代表已经在远程机子上做好定时任务了
#在远程主机上查看:
[root@ansible-client&script]#&crontab&-l
#Ansible:&cp&file
1&*&*&*&*&/usr/bin/tmp/script/test.sh实例2:
目的:在指定节点上定义一个计划任务,每隔3分钟到主控端更新一次时间
命令:ansible&all-m&cron&-a&'name="custom&job"&minute=*/3&hour=*&day=*&month=*weekday=*&job="/usr/sbin/ntpdate&172.16.254.139"'synchronize模块#先声明下,使用rsync&模块,远程主机系统必须安装rsync&包,否则无法使用这个模块
#先给远程机装个rsync吧
[root@ansibleserver&~]#&ansible&192.168.1.232&-m&yum&-a&'name=rsyncstate=latest'
#再次验证下rsync是否安装成功
[root@ansibleserver&~]#&ansible&192.168.1.232&-a&"which&rsync"
192.168.1.232&|&success&|&rc=0&&&
/usr/bin/rsync
#看来没问题了!#看下使用的参数
[root@ansibleserver&~]#&ansible-doc&-s&synchronize
-&name:&Uses&rsync&to&make&synchronizing&file&paths&in&your&playbooks&quickand&easy.
action:&synchronize
archive&&&&&&&&&&&&&&&&#&是否采用归档模式同步,即以源文件相同属性同步到目标地址
checksum&&&&&&&&&&&&&&&#&是否效验
compress&&&&&&&&&&&&&&&#&是否压缩
copy_links&&&&&&&&&&&&&#&同步的时候是否复制连接
delete&&&&&&&&&&&&&&&&&#&删除源中没有而目标存在的文件
dest=&&&&&&&&&&&&&&&&&&#&目标地址
dest_port&&&&&&&&&&&&&&#&目标接受的端口
dirs&&&&&&&&&&&&&&&&&&&#&以非递归的方式传输目录
existing_only&&&&&&&&&&#&Skipcreating&new&files&on&receiver.
group&&&&&&&&&&&&&&&&&&#&Preservegroup
links&&&&&&&&&&&&&&&&&&#&Copysymlinks&as&symlinks.
mode&&&&&&&&&&&&&&&&&&&#&模式,rsync&同步的方式&PUSH\PULL
recursive&&&&&&&&&&&&&&#&是否递归&yes/no
rsync_opts&&&&&&&&&&&&&#&使用rsync&的参数
rsync_path&&&&&&&&&&&&&#&服务的路径(源码编译时需指定)
rsync_timeout&&&&&&&&&&#&Specify&a--timeout&for&the&rsync&command&in&seconds.
set_remote_user&&&&&&&&#&put&user@for&the&remote&paths.&If&you&have&a&custom&ssh&config&to&define&the&remote&userfor
src=\'#\'" /pre>实例:将ansible端/tmp/目录下的script同步到232机子的/tmp/目录下面
[root@ansibleserver&~]#&ansible&192.168.1.232&-m&synchronize&-a&'src=/tmp/scriptdest=/tmp/'&
192.168.1.232&|&success&&&&{
&&&&"changed":&true,&
&&&&"cmd":&"rsync--delay-updates&-FF&--compress&--archive&--rsh&'ssh&&-o&StrictHostKeyChecking=no'--out-format='&&CHANGED&&%i&%n%L'&\"/tmp/script\"\"root@192.168.1.232:/tmp/\"",&
&&&&"msg":"cd+++++++++&script/\n&f+++++++++&script/a.txt\n",&
&&&&"rc":&0,&
&&&&"stdout_lines":&[
&&&&&&&&"cd+++++++++script/",&
&&&&&&&&"&f+++++++++script/a.txt"
#注意:要想ansible端于远程端的文件保持一致,最好用delete=yes参数
因为,有时候在ansible的目录下删除了某个文件,若不加delete=yes参数的话,远程端的目录下仍然保留有旧的文件!服务管理#启动client的httpd服务
[root@ansibleserver&~]#&ansible&192.168.1.232&-m&service&-a"name=httpd&state=started"
192.168.1.232&|&success&&&&{
&&&&"changed":&true,&
&&&&"name":"httpd",&
&&&&"state":"started"
#注意:state的状态有:started&&&restarted&&&stoped
#client端查看情况
[root@localhost&~]#&netstat&-lntup|grep&httpd
tcp&&&&&&&&0&&&&&&0&:::80&&&&&&&&&&&&&&&&&&&&&&&:::*&&&&&&&&&&&&&&&&&&&&&&&&LISTEN&&&&&&1565/httpd收集系统信息#收集主机的所有系统信息
[root@ansibleserver&~]#&ansible&192.168.1.232&-m&setup
#收集系统信息并以主机名为文件名分别保存在/tmp/facts目录
[root@ansibleserver&facts]#&ansible&192.168.1.232&-m&setup&--tree/tmp/facts
[root@ansibleserver&facts]#&ll
-rw-r--r--&1&root&root&8656&Mar&18&00:25&192.168.1.232
#收集系统内存相关信息
[root@ansibleserver&~]#&ansible&192.168.1.232&-m&setup&-a'filter=ansible_*_mb'
192.168.1.232&|&success&&&&{
&&&&"ansible_facts":&{
&&&&&&&"ansible_memfree_mb":&299,&
&&&&&&&"ansible_memtotal_mb":&490,&
&&&&&&&"ansible_swapfree_mb":&2047,&
&&&&&&&"ansible_swaptotal_mb":&2047
&&&&"changed":&false
#收集网卡信息
[root@ansibleserver&~]#&ansible&192.168.1.232&-m&setup&-a'filter=ansible_eth[0-2]'playbook管理复杂任务& & 对于需反复执行的、较为复杂的任务,我们可以通过定义 Playbook 来搞定。Playbook 是 Ansible 真正强大的地方,它允许使用变量、条件、循环、以及模板,也能通过角色及包含指令来重用既有内容。下面我们来看看一些具体的实例。安装php软件实例#首先在/etc/ansible目录下建立一个php.yaml的文件
[root@ansibleserver&ansible]#&vim&php.yaml
-&hosts:&192.168.1.232&&#主机名,如果是全部主机,可以用all
&&remote_user:&root&&&&#指定执行操作的用户
&&tasks:&&&&&&&&&&&&&&&&#任务
&&&&-&name:&php&installing&&&#起个任务的名字
&&&&&&yum:&name=php&state=present&#利用yum模块,安装软件的包名为php
参数:present为安装&&absent为卸载
提示:注意对齐的格式,不然会出错
#用ansible-playbook&参数调用php.yaml
[root@ansibleserver&ansible]#&ansible-playbook&php.yaml&
PLAY&[192.168.1.232]**********************************************************&
GATHERING&FACTS***************************************************************&
ok:&[192.168.1.232]
TASK:&[php&installing]********************************************************&
changed:&[192.168.1.232]
PLAY&RECAP&********************************************************************
192.168.1.232&&&&&&&&&&&&&:&ok=2&&&&changed=1&&&&unreachable=0&&&&failed=0
#看到结果,ok=2&&&changed=1&说明客户机(232)上的php安装成功了!创建cron定时计划#建立一个cron.yaml文件,然后每月10号来运行/root/dd.sql脚本
#cron定时任务参数
#&Ensure&a&job&that&runs&at&2&and&5&exists.
#&Creates&an&entry&like&"*&5,2&*&*&ls&-alh&&&/dev/null"
-&cron:&name="check&dirs"&hour="5,2"&job="ls&-alh&&/dev/null"
#&Ensure&an&old&job&is&no&longer&present.&Removes&any&job&that&is&prefixed
#&by&"#Ansible:&an&old&job"&from&the&crontab
-&cron:&name="an&old&job"&state=absent
#&Creates&an&entry&like&"@reboot&/some/job.sh"
-&cron:&name="a&job&for&reboot"&special_time=rebootjob="/some/job.sh"
#&Creates&a&cron&file&under&/etc/cron.d
-&cron:&name="yum&autoupdate"&weekday="2"&minute=0hour=12
&&&&&&&&user="root"job="YUMINTERACTIVE=0&/usr/sbin/yum-autoupdate"
&&&&&&&cron_file=ansible_yum-autoupdate
#&Removes&a&cron&file&from&under&/etc/cron.d
-&cron:cron_file=ansible_yum-autoupdate&state=absent&& &#关于ansible的介绍就到此,有不足之处,希望大家多多指教!本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

更多关于 ansible api2.0使用 的文章

 

随机推荐