ansible 常用模块(一)

ansible 命令:ansible -i inventory文件 主机/组名 -e key=value -m 模块 -a '模块参数'

选项说明

  • -i inventory文件: 是可选参数。默认读取 /etc/ansible/hosts 文件。
  • 主机/组名: 需要存在inventory文件中
  • -m 模块: 可选参数。默认是 command
  • -a '模块参数': 模块需要传的参数
  • -e key=value:可选参数,是设置变量

输出颜色说明:

  1. 绿色:执行成功,没有改变内容
  2. 黄色:执行成功,有修改内容
  3. 红色:执行报错
  4. 紫色(粉红色):告警,但不影响执行

命令执行模块

command

在目标上执行命令

$ ansible -i ./hosts local -m command -a 'whoami'
192.168.32.166 | CHANGED | rc=0 >>
ops

$ ansible -i ./hosts local -a 'whoami'
192.168.32.166 | CHANGED | rc=0 >>
ops

注意:命令含有 $HOSTNAME *, <, >, |, ;& 等字符串会有意向不到的问题。

shell

在目标上执行 shell 命令

$ ansible -i ./hosts local -m shell -a 'cat /etc/passwd | grep ops'
192.168.32.166 | CHANGED | rc=0 >>
ops:x:1000:1000::/home/ops:/bin/bash

script

传输后在远程节点上运行本地脚本

$ cat ~/test.sh 
echo "第一个参数: $1"

$ ansible -i hosts local -m script -a "~/test.sh jiaxzeng"
192.168.32.166 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 192.168.32.166 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 192.168.32.166 closed."
    ], 
    "stdout": "\r\n第一个参数: jiaxzeng\r\n", 
    "stdout_lines": [
        "", 
        "第一个参数: jiaxzeng"
    ]
}

文件

file

管理文件和文件属性

参数 含义
path(required) 管理的文件的路径,别名:dest, name
state absent, directory, file, link, touch。默认是file
  • file:这主要作为统计工作,并将返回路径的当前状态。不创建文件
  • directory:创建命令
  • absent:删除目录或文件
  • link: 创建软连接
  • touch: 创建空文件文件
  • src 要链接到的文件的路径(软连接)
    owner 文件或目录的所有者
    group 文件或目录的组所有者
    mode 文件或目录的权限
    # 1. 创建目录
    $ ansible -i hosts local -m file -a 'path=/tmp/test state=directory'
    
    # 2. 创建/tmp/test/test.txt文件,所有者和所有者组都设置为ops。权限设置为600
    $ ansible -i hosts local -m file -a 'path=/tmp/test/test.txt owner=ops group=ops mode=600 state=touch'
    
    # 3. 删除目录
    $ ansible -i hosts local -m file -a 'path=/tmp/test state=absent'
    
    # 4. 将/etc/hosts软连接到/tmp/hosts-link
    $ ansible -i hosts local -m file -a 'path=/tmp/hosts_link src=/etc/hosts state=link'
    

    copy

    将文件复制到远程位置

    参数 含义
    dest(required) 文件应复制到的远程绝对路径
  • 如果 src 是一个目录,那么它也必须是一个目录
  • 如果 dest 是不存在的路径,并且 dest 以“/”结尾或 src 是目录,则创建 dest
  • 如果 dest 是相对路径,则起始目录由远程主机确定
  • 如果 src 和 dest 是文件,则不会创建 dest 的父目录,并且如果该目录尚不存在,则任务将失败
  • src 要复制到远程服务器的文件的本地路径。这可以是绝对的或相对的。如果path是目录,则递归复制。
  • 如果路径以“/”结尾,则仅将该目录的内部内容复制到目标。
  • 如果它不以“/”结尾,则复制目录本身及其所有内容。 此行为类似于 rsync 命令行工具
  • backup 创建一个包含时间戳信息的备份文件,以便在您以某种方式错误地破坏它时可以恢复原始文件
    owner 文件或目录的所有者
    group 文件或目录的组所有者
    mode 文件或目录的权限
    # 1. 将本地的/home/ops/ansible/config,复制到远程主机的 /tmp/ 目录下
    $ ansible -i hosts local -m copy -a 'dest=/tmp/ src=/home/ops/ansible/config'
    
    # 2. 将本地的/home/ops/ansible/config,复制到远程主机的 /tmp/ 目录下,备份原来的文件
    $ ansible -i hosts local -m copy -a 'dest=/tmp/ src=/home/ops/ansible/config backup=yes'
    
    # 3. 将本地的/home/ops/ansible/config,复制到远程主机的 /tmp/ 目录下,所有者和所有者组都设置为ops,权限设置400
    $ ansible -i hosts local -m copy -a 'dest=/tmp/ src=/home/ops/ansible/config user=ops group=ops mode=400'
    

    template

    将文件模板输出到目标主机

    参数 含义
    src Ansible 控制器上 Jinja2 格式模板的路径。 这可以是相对路径或绝对路径。 文件必须使用 utf-8 编码,但可以使用 output_encoding 来控制输出模板的编码
    dest 在远程计算机上呈现模板的位置
    backup 创建一个包含时间戳信息的备份文件,以便在您以某种方式错误地破坏它时可以恢复原始文件
    owner 文件或目录的所有者
    group 文件或目录的组所有者
    mode 文件或目录的权限
    $ cat server.conf.j2 
    name: {{ name }}
    
    # 变量写在inventory文件(./hosts)中,示例如下
    # [local:vars]
    # name=jiaxzeng
    
    # 1. 将本地的server.conf.j2模板文件,渲染到/tmp/server.conf
    $ ansible -i ./hosts local -m template -a 'src=server.conf.j2 dest=/tmp/server.conf'
    
    # 2. 将本地的server.conf.j2模板文件,渲染到/tmp/server.conf,设置权限为644
    $ ansible -i hosts local -m template -a 'src=server.conf.j2 dest=/tmp/server.conf mode=0644'
    

    fetch

    从远程节点获取文件

    参数 含义
    src(required) 要获取的远程系统上的文件,只能是文件,不能是目录
    dest(required) ansible存放文件的路径。会加上src路径存放
  • 例如src=/tmp dest=/etc/hosts,那么ansible存放hosts文件位置在 /tmp/etc/hosts 上
  • $ ansible -i hosts local -m fetch -a "src=/etc/hosts dest=/tmp"
    192.168.32.166 | CHANGED => {
        "changed": true, 
        "checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa", 
        "dest": "/tmp/192.168.32.166/etc/hosts",   # 这里也有提示ansible主机存放路径
        "md5sum": "54fb6627dbaa37721048e4549db3224d", 
        "remote_checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa", 
        "remote_md5sum": null
    }
    

    get_url

    从 HTTP、HTTPS 或 FTP 下载文件到节点

    参数 含义
    url(required) HTTP、HTTPS 或 FTP URL,格式为 (http
    dest(required) 下载文件的绝对路径
    client_cert 证书cert文件路径
    client_key 证书key文件路径
    url_username 用户名
    url_password 用户名的密码
    owner 文件或目录的所有者
    group 文件或目录的组所有者
    mode 文件或目录的权限
    $ ansible -i hosts local -m get_url -a "url=https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/vim-common-7.4.629-7.el7.x86_64.rpm dest=/tmp/"
    

    安装服务

    yum_repository

    添加或删除 YUM 存储库

    参数 含义
    name(required) 此选项在存储库文件中构建存储库的部分名称,中括号里面的内容
    description 描述存储库的人类可读字符串。 此选项对应于存储库文件中的name属性
    baseurl 下载包的路径
    enabled 是否使用这个存储库, 默认 yes
    gpgcheck 是否应该对包执行 GPG 签名检查。可选 yesno,没有默认值
    gpgkey 指向存储库的 ASCII-armored GPG 密钥文件的 URL
    state 存储库文件的状态 默认 present
    file 用于保存存储库的不带 .repo 扩展名的文件名。默认为 name 的
    # 添加yum源
    $ ansible -i hosts local -m yum_repository -a 'name="epel" description="ansible add epel" baseurl="http://mirrors.aliyun.com/epel/7/$basearch" enabled=yes gpgcheck=no'
    
    # 删除yum源
    $ ansible -i hosts local -m yum_repository -a 'name="epel" state=absent'
    

    yum

    使用 yum 包管理器管理包

    参数 含义
    name 包名称或带有版本的包说明符,例如 name-1.0
    state absent installed latest present removed,默认:None
  • 安装: present or installed, latest
  • 卸载:absent or removed
  • enablerepo 用于启用安装/更新操作的存储库的 Repoid
    # 安装vim包
    $ ansible -i hosts local -m yum -a "name=vim state=present"
    
    # 卸载vim包
    $ ansible -i hosts local -m yum -a "name=vim state=absent" 
    
    # 指定 epel 源安装ansible
    $ ansible -i hosts local -m yum -a "name=ansible state=present enablerepo=epel" 
    

    服务管理

    systemd

    管理服务

    参数 含义
    name 服务名称
    enabled 服务是否应在系统启动时启动
    state reloaded、restarted、started、stopped 服务
    # 停止服务
    $ ansible -i hosts local -m systemd -a "name=firewalld state=stopped"
    
    # 启动并加入开机自启
    $ ansible -i hosts local -m systemd -a "name=firewalld state=started enabled=yes"
    

    查看帮助文档

    命令方式

    # 查看有哪些模块
    ansible-doc -l
    
    # 查看具体模块使用方式
    ansible-doc -s 模块名称
    

    官网文档

    ansible builtin 官方文档传送门 : https://docs.ansible.com/ansible/2.10/collections/ansible/builtin/index.html#modules
    ansible posix 官方文档传送门: https://docs.ansible.com/ansible/2.10/collections/ansible/posix/index.html#modules

    posted @ 2023-06-27 10:50  jiaxzeng  阅读(154)  评论(0)    收藏  举报