Ansible对远程服务器的实际操作实际是通过模块完成的,其工作原理如下:

  1)将模块拷贝到远程服务器

  2)执行模块定义的操做,完成对服务器的修改

  3)在远程服务器中删除模块

需要说明的是,Ansible中的模块是幂等的。也就是说,多次执行相同的操作,只有第一次会起作用。这也是在编写自定义Ansible模块的需要注意的地方。

Ansible提供了大量的模块,ansible-doc命令用于在命令行查看模块列表,也可以使用该工具在命令行获取模块帮助信息

ansible-doc -l

下面命令用户获取file模块的帮助信息

ansible-doc file
ansible-doc -l file

下面是一些比较基础,重要,同时也是使用频率比较高的模块

ping

ping模块是Ansible中最简单的模块,用来测试现有的SSH参数是否能够顺利连通远程服务器

ansible test -m ping

远程命令模块

command 是Ansible的默认模块,可以不指定模块名称直接运行Linux命令, 也可以显示地通过-m指定command模块

command在执行Linux命令时不能使用管道

ansible test -a 'hostname'
ansible test -m command -a 'hostname'

raw模块相当于使用SSH直接执行Linux命令,不会进入到Ansible的模块子系统中

ansible test -m raw -a 'cat /etc/passwd|wc -l'

shell模块不仅可以执行Linux命令,还是可以执行远程服务器上的shell脚本文件

ansible test -m shell -a 'cat /etc/passwd|wc -l'

ansible test -m shell -a '/home/heboan/test.sh' #脚本需要加上执行权限

script模块可以在远程服务器上执行主控节点的脚本文件,起功能相当于scp+shell的组合。脚本执行完成以后会在远程服务器上删除脚本文件

ansible test -m script -a 'test.sh'

file

file模块主要用于对远程服务器上的文件(包括链接和目录)进行操作,包括修改文件的权限,修改文件的所有者、创建文件、删除文件等。

创建一个目录

ansible test -m file -a 'path=/tmp/dd state=directory mode=0755'

#目录不存在,会创建目录
#如果state取值为file,即使文件不存在也不会被创建

修改权限

ansible test -m file -a 'path=/tmp/dd state=touch mode='''

#如果文件不存在,则创建一个新文件,如果 文件或目录以存在,更新其最后访问时间和修改时间

#state取值为absent时,删除目录,文件或软连接

创建一个软连接

ansible test -m file -a "src=/tmp/dd dest=/tmp/dd1 owner=heboan group=heboan state=link"

修改一个文件的所有者

ansible test -m file -a "path=/tmp/dd owner=root group=root mode=0644"

copy

copy模块用来将主控节点的文件或目录拷贝到远程服务器上。

copy模块中的重要选项:

  • src:要复制到远程主机的文件地址,可以是绝对路径,也可以是相对路径,如果路径是一个目录,将递归复制,如果路径使用‘/’结尾,则只复制目录里面的内容,包在包含目录在内的整个内容
  • dest:文件复制的目的地,必须是一个绝对路径,如果源文件是一个目录,那么dest指向的也必须是一个目录
  • force:默认取值 为yes,表示目标主机包含该文件,但内容不同时会强制覆盖,如果未no,只有目标主机不存在该文件时,才会进行复制
  • backup:默认取值为no,如果取值为yes,那么,在覆盖之前将原文件进行备份
  • directory_mode:递归设定目录权限,默认为系统默认权限
  • others:所有file模块里的选项都可以在这里使用

拷贝文件到远程服务器

ansible test -m copy -a "src=test.sh dest=/tmp/test.sh"

拷贝文件到远程服务器,如果远程服务器已经存在,则备份文件

ansible test -m copy -a "src=test.sh dest=/tmp/test.sh backup=yes force=yes"

拷贝文件到远程服务器,并且修改文件的所有者和权限

ansible test -m copy -a "src=test.sh dest=/tmp/test.sh owner=root group=root force=yes" -become

user/group

创建一个用户

ansible test -m user -a "name=sellsa comment='sellsa' uid=1329 group=heboan" -become

comment:用户的详细描述

删除一个用户

 ansible test -m user -a 'name=sellsa state=absent' -become

创建一个组

ansible test -m group -a 'name=ansible state=present gid=1234' -become

删除一个组

ansible test -m group -a 'name=ansible state=absent' -become

get_url

下载文件到远程服务器

ansible test -m get_url -a "url=https://dldir1.qq.com/qqfile/qq.exe dest=/tmo/qq.exe"

下载文件到远程服务器,并修改文件的权限

ansible test -m get_url -a "url=https://dldir1.qq.com/qqfile/qq.exe dest=/tmo/qq.exe mode=0777"

下载文件到远程服务器,并检查文件的md5校验

ansible test -m get_url -a "url=https://dldir1.qq.com/qqfile/qq.exe dest=/tmo/qq.exe mode=0777 checksum=md5:xxxxxxx"

unarchive

unarchive模块用于解压文件,其作用类似于Linux下的tar命令。默认情况下是将控制节点的压缩包拷贝到远程服务器,然后进行解压。

ansible test -m unarchive -a "src=heboan.tar.gz dest=/tmp/data"

解压远程的文件

ansible test -m unarchive -a "src=/tmp/heboan.tar.gz dest=/tmp/data remote_src=yes "

git

git模块就是远程服务器执行git相关的操作,该模块常用的选项如下:

  • repo:远程git 库地址,可以是git协议、ssh协议或http协议的地址
  • dest:必选选项,git库clone到本地服务器以后保存的绝对路径
  • version:克隆远程git库的版本,取值可以为HEAD、分支名称、tag的名称,也可以是一个commit的hash值
  • force:默认值为no, 当为yes时,当本地的库有修改时,则会放弃本地的修改
  • accept_hostkey:当该选项取值为yes时,如果git库的服务器不在know_hosts中,则添加到know_hosts中
  • key_file:指定克隆远程git库地址时使用的私钥
ansible test -m git -a "repo=https://github.com/kennethreitz/requests.git dest=/tmp/requests version=HEAD" 

stat

stat模块用户获取远程服务器上的文件信息,其作用类似于linux下的stat命令。stat模块可以获取atime、ctime、mtime、checksum、size、uid、gid等信息

stat只有path这一关必选项,用来指定文件或目录的路径

#获取文件的相应信息
ansible test -m stat -a "path=/etc/passwd"

cron

cron是管理Linux下计划任务的模块,该模块包含以下重要选项:

  • backup:取值为yes 或no,默认为no,表示修改之前先做备份
  • state:取值为present或absent,用来确认该任务是创建还是删除
  • name:该任务的描述
  • job:添加或删除任务,主要取决于state的值
  • user:操作哪一个用户的crontab
  • cront_file:如果指定该选项,则该文件替换远程主机上的cron.d目录下的用户任务计划
  • month weekday day minute hour 取值与crontab类似,例如,对于minute的取值范围0-59,也可以选择‘*’表示没分钟运行,或者'*/5'表示每5分钟运行
ansible test -m cron -a "backup=yes name='test cron' minute=*/2 hour=* job='ls /tmp >/dev/null'"

service

service模块的作用类似于Linux下的service命令,用来启动、停止、重启服务。

  • name:服务的名称,该选项为必选项
  • state: 可以取值started、stopped、restarted和reloaded。其中started和stoped是幂等的,也就是说如果服务已经启动了,执行started不会执行任何操作
  • sleep:重启的过程中,先停止服务然后sleep几秒再启动
  • enabled:取值为yes或no,用来设置服务是否开机启动
ansible test -m service -a "name=redis state=started"

sysctl

该模块的作用于Linux下的 sysctl命令相似,用于控制Linux的内核参数,常用选项:

  • name:需要设置的参数
  • value:需要设置的值
  • sysctl_file:sysctl.conf文件的绝对路径,默认路径是/etc/sysctl.conf
  • reload:该选项可以取值为yes或no,默认为yes,表示设置完成以后是否需要执行sysctl -p操作
#将overcommit_memory参数的值为1
ansible test -m sysctl -a "name=vm.overcommit_memory value=1" -become

mount

在远程服务器上挂载磁盘每, 当进行磁盘操作时,如果挂载点指定的路径不存在,将创建该路径

#挂载/dev/vda盘到/mnt/data目录
ansible test -m mount -a "name=/mnt/data src=/dev/vda fstype=ext4 state=mounted"

synchronize

synchronize模块是对rsync命令的封装,以便对常见的 rsync任务进行处理

synchronize模块的常用选项:

  • src:需要同步到远程服务器的文件或目录
  • dest:远程服务器保存数据的路径
  • archive:默认取值为yes,相当于同时开启recursive、links、perms、times、owner、group、-D选项
  • compress:默认为yes,表示文件在同步过程中是否启用压缩
  • delete:默认为no,当取值为yes时,表示删除dest中存在而src中不存在的文件
ansible test -m synchronize -a 'src=heboan/ dest=/tmp/www'

#heboan/    同步heboan目录里面的内容到www目录
#heboan 同步heboan整个目录到www目录

第4天:Ansible模块的更多相关文章

  1. ansible模块

    ansible模块: 模块(Modules),类似于 "任务插件"("task plugins")或"库插件"("library ...

  2. ansible笔记(3):ansible模块的基本使用

    ansible笔记():ansible模块的基本使用 在前文的基础上,我们已经知道,当我们使用ansible完成实际任务时,需要依靠ansible的各个模块,比如,我们想要去ping某主机,则需要使用 ...

  3. ansible模块command、shell、raw、script

    简介 环境: ansible端: ip:192.168.100.129 hostname:node1.lansgg.com client端: ip:192.168.100.131 hostname:v ...

  4. win10的pycharm中安装ansible模块过程

    前面的安装报错信息 ansible模块安装报错:Could not install packages due to an OSError: [Errno 2] No such file or dire ...

  5. Ansible 模块命令介绍

    copy模块: 目的:把主控端/root目录下的a.sh文件拷贝到到指定节点上 命令:ansible 10.1.1.113 -m copy -a 'src=/root/a.sh dest=/tmp/' ...

  6. ansible 模块 分享

    A a10_server 管理A10 Networks AX / SoftAX / Thunder / vThunder设备 a10_service_group 管理A10网络设备的服务组 a10_v ...

  7. ansible 模块

    1. #vim /etc/ansible/yaml/back.yml - hosts: siyi tasks: - name: "yum rsync" yum: name=rsyn ...

  8. ansible模块学习

    ansible的功能: 模块化任务,调用特定的模块,完成特定的任务 基于python语言实现,由paramiko.pyyaml和jinja2三个模块构建 部署简单,agentless,ansible基 ...

  9. 4.1、Ansible模块

    ansible-doc -l    列出所有模块 ansible-doc 模块名    查看模块的help说明 ansible-doc -s  module_name:获取指定模块的使用信息 ***文 ...

随机推荐

  1. asp.net RDLC报表入门

    Asp.net RDLC 报表入门 这几天帮给同事讲解Asp.net RDLC 报表方面的知识,顺便做个简单教程,在这里分享给大家. 由于图片多又大,写了一半,光上传图片就把我累个半死,所以我教把程放 ...

  2. Tomcat 7下如何利用 catalina.properties 部署公用类

    Tomcat 有很多配置文件,其中一个是  catalina.properties ,本文介绍catalina.properties 中的设置项. 一.组成   catalina.properties ...

  3. java分页通用篇

    一.创建分页通用类 package com.dkyw.util; import java.util.List; public class Page<T> { private int tot ...

  4. Quick-Cocos2dx-Community_3.6.3_Release 编译时libtiff.lib 无法解析

    Quick-Cocos2dx-Community_3.6.3_Release 使用VS2012编译,报错: libtiff.lib lnk2001 无法解析的外部符号 ltod3 类似于上面这种,刚才 ...

  5. OPENId是什么, OAUTH 是什么

    what is openId open id is said to be a protocol which uses url as username, so if a website supports ...

  6. 程序员你为什么这么累? - Controller规范

    导读:程序员你为什么这么累? 接口定义:程序员你为什么这么累? - 接口定义 第一篇文章中,我贴了2段代码,第一个是原生态的,第2段是我指定了接口定义规范,使用AOP技术之后最终交付的代码,从15行到 ...

  7. HDU 1728 逃离迷宫 (广搜)

    题目链接 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可 ...

  8. bzoj 3028 母函数

    首先我们可以求出来所有食物的母函数: 汉堡:f(x)=1/(1-x^2). 可乐:f(x)=1+x. 鸡腿:f(x)=1+x+x^2. 蜜桃多:f(x)=x/(1-x^2). 鸡块:f(x)=1/(1 ...

  9. Eureka服务下线(Cancel)源码分析

    Cancel(服务下线) 在Service Provider服务shut down的时候,需要及时通知Eureka Server把自己剔除,从而避免其它客户端调用已经下线的服务,导致服务不可用. co ...

  10. python模块(requests,logging)

    一.requests Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythone ...