ansible常用模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible常用模块相关的知识,希望对你有一定的参考价值。

8.模块
8.1模块的分类
8.1.1 Core Module
(1)不需要格外下载和配置就可以直接使用的
(2)常用的module
(3)都是经过严格测试的
8.1.2 Extra Module
(1)Extra Module需要下载和配置才能使用
(2)次常用的
(3)还有可能存在bug的
注意:在ansible module文档上查看单个module的时候,每一个module文档的底部都会标识,这是一个“Core Module”,或者这是一个“Extra Module”,比如yum就是一个core module,yum_repository就是一个extra module
8.2常见模块
可以使用ansible-doc -l命令查看有哪些模块
使用ansible-doc -s copy命令可以查看模块的使用方法
8.2.1 command
(1)帮助:[[email protected] ~]# ansible-doc -s command
(2)简介:Command模块,命令模块、默认模块,用于在远程执行命令
(3)选项:
free_form:要执行的linux指令
chdir:在执行指令之前,先切换到该目录
removes:对应的文件不存在就执行command
creates:对应的文件存在就执行command
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
(4)案例:远程查看时间和文件
[[email protected] ansible]# ansible zhang -m command -a "date"
[[email protected] ansible]# ansible all -m command -a "date"
[[email protected] ansible]# ansible wang -m command -a "date"
[[email protected] ansible]# ansible wang -m command -a "tail -1 /etc/passwd"
[[email protected] ansible]# ansible all -a "date"
技术图片
技术图片

8.2.2 cron
(1)简介:用来做计划任务
(2)state:
present:安装 默认为安装
absent:移除
如果需要移除的话,只需要写上name和absent就可以了
(3)案例:写入一个计划任务,查看是否已经成功写入。
需要注意的是不写的默认都是 ,名字得写,不写就会报错,状态默认是安装
[[email protected] ansible]# ansible zhang -m cron -a ‘hour="
/5" job="/bin/date" name="date test" state=present‘
[[email protected] ansible]# ansible zhang -a "crontab -l"
技术图片

8.2.3 user、group
(1)简介:实现用户账号管理的
(2)案例:创建用户、创建组、创建组里边的成员
(3)注意:system 是否是系统组
[[email protected] ansible]# ansible all -m user -a ‘name="user1" state=present‘ //创建用户
技术图片
[[email protected] ~]# ansible zhang -m group -a ‘name=pig gid=301 system=yes‘ //创建组
技术图片
[[email protected] ~]# ansible zhang -m user -a ‘name=pig uid=301 system=yes group=pig‘ //创建组里边的成员
技术图片
ansible user 的passwd参数的值需要接受加密后的值
[[email protected] test_deploy]# echo Zmc2tG1m= | openssl passwd -1 -stdin
$1$XI3TNbug$Y14rSXX7JxTtlTub9Car/0
tasks:

  • name: add user tech
    user: name=tech password=$1$XI3TNbug$Y14rSXX7JxTtlTub9Car/0
    8.2.4 copy
    (1)简介:用来操作文件,但是不能传输目录,他不会递归目录
    (2)案例:复制文件、创建新文件,写入指定内容
    (3)注意:
    src本地源文件路径,可以相对,可以绝对
    dest目标文件,必须绝对路径
    content:取代src,表示指定生成内容生成文件
    远端可以指定传过去的文件名称,没有指定则为默认名称,目录后边+/和不加是一样的
    backup:可以备份原来的文件,前提是原来的文件必须和要推送的文件有不同的地方,默认为no
    state:directory,abset,file,directory会创建目录,abset会删除,默认是file
    将本地文件复制到远程主机
    [[email protected] ~]# ansible wang -m copy -a ‘src=/etc/passwd dest=/tmp/ mode=750 owner=root‘
    技术图片
    创建一个新文件,并写入指定内容
    [[email protected] ~]# ansible wang -m copy -a ‘content="hello world " dest=/tmp/1.txt
    技术图片
    如果要批量复制目录下的文件到远端某一个目录中,可以使用with_fileglob模块,使用案例如下
    tasks:
  • name: unity build script
    copy: src={{item}} dest=/data/shell/ owner=root mode=755 backup=yes
    with_fileglob:
    • /data/conf/build/*
      8.2.5 file
      (1)简介:设置文件属主、属组、权限、制作软链接
      (2)案例:设定远程文件 归属关系和权限
      修改将远程主机/tmp/1.txt的归属关系和权限
      [[email protected] ~]# ansible wang –m file -a ‘owner=user1 group=user1 mode=644 path=/tmp/1.txt‘
      注意:path:指定文件路径,可以使用name或dest来替换
      技术图片
      案例:制作软链接
      [[email protected] ~]# ansible wang -m file -a ‘path=/tmp/1.txt.link src=/tmp/1.txt state=link‘
      注意:
      src:指定文件路径,可以使用name或dest来替换
      path:指明符号链接文件路径
      如果要删除,则设为state=absent
      技术图片
      创建目录:
  • name: mkdir scripts in zabbix-agent
    file: dest=/etc/zabbix/scripts mode=755 owner=root state=directory
    8.2.6 ping
    (1)简介:检测主机是否能连通
    (2)案例:检测所有主机连通性
    [[email protected] ~]# ansible all -m ping
    技术图片
    8.2.7 service
    (1)简介:控制服务的运行状态和开机启动状态
    (2)案例:
    [[email protected] ~]# ansible wang -a "chkconfig --list named"
    注意:
    enabled:是否开机自动启动,取值为true为false
    name:服务名称
    state:状态
    [[email protected] ~]# ansible wang -a "chkconfig --list named" //查看named开机自启级别
    [[email protected] ~]# ansible wang -m service -a ‘enabled=true name=named‘ //named开机自启
    named的开机自启,并且保持运行状态
    [[email protected] ~]# ansible wang -m service -a ‘enabled=true name=named state=started‘
    技术图片
    8.2.8 shell
    (1)简介:Shell模块,在远程主机上执行命令
    (2)注意:如果涉及管道、变量的最好使用shell模块
    (3)案例:
    设置密码
    [[email protected] ~]# ansible zhang -m shell -a ‘echo 123456 | passwd --stdin user1‘
    技术图片
    8.2.9 script
    (1)简介:在远程主机执行本地脚本
    (2)案例:在远程主机执行本地的test.sh脚本
    (3)注意:
    script:将本地脚本复制到远程主机,并运行
    相对绝对路径都支持
    [[email protected] ~]# ansible all -m script -a ‘test.sh‘
    技术图片
    8.2.10 yum
    (1)简介:程序包的安装和卸载
    (2)案例:安装zsh包,卸载zsh包
    (3)注意:
    name:指定要安装的程序包,可以带上版本号
    state:present,latest表示安装,absent表示卸载
    [[email protected] ~]# ansible wang -m yum -a "name=zsh" //安装zsh包
    技术图片
    [[email protected] ~]# ansible wang -m yum -a ‘name=zsh state=absent‘ //卸载zsh包
    技术图片
    8.2.11 setup
    (1)简介:收集远程主机的facts,每个被管理节点在接收管理命令之前会将自己主机相关的信息,如操作系统版本,ip地址等报告给远程的ansbile主机。
    (2)案例:收集wang组里边的所有远程主机信息
    [[email protected] ~]# ansible wang -m setup
    技术图片
    案例:把信息以主机名的方式存储到/tmp/facts
    [[email protected] facts]# ansible jingqu -m setup --tree /tmp/facts
    技术图片
    案例:收集网卡信息
    [[email protected] facts]# ansible 172.165.0.7 -m setup -a "filter=ansible_eth[0-9]"
    技术图片
    8.2.12 synchronize模块
    (1)简介:将src目录的内容推送到远端服务器的目录之下
    (2)案例1:将/home/zhang/目录下的内容推送到远端/tmp/wang/目录下,会把源目录的所有内容都推送到目标目录,内容以本地为主
    [[email protected] ~]# ansible 172.165.0.6 -m synchronize -a ‘src=/home/zhang/ dest=/tmp/wang/‘
    案例2:将/home/zhang/目录下的内容推送到远端/tmp/wang/目录下,会把源目录的所有内容都推送到目标目录,内容以本地为主,加delete=yes,会让两个目录保持一致,目标目录中原来的数据也会被删除
    [[email protected] ~]# ansible 172.165.0.6 -m synchronize -a ‘src=/home/zhang/ dest=/tmp/wang/ delete=yes‘
    技术图片
    案例3:将远方的文件同步到本地,使用mode选项,但是src就成为了远端服务器的目录,正好相反
    [[email protected] zhang]# ansible 172.165.0.6 -m synchronize -a ‘dest=/home/zhang/ src=/tmp/wang/ delete=yes mode=pull‘
    技术图片
    (3)参数:
    delete=yes:使两边的内容一样(以推送方为主)
    compress=yes:开启压缩,默认为开启
    8.2.13 replace模块
    这个模块可以说是相当于shell中的sed,我看了下他的光放文档中讲述的参数作用,基本和我的业务不沾边,有一个正则,但是它使用的是Python的正则,现在还不懂,等以后把这个学会了,再弯过来学习这个模块
    8.2.14 raw模块
    可以使用管道,sed,awk之类的
    ansible 192.168.70.78 -m raw -a "chdir=/data ifconfig eth0|head -1|grep Link|awk ‘{print $1}‘"
    8.2.15unarchive模块
    copy:在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在。
    creates:指定一个文件名,当该文件存在时,则解压指令不执行
    dest:远程主机上的一个路径,即文件解压的路径
    grop:解压后的目录或文件的属组
    list_files:如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项
    mode:解决后文件的权限
    src:如果copy为yes,则需要指定压缩文件的源路径
    owner:解压后文件或目录的属主

#直接传过去的
这个模块可以把压缩文件传输过去,并且传输过去之后解压的目录必须存在

  • name: add docker tomcat
    unarchive: src=/data/scripts/tms/tomcat.tar.gz dest=/data/docker119/ owner=root mode=755 exclude=Documentation

#需要下载的

分为3种,远端目录有的就设置copy=no,默认为yes,然后如果要从网上下载在传送,写url即可
8.2.16 fetch模块
fetch模块可以把远端服务器的文件拉到本地,并且生成一个以主机名命名的
[[email protected] ~]# ansible test -m fetch -a "src=/etc/fstab dest=/tmp/"
8.2.17 jenkis_job模块

  • name: Test
    hosts: jenkins
    tasks:
    • name: Test jenkins_job module
      jenkins_job:
      name: ‘{{project}}‘ #jenkins job的名字
      password: 45ec4d09e9870fd9eea4b92787bb6068 #jenkins server的认证密码
      url: http://114.55.227.11:8080 #jenkins server的访问地址
      user: jenkins #认证用户
      config: "{{ lookup(‘template‘, ‘config.xml‘) }}"
      8.2.18 supervisor模块
    • name: Start {{project}}0..3
      supervisorctl: name="{{item}}" state=started
      with_items:
      • ‘{{project}}:0‘
      • ‘{{project}}:1‘
      • ‘{{project}}:2‘
      • ‘{{project}}:3‘
        when: result | failed
        ignore_errors: True
        管理进程用的模块
        8.2.19 pause模块
        技术图片
        8.2.20debug
        当满足条件的时候,可以输出指定的字符串,当不满足条件时,则会跳过,不会输出字符串
  • name: test
    hosts: self
    vars:
    bianliang: ‘‘
    tasks:

    • name: echo love for vars
      debug: msg=‘i love you‘
      when: ansible_os_family =="RedHatiiii"

    • name: mkdir dir
      file: path=/root/etcd/{{ bianliang }} state=directory

[[email protected] etcd]# vim a.yml

  • name: test
    hosts: self
    vars:
    bianliang: ‘‘
    tasks:

    • name: echo love for vars
      debug: msg=‘i love you‘
      when: ansible_os_family =="RedHat"

    • name: mkdir dir
      file: path=/root/etcd/{{ bianliang }} state=directory
      技术图片
      8.2.21jenkins_job模块
  • name: Add jenkins job
    hosts: jenkins
    tasks:

    • name: Add jenkins job
      jenkins_job:
      name: ‘{{project}}‘
      password: 45ec4d09e9870fd9eea4b92787bb6068
      url: http://114.55.227.11:8080
      user: jenkins
      config: "{{ lookup(‘template‘, ‘/root/playbook/jenkins/config.xml‘) }}"
      8.2.22 wait_for模块
      vars:
      port: []

    • name: port check
      wait_for: port={{item}} delay=10 timeout=20
      with_items:
      • "{{port}}"

以上是关于ansible常用模块的主要内容,如果未能解决你的问题,请参考以下文章

Ansible概述及常用命令模块

Ansible------Ansible概述,搭建,常用模块介绍

Ansible playbooks入门和编写规范Ansible Playbooks常用模块介绍常用模块集合

Ansible playbooks入门和编写规范Ansible Playbooks常用模块介绍常用模块集合

ansible常用基础模块

ansible常用模块