ansible实践2-拷贝文件或目录

 
ansible testhost -m copy -a "src=/etc/ansible  dest=/tmp/ansibletest owner=root group=root mode=0755"
 
注意:源目录会放到目标目录下面去,如果 目标指定的目录不存在,它会自动创建。如果拷贝的是文件,dest指定的名字和源如果不同,并且它不是已经存在的目录,相当于拷贝过去后又重命名。但相反,如 果dest是目标机器上已经存在的目录,则会直接把文件拷贝到该目录下面。
 
ansible testhost -m copy -a "src=/etc/passwd dest=/tmp/1.txt"
这里的/tmp/123和源机器上的/etc/passwd是一致的,但如果目标机器上已经有/tmp/123目录,则会再/tmp/123目录下面建立passwd文件
 
Ansible远程执行脚本
 
首先创建一个shell脚本
vim  /tmp/test.sh  //加入内容
#!/bin/bash
echo `date` > /tmp/ansible_test.txt
 
然后把该 脚本分发到各个机器上
ansible testhost -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"
 
最后是 批量执行该shell脚本
ansible testhost -m shell -a "/tmp/test.sh"
 
shell模块, 还支持远程执行命令并且带管道
ansible testhost -m shell -a "cat /etc/passwd|wc -l "
 
Ansible 实现任务计划
ansible web10.aming.com -m cron -a "name=test_cron job='/bin/touch /tmp/1212.txt' weekday=6"
 
crontab -l 客户端查看
若要删除该cron 只需要加一个字段 state=absent
 
ansible testhost -m cron -a "name=test_cron state=absent"
其他的时间表示:分钟 minute 小时 hour 日期 day 月份 month
 
Ansibl e安装rpm包/管理服务
ansible testhost -m yum -a "name=httpd "
在name后面还可以加上state=installed
 
ansible testhost -m service -a "name=httpd state=started enabled=yes"
这里的name是centos系统里的服务名,可以通过chkconfig --list查到。
 
Ansible文档的使用
ansible-doc -l   列出所有的模块
ansible-doc cron  查看指定模块的文档
Ansible playbook的使用
 
相当于把模块写入到配置文件里面,例:
vim  /etc/ansible/test.yml
---
- hosts: web10.aming.com
  remote_user: root
  tasks:
    - name: test_playbook
      shell: touch /tmp/lishiming.txt
 
说明: hosts参数指定了对哪些主机进行参作;
user参数指定了使用什么用户登录远程主机操作;
tasks指定了一个任务,其下面的name参数同样是对任务的描述,在执行过程中会打印出来。
执行:ansible-playbook test.yml
 
 
再来一个创建用户的例子:
vim  /etc/ansible/create_user.yml
---
- name: create_user
  hosts: web10.aming.com
  user: root
  gather_facts: false
  vars:
    - user: "test"
  tasks:
    - name: create user
      user: name="{{ user }}"
 
 
说明: name参数对该playbook实现的功能做一个概述,后面执行过程中,会打印 name变量的值 ,可以省略;gather_facts参数指定了在以下任务部分执行前,是否先执行setup模块获取主机相关信息,这在后面的task会使用到setup获取的信息时用到;vars参数,指定了变量,这里指字一个user变量,其值为test ,需要注意的是,变量值一定要用引号引住;user提定了调用user模块,name是user模块里的一个参数,而增加的用户名字调用了上面user变量的值。
 
客户端查看 创建的用户test   grep test /etc/passwd
 
Ansible playbook中的循环
---
- hosts: testhost
  user: root
  tasks:
    - name: change mode for files
      file: path=/tmp/{{ item }} mode=600
      with_items:
        - 1.txt
        - 2.txt
                 - 3.txt
 
需要 在web9, web10 机器上先创建文件 touch /tmp/{1.txt,2.txt,3.txt} 才能执行修改权限操作。
 
 

 Copy模块

copy模块

copy模块在ansible里的角色就是把ansible执行机器上的文件拷贝到远程节点上。 
与fetch模块相反的操作。

常用模块参数

参数名是否必须默认值选项说明
srcno  用于定位ansible执行的机器上的文件,需要绝对路径。如果拷贝的是文件夹,那么文件夹会整体拷贝,如果结尾是”/”,那么只有文件夹内的东西被考过去。一切的感觉很像rsync
contentno  用来替代src,用于将指定文件的内容,拷贝到远程文件内
destyes  用于定位远程节点上的文件,需要绝对路径。如果src指向的是文件夹,这个参数也必须是指向文件夹
backupnonoyes/no备份远程节点上的原始文件,在拷贝之前。如果发生什么意外,原始文件还能使用。
directory_modeno  这个参数只能用于拷贝文件夹时候,这个设定后,文件夹内新建的文件会被拷贝。而老旧的不会被拷贝
follownonoyes/no当拷贝的文件夹内有link存在的时候,那么拷贝过去的也会有link
forcenoyesyes/no默认为yes,会覆盖远程的内容不一样的文件(可能文件名一样)。如果是no,就不会拷贝文件,如果远程有这个文件
groupno  设定一个群组拥有拷贝到远程节点的文件权限
modeno  等同于chmod,参数可以为“u+rwx or u=rw,g=r,o=r”
ownerno  设定一个用户拥有拷贝到远程节点的文件权限

案例

# 把/srv/myfiles/foo.conf文件拷贝到远程节点/etc/foo.conf,并且它的拥有者是foo,拥有它的群组是foo,权限是0644
- copy: src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644 # 跟上面的案例一样,不一样的只是权限的写法 - copy: src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode="u=rw,g=r,o=r" # 另外一个权限的写法 - copy: src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode="u+rw,g-wx,o-rwx" # 拷贝/mine/ntp.conf到远程节点/etc/ntp.conf,并且备份远程节点的/etc/ntp.conf。 - copy: src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes 

 

常用参数返回值

参数名参数说明返回值返回值类型样例
src位于ansible执行机上的位置changedstring/home/httpd/.ansible/tmp/ansible-tmp-1423796390.97-147729857856000/source
backup_file将原文件备份changed and if backup=yesstring/path/to/file.txt.2015-02-12@22:09~
uid在执行后,拥有者的IDsuccessint100
dest远程节点的目标目录或文件successstring/path/to/file.txt
checksum拷贝文件后的checksum值successstring6e642bb8dd5c2e027bf21dd923337cbb4214f827
md5sum拷贝文件后的md5 checksum值when supportedstring2a5aeecc61dc98c4d780b14b330e3282
state执行后的状态successstringfile
gid执行后拥有文件夹、文件的群组IDsuccessint100
mode执行后文件的权限successstring0644
owner执行后文件所有者的名字successstringhttpd
group执行后文件所有群组的名字successstringhttpd
size执行后文件大小successint1220
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值