ansible-doc到底有多好用,助你玩转各种模块

 

 

 #使用ansible-doc:查看各种模块的帮助

#命令格式:
ansible-doc -l        #列出所有的模块列表
ansible-doc -s 模块名  #查看指定模块的参数
ansible-doc 模块名     #查看指定模块的详细参数

#示例
ansible-doc copy #查看copy模块的帮助
ansible-doc yum  #查看yum模块的帮助

#查看yum帮助信息
EXAMPLES:

- name: install the latest version of Apache
  yum:
    name: httpd
    state: latest

- name: ensure a list of packages installed
  yum:
    name: "{{ packages }}"
  vars:
    packages:
    - httpd
    - httpd-tools

- name: remove the Apache package
  yum:
    name: httpd
    state: absent

 

#提示:

#在传送命令下载的时候如果此前有操作过,那些会显示执行成功,但是会显示绿色

#传送显示颜色信息说明
    1.黄色:对远程节点进行相应修改
    2.绿色:对远程节点不进行相应修改
    3.红色:操作执行有问题
    4.紫色:表示对命令执行发出警告信息(可能存在问题)

 

#常见模块概览

#常用模块            示例
command      #ansible k8s-node -m command -a 'uptime'
shell        #ansible k8s-node -m shell -a "free -m"
scripts      #ansible k8s-node -m script -a "/etc/ansible/init.sh"
copy         #ansible k8s-node -m copy -a "src=/etc/hosts dest=/tmp owner=root group=root mode=0755"
yum               #ansible k8s-node -m yum -a "name=httpd state=latest"
yum_repository    #添加yum仓库,用法可ansible-doc yum_repository查看帮助
group      #ansible k8s-node -m group -a "name=www gid=666"
user       #ansible k8s-node -m user -a "name=user1 state=present"
service    #ansible k8s-node -m service -a "name=httpd state=restarted"
file       #ansible k8s-node -m file -a "path=/data state=directory owner=www group=www recurese=yes"
              recurese(递归授权) state=touch(创建文件)
sysctl     #ansible k8s-node -m sysctl -a "name=net.ipv4.ip_forward value=1 reload=yes"
stat       #ansible k8s-node -m stat -a "path=/tmp/hosts"
get url #ansible k8s-node -m get_url -a "url=//dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm  dest=/tmp/ mode=0440 force=yes"
cron       #ansible k8s-node -m cron -a "name=list minute=*/30 job='ls tmp'"
setup
mount
#参数解释:-m:指定模块名,-a:命令参数

 

#常用模块的使用
1.command模块

为默认的模块,不指定-m参数时,就是使用command模块
有些命令不能执行,如:"<" "|" ">" "&"等
缺点:不支持管道,无法批量执行命令

#示例:检查ansible节点的内核版本
[root@k8s-master ~]# ansible k8s-node -a 'uname -r'
192.168.86.132 | CHANGED | rc=0 >>
3.10.0-1062.el7.x86_64
192.168.86.133 | CHANGED | rc=0 >>
3.10.0-1062.el7.x86_64
#提示:不指定hosts文件,默认使用/etc/ansible/hosts

 

2.shell模块

#在远程命令通过/bin/sh执行,支持各种命令
[root@k8s-master ~]# ansible k8s-node -m shell -a "free -m"
#提示:
#-a:是指定模块需要执行的命令
#-m: 指定模块名
192.168.86.133 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:           1819         190        1391           9         237        1479
Swap:          2047           0        2047
192.168.86.132 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:           1819         194        1366           9         258        1473
Swap:          2047           0        2047

 

3.scripts模块

#使用scripts模块可以在本地写一个脚本,在远程服务器上执行
[root@k8s-master ansible]# cat /etc/ansible/init.sh 
#!/bin/bash
date
hostname
​
#执行
[root@k8s-master ansible]# ansible k8s-node -m script -a "/etc/ansible/init.sh"
192.168.86.133 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 192.168.86.133 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 192.168.86.133 closed."
    ], 
    "stdout": "Sun May 24 23:50:48 EDT 2020\r\nnode2\r\n", 
    "stdout_lines": [
        "Sun May 24 23:50:48 EDT 2020", 
        "node2"
    ]
}
192.168.86.132 | CHANGED => {
  .....
}

 

4.copy模块

#实现主控制端向目标主机拷贝文件,类似scp功能
例如:将ansible主机上的/etc/hosts文件复制到主机组中的/tmp目录下
[root@k8s-master ~]# ansible k8s-node -m copy -a "src=/etc/hosts dest=/tmp owner=root group=root mode=0755"
192.168.86.133 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa", 
    "dest": "/tmp/hosts", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "54fb6627dbaa37721048e4549db3224d", 
    "mode": "0755", 
    "owner": "root", 
    "secontext": "unconfined_u:object_r:admin_home_t:s0", 
    "size": 158, 
    "src": "/root/.ansible/tmp/ansible-tmp-1590378818.52-2470-232195177895701/source", 
    "state": "file", 
    "uid": 0
}
#参数解释:
src: 指定源文件
dest: 指定目标文件
owner: 所属主
group: 所属组
mode: 权限

#查看效果
[root@node1 ~]# cd /tmp/
[root@node1 tmp]# ls -l
total 4
-rwxr-xr-x. 1 root root 158 May 24 23:53 hosts

 

5.yum模块

#yum模块可以提供的status状态:latest,present,installed ,更多信息使用ansible-doc查看帮助
例子:安装httpd
[root@k8s-master ~]# ansible k8s-node -m yum -a "name=httpd state=latest"
#提示:name=包名

移除
 tasks:
    - name: install  httpd Packages
      yum: name=httpd state=removed

 

6.yum_repository 添加仓库模块

[root@game project]# cat task_2.yml 
- hosts: all
  tasks:

    - name: Add Nginx Repo
      yum_repository:
        name:
          CentOS-nginx
        description:
          EPEL Nginx repo
        baseurl:
          http://nginx.org/packages/centos/7/$basearch/
        gpgcheck:
          no
        enabled:
          yes
#更多参数可参考ansible-doc yum_repository

 

7.service模块

#远程主机系统服务管理
#service常用参数
    name参数:用户指定需要操作的服务名称,如:nginx
    state参数:指定服务的状态,启动服务为started,停止位stopped,重启为restarted
    enabled参数:设置为开启启动,yes:为开机启动,no不开机启动

#例子:重启httpd服务
[root@k8s-master ~]# ansible k8s-node -m service -a "name=httpd state=restarted"

 

8.user用户模块

例如:添加用户
[root@k8s-master ~]# ansible k8s-node -m user -a "name=user1 state=present"

#提示:更多命令查看帮助ansible-doc user

 

9.sysctl模块

#远程主机sysctl配置
例如:开启路由转发功能
[root@k8s-master ~]# ansible k8s-node -m sysctl -a "name=net.ipv4.ip_forward value=1 reload=yes"
192.168.86.132 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true
}
192.168.86.133 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true
}
#查看效果
[root@node1 ~]# cat /proc/sys/net/ipv4/ip_forward
1

 

10.cron定时任务模块

#设定定时任务:远程主机crontab配置
例子:增加每30分钟执行ls /tmp
[root@k8s-master ~]# ansible k8s-node -m cron -a "name=list minute=*/30 job='ls tmp'"
192.168.86.133 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "list"
    ]
}
192.168.86.132 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "list"
    ]
}
查看效果
[root@node1 ~]# crontab  -l
#Ansible: list
*/30 * * * * ls tmp

 

11.stat模块

#获取远程文件信息
[root@k8s-master ~]# ansible k8s-node -m stat -a "path=/tmp/hosts"
192.168.86.133 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "stat": {
        "atime": 1590378819.9538696, 
        "attr_flags": "", 
        "attributes": [], 
        "block_size": 4096, 
        "blocks": 8, 
        "charset": "us-ascii", 
        "checksum": "7335999eb54c15c67566186bdfc46f64e0d5a1aa", 
        "ctime": 1590378819.9598696, 
        "dev": 64768, 
        "device_type": 0, 
        "executable": true, 
        "exists": true, 
        "gid": 0, 
        "gr_name": "root", 
           ........
        "xoth": true, 
        "xusr": true
    }
}

 

12.get url模块

#实现远程主机下载指定url到本地
例如:下载epel-release-latest-7.noarch.rpm到主机清单中的tmp目录下
[root@k8s-master ~]# ansible k8s-node -m get_url -a "url=//dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm  dest=/tmp/ mode=0440 force=yes"
#提示:url=https://xxx 的等号=前后不能有空格
#扩展:force=yes的作用
[root@k8s-master ~]# ansible-doc -s get_url    #在此输出找force信息
如果force=yes,下载文件如果内容和源目录下的内容不一样,则替换,如果一样就不下载了,如果force=no。则目标不存在才下载文件
#查看效果
[root@node1 ~]# ls -l /tmp/epel-release-latest-7.noarch.rpm 
-r--r-----. 1 root root 15264 May 25 00:11 /tmp/epel-release-latest-7.noarch.rpm

 

13.setup模块

setup模块主要用于收集远程主机的基本信息,可以作为变量来获取

#相关参数
ansible_all_ipv4_addresses # ipv4的所有地址
ansible_all_ipv6_addresses # ipv6的所有地址
ansible_date_time # 获取到控制节点时间
ansible_default_ipv4 # 默认的ipv4地址
ansible_distribution # 系统
ansible_distribution_major_version # 系统的大版本
ansible_distribution_version # 系统的版本号
ansible_domain #系统所在的域
ansible_env #系统的环境变量
ansible_hostname #系统的主机名
ansible_fqdn #系统的全名
ansible_machine #系统的架构
ansible_memory_mb #系统的内存信息
ansible_os_family # 系统的家族
ansible_pkg_mgr # 系统的包管理工具
ansible_processor_cores #系统的cpu的核数(每颗)
ansible_processor_count #系统cpu的颗数
ansible_processor_vcpus #系统cpu的总个数=cpu的颗数*CPU的核数
ansible_python # 系统上的python
ansible cache -m setup -a 'filter=*processor*' # 用来搜索

 

Tags: