美文网首页
Ansible-9 ansible常用模块

Ansible-9 ansible常用模块

作者: Habit_1027 | 来源:发表于2023-02-05 09:34 被阅读0次

    一、command & shell 模块

    说明

    两个模块都是在远程服务器上去执行命令。但command模块是ad-hoc的默认模块,在执行ad-hoc时,若不指定模块的名字则默认使用此模块.常用参数如下:
    command & shell 
    - chdir       在运行命令之前,切换到此目录。
    - executable  更改用于执行命令的shell(bash,sh),需要是可执行文件的绝对路径
    

    举例

    // ad-hoc 默认在不指定 -m 参数的时候, 使用了默认的command 模块
    [root@mpn-master Inventory]# ansible all -i web111 -a "ls /root"
    10.3.134.111 | CHANGED | rc=0 >>
    anaconda-ks.cfg
    
    [root@mpn-master Inventory]# ansible all -i web111 -m command -a "ls /root"
    10.3.134.111 | CHANGED | rc=0 >>
    anaconda-ks.cfg   //等同第一个命令
    [root@mpn-master Inventory]# ansible all -i web111 -m shell -a "ls /root"
    10.3.134.111 | CHANGED | rc=0 >>
    anaconda-ks.cfg
    

    二、raw模块

    说明

    执行原始的命令,而不是通过模块子系统。在任何情况下,使用shell或命令模块是合适的。给定原始的参数直接通过配置的远程shell运行。可返回标准输出、错误输出和返回代码。此模块没有变更处理程序支持。
    这个模块不需要远程系统上的Python,就像脚本模块一样。此模块也支持Windows目标。
    

    举例

    #批量修改主机名和/etc/hosts
    第一步:在/etc/ansible/hosts 里面新增相关信息
    [web]
    192.168.10.1  node-1
    192.168.10.2  node-2
    192.168.10.3  nginx
    
    第二步:
    ---
    - hosts: web
      tasks:
      - name: change hostname
        raw: "echo {{hostname|quote}} > /etc/hostname"
      - name: hostnamectl
        shell: hostnamectl set-hostname {{hostname|quote}}
    
      - name: change hosts
        raw: "echo {{ ansible_all_ipv4_addresses[0] }} {{hostname|quote}} >> /etc/hosts"
    

    三、ping 模块

    说明

    检查指定节点机器是否还能连通,用法很简单,不涉及参数,主机如果在线,则返回pong
    

    举例

    [root@localhost ~]# ansible web -m ping
    192.168.10.1 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    192.168.10.2 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    

    四、script 模块

    说明

    将管理节点上的脚本传递到远程服务器上进行执行,理论上此模块的执行完全不需要被管理服务器上有Python。
    

    举例

    // 管理节点上的一个脚本
    [root@mpn-master ~]# cat /root/a.sh
    #/bin/sh
    ip a
    
    
    [root@mpn-master ~]# ansible all -i 10.3.134.127, -m script -a "/root/a.sh"
    10.3.134.127 | CHANGED => {
        "changed": true, 
        "rc": 0, 
        "stderr": "Shared connection to 10.3.134.127 closed.\r\n", 
        "stderr_lines": [
            "Shared connection to 10.3.134.127 closed."
        ], 
        "stdout": "1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1\r\n    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00\r\n    inet 127.0.0.1/8 scope host lo\r\n       valid_lft forever preferred_lft forever\r\n    inet6 ::1/128 scope host \r\n       valid_lft forever preferred_lft forever\r\n2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000\r\n    link/ether 00:0c:29:40:eb:04 brd ff:ff:ff:ff:ff:ff\r\n    inet 10.3.134.127/24 brd 10.3.134.255 scope global ens32\r\n       valid_lft forever preferred_lft forever\r\n    inet6 fe80::3a71:8c5f:c51:d951/64 scope link \r\n       valid_lft forever preferred_lft forever\r\n", 
        "stdout_lines": [
            "1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1", 
            "    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00", 
            "    inet 127.0.0.1/8 scope host lo", 
            "       valid_lft forever preferred_lft forever", 
            "    inet6 ::1/128 scope host ", 
            "       valid_lft forever preferred_lft forever", 
            "2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000", 
            "    link/ether 00:0c:29:40:eb:04 brd ff:ff:ff:ff:ff:ff", 
            "    inet 10.3.134.127/24 brd 10.3.134.255 scope global ens32", 
            "       valid_lft forever preferred_lft forever", 
            "    inet6 fe80::3a71:8c5f:c51:d951/64 scope link ", 
            "       valid_lft forever preferred_lft forever"
        ]
    }
    

    五、cron 模块

    说明

    管理远程节点的CRON 服务。等同于Linux 中的CRON。 常用命令如下:
    - name   指定一个cron job 的名字。一定要指定,便于日之后删除。
    - minute 指定分钟,可以设置成(0-59, *, */2 等)格式。 默认是 * , 也就是每分钟。
    - hour   指定小时,可以设置成(0-23, *, */2 等)格式。 默认是 * , 也就是每小时。
    - day    指定天,  可以设置成(1-31, *, */2 等)格式。 默认是 * , 也就是每天。
    - month  指定月份, 可以设置成(1-12, *, */2 等)格式。 默认是 * , 也就是每周。
    - weekday 指定星期, 可以设置成(0-6 for Sunday-Saturday, * 等)格式。默认是 *,也就是每星期。
    - job    指定要执行的内容,通常可以写个脚本,或者一段内容。
    - state  指定这个job的状态,可以是新增(present)或者是删除(absent)。 默认为新增(present)
    

    举例

    // 新建一个 CRON JOB 任务
    # ansible all -i 10.3.134.111,10.3.134.127 -m cron -a "name='create new job' minute='0' job='ls -alh > /dev/null'"
    // 删除一个 CRON JOB 任务,删除时,一定要正确指定job 的name参数,以免误删除。
    # ansible all -i 10.3.134.111,10.3.134.127 -m cron -a "name='create new job' state=absent" 
    
    验证
    # crontab -l
    #Ansible: create new job
    0 * * * * ls -alh > /dev/null
    

    六、yum模块

    说明

    这个模块是RedHat / CentOS作为远端节点的OS的时候,用的最多的。Yum是RedHat / CentOS包管理工具
    使用yum软件包管理器管理软件包,其选项有:
    – config_file:yum的配置文件 (optional)
    – disable_gpg_check:关闭gpg_check (optional)
    – disablerepo:不启用某个源 (optional)
    – enablerepo:启用某个源(optional)
    – name:要进行操作的软件包的名字,默认最新的程序包,指明要安装的程序包,可以带上版本号,也可以传递一个url或者一个本地的rpm包的路径
    – state:状态(present,absent,latest),表示是安装还卸载
       present:默认的,表示为安装
       lastest: 安装为最新的版本
       absent:表示删除
    

    举例

    [root@localhost ~]# ansible test -m yum -a 'name=httpd state=latest'
    [root@localhost ~]# ansible test -m yum -a 'name="@Development tools" state=present'
    [root@localhost ~]# ansible test -m yum -a 'name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present'
    

    七、apt模块

    说明

    这个模块是ubuntu作为远端节点的OS的时候,用的最多的。Apt是啥就不多说了,Ubuntu/Debian的包管理工具。
    – deb: 用于安装远程机器上的.deb后缀的软件包(optional)
    – install_recommends:这个参数可以控制远程电脑上是否只是下载软件包,还是下载后安装,默认参数为true,设置为false的时候只下载软件包,不安装
    – update_cache: 当这个参数为yes的时候等于apt-get update(optional)
    – name: apt要下载的软件包名字,支持name=git=1.6 这种制定版本的模式
    – state:状态(present,absent,latest),表示是安装还卸载
       present:默认的,表示为安装
       lastest: 安装为最新的版本
       absent:表示删除
    

    举例

    # 在安装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
    

    八、pip模块

    说明

    用于管理Python库依赖项,为了使用pip模块,必须提供参数name或者requirements
    – chdir: 执行pip命令前cd进入的目录
    – name:要安装的Python库的名称或远程包的URL。
    – requirements:一个pip requirements.txt文件的路径,它应该是远程系统的本地文件,如果使用chdir选项,则可以将文件指定为相对路径。
    – version:指定的Python库的安装版本。
    – extra_args:额外的参数传递给pip。
    – executable:显式可执行文件或可执行文件的路径名,用于为系统中安装的特定版本的Python运行pip。 例如pip-3.3,如果系统中安装了Python 2.7和3.3,并且想要为Python 3.3安装运行pip。 它不能与“virtualenv”参数一起指定(在2.1中添加)。 默认情况下,它将采用适用于python解释器的版本。 pip3在python 3上,pip2或pip在python 2上。
    – virtualenv:要安装到的virtualenv目录的可选路径。 它不能与’executable’参数一起指定(在2.1中添加)。 如果virtualenv不存在,则将在安装软件包之前创建它。 可选的virtualenv_site_packages,virtualenv_command和virtualenv_python选项会影响virtualenv的创建。
    – virtualenv_command:用于创建虚拟环境的命令或路径名。 例如pyvenv,virtualenv,virtualenv2,~/bin /virtualenv,/usr/local/bin/virtualenv。
    – virtualenv_python:用于创建虚拟环境的Python可执行文件。 例如python3.5,python2.7。 未指定时,将使用用于运行ansible模块的Python版本。 当virtualenv_command使用pyvenv或-m venv模块时,不应使用此参数。
    – state:状态(present,absent,latest, forcereinstall),表示是安装还卸载
       present:默认的,表示为安装
       lastest: 安装为最新的版本
       absent:表示删除
       forcereinstall:“forcereinstall”选项仅适用于可ansible 2.1及更高版本
    

    举例

    # 安装bottle python包。
    - pip:
        name: bottle
    
    # 在0.11版安装bottle python包。
    - pip:
        name: bottle
        version: 0.11
    
    # 使用远程协议(bzr +,hg +,git +,svn +)安装MyApp。 您不必在extra_args中提供'-e'选项。
    - pip:
        name: svn+http://myrepo/svn/MyApp#egg=MyApp
    
    # 使用远程协议(bzr +,hg +,git +)安装MyApp。
    - pip:
        name: git+http://myrepo/app/MyApp
        
    # 从本地压缩包安装MyApp
    - pip:
        name: file:///path/to/MyApp.tar.gz
    

    九、synchronize模块

    说明

    – 使用rsync同步文件,将主控方目录推送到指定节点的目录下,其参数如下:
    – delete: 删除不存在的文件,delete=yes 使两边的内容一样(即以推送方为主),默认no
    – src: 要同步到目的地的源主机上的路径; 路径可以是绝对的或相对的。如果路径使用"/“来结尾,则只复制目录里的内容,如果没有使用”/"来结尾,则包含目录在内的整个内容全部复制
    – dest:目的地主机上将与源同步的路径; 路径可以是绝对的或相对的。
    – dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议。
    – mode: push或pull,默认push,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件。
    – rsync_opts:通过传递数组来指定其他rsync选项。
    

    举例

    # 将控制机器上的src同步到远程主机上
    - synchronize:
        src: some/relative/path
        dest: /some/absolute/path
    
    # 同步传递额外的rsync选项
    - synchronize:
        src: /tmp/helloworld
        dest: /var/www/helloworld
        rsync_opts:
          - "--no-motd"
          - "--exclude=.git"
    

    十、template模块

    说明

    基于模板方式生成一个文件复制到远程主机(template使用Jinjia2格式作为文件模版,进行文档内变量的替换的模块。它的每次使用都会被ansible标记为”changed”状态。)
    – backup: 如果原目标文件存在,则先备份目标文件
    – src:在ansible控制器上的Jinja2格式化模板的路径。 这可以是相对或绝对的路径。
    – dest:将模板渲染到远程机器上的位置。
    force:是否强制覆盖,默认为yes
    – owner:目标文件属主
    – group:目标文件属组
    – mode:目标文件的权限模式,模式可以被指定为符号模式(例如,u + rwx或u = rw,g = r,o = r)。
    

    举例

    # Example from Ansible Playbooks
    - template:
        src: /mytemplates/foo.j2
        dest: /etc/file.conf
        owner: bin
        group: wheel
        mode: 0644
    
    # 同样的例子,但使用等效于0644的符号模式
    - template:
        src: /mytemplates/foo.j2
        dest: /etc/file.conf
        owner: bin
        group: wheel
        mode: "u=rw,g=r,o=r"
    

    十一、copy模块

    说明

    在远程主机执行复制操作文件。
    – src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/“来结尾,则只复制目录里的内容,如果没有使用”/“来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
    – content:用于替代"src”,可以直接设定指定文件的值
    – dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
    – directory_mode:递归的设定目录的权限,默认为系统默认权限
    – force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
    – others:所有的file模块里的选项都可以在这里使用
    

    举例

    - copy:
        src: /srv/myfiles/foo.conf
        dest: /etc/foo.conf
        owner: foo
        group: foo
        mode: 0644
    
    # 与上述同样的例子,但是使用等价于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
    

    十二、user 模块与group模块

    说明

    user模块是请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel, groupmod 三个指令。
    
    1、user模块
    – home:指定用户的家目录,需要与createhome配合使用。
    – groups:指定用户的属组。
    – uid:指定用的uid。
    – password:指定用户的密码。
    注意:指定password参数时,不能使用明文密码,因为后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,所以需要先将密码字符串进行加密处理。然后将得到的字符串放到password中即可。
    – name:指定用户名。
    – createhome:是否创建家目录 yes|no。
    – system:是否为系统用户。
    – remove:当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r。
    – state:是创建还是删除。(present,absent)
    – shell:指定用户的shell环境。
    – generate_ssh_key:是否为相关用户生成SSH密钥。 这不会覆盖现有的SSH密钥。
    – ssh_key_bits:可选择指定要创建的SSH密钥中的位数。
    – ssh_key_passphrase:设置SSH密钥的密码。 如果没有提供密码,SSH密钥将默认没有密码。
    – ssh_key_file:指定SSH密钥文件名(可选)。 如果这是一个相对的文件名,那么它将是相对于用户的主目录。
    – ssh_key_type:指定要生成的SSH密钥的类型(可选)。 可用的SSH密钥类型将取决于目标主机上的实现。
    

    举例

    # 使用bash shell添加用户“james”,将组“管理员”和“开发人员”附加到用户组
    - user:
        name: james
        shell: /bin/bash
        groups: admins,developers
        append: yes
    
    # 删除用户'johns'
    - user:
        name: johnd
        state: absent
        remove: yes
    
    # 在~/.ssh/id_rsa中为用户jsmith创建一个2048位的SSH密钥
    - user:
        name: jsmith
        generate_ssh_key: yes
        ssh_key_bits: 2048
        ssh_key_file: .ssh/id_rsa
    
    2、group模块
    – gid:指定用的gid。
    – name:指定用户名。
    – state:是创建还是删除。(present,absent)
    – system:如果是,则表示创建的组是系统组。
    
    # Example group command from Ansible Playbooks
    - group:
        name: somegroup
        state: present
    
    

    十三、service 模块

    说明

    用于管理服务。
    – arguments:给命令行提供一些选项
    – enabled:是否开机启动 yes|no, 要求状态(state)和启用(enabled)中至少有一个。
    – name:必选项,服务名称
    – runlevel:运行级别
    – sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
    – state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
    

    举例

    # 启动服务httpd,如果不运行
    - service:
        name: httpd
        state: started
    
    # 停止服务httpd,如果运行
    - service:
        name: httpd
        state: stopped
        
    # 启用服务httpd的示例操作,而不使用运行状态
    - service:
        name: httpd
        enabled: yes
    

    十四、get_url 模块

    说明

    该模块主要用于从http、ftp、https服务器上下载文件(类似于wget),主要有如下选项:
    – sha256sum:下载完成后进行sha256 check;
    – timeout:下载超时时间,默认10s
    – url:下载的URL
    – url_password、url_username:主要用于需要用户名密码进行验证的情况
    – dest:将文件下载到哪里的绝对路径。如果dest是目录,则使用服务器提供的文件名,或者如果没有提供,将使用远程服务器上的URL的基本名称。
    – headers:以格式“key:value,key:value”为请求添加自定义HTTP标头。
    

    举例

    - name: Download foo.conf
      get_url:
        url: http://example.com/path/file.conf
        dest: /etc/foo.conf
        mode: 0440
    
    - name: Download file with custom HTTP headers
      get_url:
        url: http://example.com/path/file.conf
        dest: /etc/foo.conf
        headers: 'key:value,key:value'
    
    - name: Download file with check (sha256)
      get_url:
        url: http://example.com/path/file.conf
        dest: /etc/foo.conf
        checksum: sha256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
    

    十五、fetch模块

    说明

    它用于从远程机器获取文件,并将其本地存储在由主机名组织的文件树中。
    – src:远程系统上要获取的文件。 这必须是一个文件,而不是一个目录。 后续版本可能会支持递归提取。
    – dest:保存文件的目录。 例如,如果dest目录是/backup,在主机host.example.com上命名为/ etc/profile的src文件将被保存到/backup/host.example.com/etc/profile。
    – flat:允许您覆盖将目标文件添加到主机名/ path / to / file的默认行为。
    

    举例

    # 将文件存储到/tmp/fetched/host.example.com/tmp/somefile中
    - fetch:
        src: /tmp/somefile
        dest: /tmp/fetched
    
    # 直接指定路径
    - fetch:
        src: /tmp/somefile
        dest: /tmp/prefix-{{ inventory_hostname }}
        flat: yes
    
    # 指定目标路径
    - fetch:
        src: /tmp/uniquefile
        dest: /tmp/special/
        flat: yes
    

    十六、file模块

    说明

    file模块主要用于远程主机上的文件操作,file模块包含如下选项:
    – force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
    – group:定义文件/目录的属组
    – mode:定义文件/目录的权限
    – owner:定义文件/目录的属主
    – path:必选项,定义文件/目录的路径
    – recurse:递归的设置文件的属性,只对目录有效
    – src:要被链接的源文件的路径,只应用于state=link的情况
    – dest:被链接到的路径,只应用于state=link的情况
    – state:
       directory:如果目录不存在,创建目录
       file:即使文件不存在,也不会被创建
       link:创建软链接
       hard:创建硬链接
       touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
       absent:删除目录、文件或者取消链接文件
    

    举例

    # 更改文件所有权,组和模式。 当使用八进制数指定模式时,第一个数字应始终为0。
    - file:
        path: /etc/foo.conf
        owner: foo
        group: foo
        mode: 0644
        
    # touch创建文件,使用符号模式设置权限(相当于0644)
    - file:
        path: /etc/foo.conf
        state: touch
        mode: "u=rw,g=r,o=r"
    
    # touch创建文件,添加/删除一些权限
    - file:
        path: /etc/foo.conf
        state: touch
        mode: "u+rw,g-wx,o-rwx"
    
    # 创建一个目录,如果它不存在
    - file:
        path: /etc/some_directory
        state: directory
        mode: 0755
    

    十七、unarchive模块

    说明

    用于解压文件,模块包含如下选项:
    – copy:在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在。
    – creates:指定一个文件名,当该文件存在时,则解压指令不执行
    – dest:远程主机上的一个路径,即文件解压的绝对路径。
    – group:解压后的目录或文件的属组
    – list_files:如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项
    – mode:解压后文件的权限
    – src:如果copy为yes,则需要指定压缩文件的源路径
    – owner:解压后文件或目录的属主
    

    举例

    - name: 将foo.tgz解压缩到/var/lib/foo中
      unarchive:
        src: foo.tgz
        dest: /var/lib/foo
    
    - name: 解压远程计算机上已存在的文件
      unarchive:
        src: /tmp/foo.zip
        dest: /usr/local/bin
        remote_src: yes
    
    - name: 解压文档需要下载的文件(2.0中添加)
      unarchive:
        src: https://example.com/example.zip
        dest: /usr/local/bin
        remote_src: yes
    

    相关文章

      网友评论

          本文标题:Ansible-9 ansible常用模块

          本文链接:https://www.haomeiwen.com/subject/pmxghdtx.html