Ansible常用模块

在这里写一下ansible使用过程中一些常用模块的使用方法

setup

用于统计系统的相关信息

# 例子
ansible test -m setup
# 参数
  - filter: 过滤要显示的内容
  - ansible test -m setup -a "filter=ansible_python_version" -k # 只获取主机ansible_python_version的值
  - 更多的帮助 ansible-doc -s setup

file

设置文件属性,file模块除了建立文件/文件夹,还可以建立软/硬连接

force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

   group:定义文件/目录的属组

   mode:定义文件/目录的权限

   owner:定义文件/目录的属主

    path:必选项,定义文件/目录的路径

    recurse:递归的设置文件的属性,只对目录有效

   src:要被链接的源文件的路径,只应用于state=link的情况

   dest:被链接到的路径,只应用于state=link的情况

   state:
           directory:如果目录不存在,创建目录

           file:即使文件不存在,也不会被创建

           link:创建软链接

           hard:创建硬链接

           touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

           absent:删除目录、文件或者取消链接文件

使用实例:

  #在playbook创建软连接
- name: "将go命令软连接到/usr/bin/go"
  file:
    src: /usr/lib/go-11.1/bin/go
    dest: /usr/bin/go
    state: link
#在命令行中使用
# 等于 ln -s /etc/fstab /tmp/fstab
ansible test -m file -a 'src=/etc/fstab dest=/tmp/fstab state=link' -k     
# 删除文件                         
ansible test -m file -a 'path=/tmp/fstab state=absent' -k   
# 创建文件指定其属主,属组,权限                                        
ansible test -m file -a 'path=/tmp/lixin.txt state=touch owner=nobody group=nobody mode=666' -k   

copy

复制文件到远程主机,每次备份会产生一个md5sum,如果两次赋值文件的md5sum相同,那么就不会再次执行复制动作。

# 参数
  - backup:在覆盖之前将原文件备份,备份文件名包含时间信息。有两个选项:yes | no
  - src:源文件,如果是目录的话,会递归赋值,包括目录本身,如果目录为/,那么只会复制目录下的文件
  - dest:目标文件路径
  - others:所有file模块里的选项都可以在这里使用
  - content:用于替代'src',可以直接设定文件的值
  - directory_mode:递归设定目录的权限,默认为系统默认权限
  - force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当前目标主机的目标位置不存在该文件时,才复制,默认为yes。

使用实例:

 # 在目录主机上创建tmp.txt文件,内容为hello world
ansible test -m copy -a "content='hello world' dest=/tmp/tmp.txt" -k 

apt

这个模块是ubuntu作为远端节点的OS的时候,用的最多的。ubuntu/debian的包管理工具。

模块参数
参数名                 
cache_valid_time :  如果update_cache 参数起作用的时候,这个参数才会起作用。其用来控制update_cache的整体有效时间
deb:     这个用于安装远程机器上的.deb后缀的软件包
default_release: 等同于apt命令的-t选项,这里就不多说了
force  : 强制执行apt install/remove
install_recommends :这个参数可以控制远程电脑上是否只是下载软件包,还是下载后安装,默认参数为true,设置为false的时候光下载软件包,不安装
name:   apt要下载的软件包名字,支持name=git=1.6 这种制定版本的模式
purge:   如果state参数值为absent,这个参数为yes的时候,将会强行干净的卸载
state:    present latest/absent/present   定义软件包的最终状态,latest时为安装最新软件
update_cache :    当这个参数为yes的时候等于apt-get update
upgrade: yes/safe/full/dist如果参数为yes或者safe,等同于apt-getupgrade如果是full就是完整更新。如果是dist等于apt-get dist-upgrade。

使用案例

# 在安装foo软件包前更新然后安装foo
- apt: name=foo update_cache=yes

# 移除foo软件包
- apt: name=foo state=absent

# 安装foo软件包
- apt: name=foo state=present

# 安装foo 1.0软件包
- apt: name=foo=1.00 state=present

# 安装nginx最新的名字为squeeze-backport发布包,并且安装前执行更新
- apt: name=nginx state=latest default_release=squeeze-backports update_cache=yes

# 只下载openjdk-6-jdk最新的软件包,不安装
- apt: name=openjdk-6-jdk state=latest install_recommends=no

# 安装所有软件包到最新版本
- apt: upgrade=dist

# 更新apt-get的list
- apt: update_cache=yes

# 3600秒后停止update_cache
- apt: update_cache=yes cache_valid_time=3600


# 安装远程节点上的/tmp/mypackage.deb软件包
- apt: deb=/tmp/mypackage.deb

yum

使用yum包管理软件包,跟apt类似

# 参数
- config_file:yum的配置文件
- disable_gpg_check: 关闭gpg_check
- disablerepo: 不启用某个源
- enablerepo:启用某个源
- list:列出repo源
- name:软件包的名称,可以为一个url路径,或者本地一个rpm包的路径
- state:状态
  # 安装
  - present
  - installed *
  - latest
  # 删除
  - absent
  - removed *

例子

ansible test -m yum -a 'name=httpd state=installed' -k     # yum 安装 httpd  

command

在远程主机上执行命令。(默认模块)

# 参数
  - creates:文件名,当该文件存在时,则不执行后面的命令
  - chdir:执行命令前,先修改当前路径
  - removes:文件名,当文件不存在时,则不执行后面的命令
  - executable:切换shell来执行命令,该执行路径必须是一个绝对路径

shell

和command模块相同,参数也相同。

# command,shell,raw,script模块同属于commands类,都是用来执行命令,不同的是:
  - command模块执行的命令中不能包含:|,<,>,& 符号。
  - shell模块:可以执行远程服务器上的shell脚本文件,也支持 管道符等,脚本需要使用绝对路径。
  - raw模块和shell模块相同,可以执行任意命令就像在本机一样,相当于ssh之直接执行Linux命令,不会进入到ansible的模块子系统中。
  - script模块,用来执行一个shell脚本,其实将管理端的shell脚本copy到被管理端上然后执行,相当于 scp + shell 的组合。(需要在脚本所在目录下执行)
# 官方建议使用command模块,如果需求不满足,可以使用raw模块

server

用于管理服务

# 参数
  - arguments: 给命令行提供一些选项
  - enable:是否开机启动 yes | no
  - name:服务名称
  - pattern:定义一个模式,如果通过status命令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务已经在运行,否则会认为未启动( ps aux | grep `pattern` )
  - runlevel:运行级别
  - sleep:如果执行了,restarted,则在 stop 和 start 之间沉睡几秒钟
  - state:started、stoped、restarted和reloaded,其中started和stoped是幂等的,也就是说如果服务已经停止,那么运行stoped不会执行任何操作

使用实例

ansible test -m service -a 'name=nginx state=started enabled=yes' -k                   # 启动nginx进程,并设置为开机启动
ansible test -m service -a 'name=nginx state=stopped' -k                               # 关闭nginx进程
ansible test -m service -a 'name=network state=restarted arguments=eth0' -k            # 重启network进程,并传递eth0 作为参数,即:重启eth0网卡
ansible test -m service -a 'name=nginx pattern=/usr/local/nginx state=started' -k      # 如果无法使用 service nginx status查寻到nginx的状态,那么会使用 ps 来过滤 pattern指定的关键字,如果存在,则表示程序已经正常启动 

cron

用于管理定时任务(crontab 来操作)

# 参数
  - backup: 对远程主机上的原计划内容修改之前做备份
  - cront_file: 如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户计划任务
  - day: 日(1-31,*,*/2,......)
  - hour: 小时(0-23,*,*/2,......)
  - minute: 分钟(0-59,*,*/2,......)
  - mouth: 月(1-12,*,*/2,......)
  - weekday: 周(0-7,*,......)
  - job: 要执行的任务,依赖于state=present
  - name: 该任务的描述,必选项。
  - special_time:指定什么时候执行(被触发),参数:reboot,yearly,annually,monthly,weekly,daily,hourly。
  - state:确认该任务计划是创建还是删除 Present(启用) | Absent(停用)
  - user:以哪个用户的身份执行

使用实例:

ansible test -m cron -a "hour=3 month=2 day=1 job='echo hello' name='test' state=present " -k  # 添加一条定时任务,* 3 1 2 * echo hello
ansible test -m cron -a 'name=test state=absent' -k                                            # 删除name为test的计划任务

user

用于管理用户(useradd,userdel) 也可以用command模块来执行shell命令创建和管理用户

# 参数
  - home:指定用户的家目录
  - createhome: 是否创建用户家目录 yes | no
  - groups:用户的属组
  - uid:用户的uid
  - password:用户的密码
  - name:用户的名称
  - system:是否是系统用户
  - remove:是否删除用户家目录
  - state:具体的操作, 删除/添加, present | absent
  - shell: 指定用户的shell 

template

模版,用于将模版文件渲染后,输出到远程主机上,模版文件一般以.j2为结尾,标识其是一个jinja2模版文件

# 参数
  - src:模版文件的路径
  - dest:拷贝到远程主机上的位置
  - mode:权限
  - attributes: 特殊权限 类似于 chattr
  - force:存在覆盖
  - group:属组
  - owner:属主

get_url

从互联网下载数据到本地,作用类似于Linux下的curl命令。

# 参数
  - url:必传参数,文件的下载地址
  - dest:必传参数,文件保存的绝对路径
  - mode:文件的权限mode
  - othes:所有file模块里的选项都可以在这里使用
  - checksum:文件的校验码
  - headers:传递给下载服务器的 HTTP Headers
  - backup:如果本地已经存在同名的配置文件,先行备份
  - timeout:下载的超时时间

unarchive

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

# 参数
  - remote_src: 用来表示需要解压的文件存在远程服务器中还是本地服务器中,默认为no,表示解压前先将控制节点上的文件复制到远程主机上中,然后再进行解压。
  - src:指定压缩文件的路径,该选项取决于remote_src的取值,如果remote_src取值为yes,则src指定的是远程服务器中压缩包的地址,如果remote_src取值为no,则src指向的是控制节点中的路径
  - dest:该选项指定的是远程服务器上的绝对路径,表示压缩文件解压的路径
  - list_files: 默认情况下该选项的取值为no,如果该选项取值为yes,也会解压缩文件,并且在ansible的返回值中列出压缩包里的文件;
  - exclude:解压文件时排出exclude选项指定的文件或目录列表
  - keep_newer: 默认值为False,如果该选项为True,那么当目标地址中存在同名文件,并且文件比压缩包中的文件更新时,不进行覆盖。
  - owner:文件或目录解压以后的所有者
  - group: 文件或目录解压以后所属的群组
  - mode: 文件或目录解压以后的权限

git

在远程服务器上执行git相关操作。依赖于git命令,需要在远程主机上先进性安装。

# 参数
  - repo:远程git库的地址,可以是一个git协议,ssh协议或者http协议的git库地址
  - dest:必选参数,git库clone到本地服务器以后保存的绝对路径
  - version:克隆远程git库的版本,取值可以为HEAD,分支名称,tag的名称,也可以是一个commit的hash值
  - foces:默认为no,当该选项为yes时,如果本地git库有修改,将会抛弃本地的修改(强制覆盖)
  - accept_hostkey: 当该选项取值为yes时,如果git库服务器不再know_hosts中,则添加到know_hosts中,key_file指定克隆远程git库地址时使用的私钥。 
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容