二:Ansible常用模块

二:Ansible常用模块

一:Ansible命令模块

1.1 command

# 默认模块, 执行命令 [[email protected] ~]# ansible web_group -a "hostname" 

1.2 shell

# 如果需要一些管道操作,则使用shell [[email protected] ~]# ansible web_group -m shell -a "ps -ef|grep nginx" -f 50 

注意:command不识别管道符之类的操作

1.3 script

# 编写脚本

[[email protected] ~]# vim /root/yum.sh
#!/usr/bin/bash
yum install -y vsftpd

#在本地运行模块,等同于在远程执行,不需要将脚本文件进行推送目标主机执行
[[email protected] ~]# ansible web_group -m script -a "/root/yum.sh"

二:Ansible 软件管理模块

1.1 yum

#查看使用方法
[[email protected] ~]# ansible-doc yum
state:
present  安装软件包   默认是present,可以不写
absent   移除软件包
latest   安装最新软件包

name
     (包名httpd)     #本地yum源
    file://   #指定本地安装路径(yum localinstall 本地rpm包)
    http://   #指定yum源(从远程仓库获取rpm包)

[[email protected] ~]# ansible web_group -m yum -a "name=httpd state=present"

1.2 cron:定时任务

ansible web_group -m cron -a 'name="aaaaaaa" minute=0 hour=5,2 day=2 month=1 weekday=1-7 state=present job="/bin/sh /root/a.sh > /dev/null"'

name:注释
state:
    present
    absent
job:crontab要执行的命令

删除:
ansible web_group -m cron -a 'name="aaaaaaa state=absent"

分时日月周不写就直接*号

1.3 yum_repository:建YUM仓

[[email protected] ~]# ansible 'web_group' -m yum_repository -a "name=nginx description='zls_nginx' baseurl=http://nginx.org/packages/centos/7/$basearch/"

    name: 指定repo文件名
    description:描述(repo文件中name的值)
    baseurl: 指定yum源
    file:如果定义了file那么文件名以file为准,如果没有定义file文件名以name为准
    state:
        present  #创建(默认)
        absent   #删除

[[email protected] ~]# ansible 'web_group' -m yum_repository -a "name=nginx_new file='zls_nginx_new' description='zls_nginx' baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=no"

#删除
[[email protected] ~]# ansible 'web_group' -m yum_repository -a "name=nginx state=absent"
[[email protected] ~]# ansible 'web_group' -m yum_repository -a "name=nginx_new file=zls_nginx_new state=absent"
[[email protected] ~]# ansible 'web_group' -m yum_repository -a "name=nginx123 file=zls_nginx_new state=absent"

# 在已有的仓库文件中添加一个仓库
[[email protected] ~]# ansible 'web_group' -m yum_repository -a "name=nginx123 file='zls_nginx_new' description='zls_nginx' baseurl=http://download.driverzeng.com gpgcheck=no"

三:Ansible文件管理模块

1.1 file

[[email protected] ~]# ansible web_group -m file -a 'path=/tmp/zls state=directory owner=root group=root mode=0644'
    path: 指定创建的路径
    state:
        touch:创建文件
        directory:创建目录
        file:修改文件属性(默认)
        link:软连接
        absent:删除指定的文件或目录
    owner:指定属主
    group:指定属组
    mode:指定权限

1.2 get_url:下载

[[email protected] ~]# ansible web01 -m get_url -a 'url=https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-agent-4.4.0-1.el7.x86_64.rpm dest=/tmp mode=0644'

[[email protected] ~]# ansible web01 -m get_url -a 'url=http://test.driverzeng.com/Zabbix_File/percona-release-0.1-3.noarch.rpm dest=/tmp mode=0644 checksum=md5:ea13c36cf79e131bded48bac4f7e88c2'

url:指定软件包地址
dest:指定下载的路径
mode:指定文件的权限
checksum:
    md5:
    sha256:

1.3 unarchive:解压缩

[[email protected] ~]# ansible web02 -m unarchive -a 'src=/root/wordpress-5.0.3-zh_CN.tar.gz dest=/tmp'

src:指定压缩包的路径
dest:指定解压的位置
remote_src:
    yes:
    no:(默认)

四:Ansible服务管理模块

systemd

[[email protected] ~]# ansible web01 -m systemd -a 'name=nginx state=started'
name:指定服务名
state:
    started
    stopped
    restarted
    reloaded
enabled:
    true
    false

五:Ansible用户管理模块

1.1 user

#创建用户指定uid和gid,不创建家目录也不允许登陆
[[email protected] ~]# ansible web_group -m user -a "name=qls uid=888 group=888 shell=/sbin/nologin create_home=false"

1.2 group

[[email protected] ~]# ansible web_group -m group -a 'name=qls state=present gid=250'
    name:指定组名
    state:
        present:创建
        absent:删除
    gid:指定组的id

六:Ansible磁盘挂载模块

mount:挂载

[[email protected] ~]# ansible web01 -m mount -a 'path=/data src=172.16.1.31:/data fstype=nfs state=mounted'
path:挂载的路径
src:挂载点
fstype:挂载类型
state:
    present      # 开机挂载,仅将挂载配置写入/etc/fstab
    absent       # 卸载,并清除/etc/fstab
    mounted      # 挂载并写入/etc/fstab
    unmounted    # 卸载,不清除 /etc/fstab

七:Ansible主机信息模块

setup

为什么要讲这个模块?

做过自动化的小伙伴会觉得这个模块非常实用

在公司中总会有一些需求

比如:
1.根据不同主机不同IP创建对应IP的目录
2.根据不同主机不同主机名创建对应主机名的目录
3.自动化运维平台需要自动获取到主机的IP地址,内存信息,磁盘信息,主机名...等
4.如果安装数据库,分配内存为物理内存的80%,此时有3台不同物理内存的机器2G、4G、16G
写一个playbook的情况下,我需要获取到对应主机的内存并作出计算,写判断。

1.获取IP地址

[[email protected] ~]# ansible web01 -m setup -a 'filter=ansible_default_ipv4'
web01 | SUCCESS => {
    "ansible_facts": {
        "ansible_default_ipv4": {
            "address": "10.0.0.7",
            "alias": "eth0",
            "broadcast": "10.0.0.255",
            "gateway": "10.0.0.2",
            "interface": "eth0",
            "macaddress": "00:0c:29:f8:98:80",
            "mtu": 1500,
            "netmask": "255.255.255.0",
            "network": "10.0.0.0",
            "type": "ether"
        },
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false
}

2.获取主机名

[[email protected] ~]# ansible web01 -m setup -a 'filter=ansible_fqdn'
web01 | SUCCESS => {
    "ansible_facts": {
        "ansible_fqdn": "web01",
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false
}

3.获取内存信息

[[email protected] ~]# ansible web01 -m setup -a 'filter=ansible_memory_mb'
web01 | SUCCESS => {
    "ansible_facts": {
        "ansible_memory_mb": {
            "nocache": {
                "free": 1622,
                "used": 360
            },
            "real": {
                "free": 1068,
                "total": 1982,
                "used": 914
            },
            "swap": {
                "cached": 0,
                "free": 1023,
                "total": 1023,
                "used": 0
            }
        },
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false
}

4.其他信息参数

ansible_all_ipv4_addresses:仅显示ipv4的信息。
ansible_devices:仅显示磁盘设备信息。
ansible_distribution:显示是什么系统,例:centos,suse等。
ansible_distribution_major_version:显示是系统主版本。
ansible_distribution_version:仅显示系统版本。
ansible_machine:显示系统类型,例:32位,还是64位。
ansible_eth0:仅显示eth0的信息。
ansible_hostname:仅显示主机名。
ansible_kernel:仅显示内核版本。
ansible_lvm:显示lvm相关信息。
ansible_memtotal_mb:显示系统总内存。
ansible_memfree_mb:显示可用系统内存。
ansible_memory_mb:详细显示内存情况。
ansible_swaptotal_mb:显示总的swap内存。
ansible_swapfree_mb:显示swap内存的可用内存。
ansible_mounts:显示系统磁盘挂载情况。
ansible_processor:显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus:显示cpu个数(只显示总的个数)。

八:Ansible防火墙模块

1.1 selinux

[[email protected] ~]# ansible web01 -m selinux -a 'state=disabled'

1.2 firewalld

[[email protected] ~]# ansible web01 -m firewalld -a 'port=80/tcp state=enabled'

九:Ansible 数据库模块

1.1 mysql_db:创建数据库

- name: Create a new database with name 'jiangwei'
  mysql_db:
    name: jiangwei
    state: present
此时,遇到一个问题,playbook建库时,需要先登陆到数据库,登陆到数据库这个动作必须要自动完成,此时引入:
- login_host
        Host running the database.
        [Default: localhost]
        type: str

- login_password
        The password used to authenticate with.
        [Default: (null)]
        type: str

- login_port
        Port of the MySQL server. Requires `login_host' be defined as
        other than localhost if login_port is used.
        [Default: 3306]
        type: int

- login_user
        The username used to authenticate with.
        [Default: (null)]
        type: str

EX:
- name: Create a new database with name 'jiangwei'
  mysql_db:
    login_user: root
    login_password: '123'
    login_host: localhost
    name: jiangwei
    state: present

1.2 mysql_user:创建数据库用户

- name: Create database user with password and all database privileges =
  mysql_user:
    name: bob
    password: 12345
    priv: '*.*:ALL'
    state: present

EX:
- name: Create MySQL User
       mysql_user:
         name: wordpress
         password: '123456'
         priv: '*.*:ALL'
         host: '%'
         state: present

原文地址:https://www.cnblogs.com/captain-jiang/p/12078537.html

时间: 2024-10-14 11:56:33

二:Ansible常用模块的相关文章

ansible详解(二)----常用模块

ansible常用模块并行性和shell命令command|script|shell #重启webservers主机组的所有机器,每次重启10 台 ansible webservers -a "/sbin/reboot" -f 10 #以ju 用户身份在webservers组的所有主机运行foo 命令 ansible webservers -a "/usr/bin/foo" -u ju #以ju 用户身份sudo 执行命令foo(--ask-sudo-pass (-

进击的Python【第五章】:Python的高级应用(二)常用模块

Python的高级应用(二)常用模块学习 本章学习要点: Python模块的定义 time &datetime模块 random模块 os模块 sys模块 shutil模块 ConfigParser模块 shelve模块 xml处理 re正则表达式 一.Python模块的定义 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt这个函数,必须用语句"#include<math.h>"引入math.h这个头文件,否则是无法正常进行调用的.那么在Python中,如

ansible常用模块详解

ansible常用模块详解: ansible <host-pattern> [-m module_name] [-a args] [options] #ansible命令格式  指定主机组或ip地址  指定调用模块   传递给模块的参数   ansible-doc -l #列出可用模块 ansible-doc -s model_name #查看指定模块详细用法 command:ansible默认模块,对指定主机执行命令,不能理解特殊字符 例:ansible web -a 'date' #对we

Ansible 常用模块详解(3)

title: Ansible 常用模块详解(3) date: 2018-12-01 15:22:11 tags: Ansible categories: Ansible copyright: true --- Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是an

2. ansible常用模块

Ansible通过模块的方式来完成一些远程的管理工作. ansible-doc -l查看所有模块 ansible-doc -s module来查看某个模块的参数, ansible-doc help module来查看该模块更详细的信息. 模块命令 -i 设备列表路径,可以指定一些动态路径 -f 并发任务数 -private-key 私钥路径 -m 模块名称 -M 模块夹的路径 -a 参数 -k 登陆密码 -K sudo密码 -t 输出结果保存路径 -B 后台运行超时时间 -P 调查后台程序时间

ansible常用模块介绍

ansible查看模块用法 例子 查看shell 模块使用方法 [[email protected] opt]# ansible-doc -s shell 注: -i 指定配置文件  tomcatserver自己定义的工作组  -m 指定模块 file模块 file模块包含如下选项: force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下:另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no group:定义文件/目录的属组 mo

Ansible常用模块介绍及使用

ansible常用命令解析: 查看当前 ansible 都支持哪些模块: ansible-doc -l 查看某一模块可以使用的参数:ansible-doc -s copy (eg:copy模块) ansible用法: ansible 主机名 -m 模块名 -a 模块参数 -m:模块的名字,如果执行单一的命令不用加-m,默认走command -a: 模块参数,如果模块是command,-a 后面跟的就是命令参数 -i : 指定hosts文件位置      默认:/etc/ansible/hosts

Ansible常用模块及API

Ansible安装 安装EPEL作为安装Ansible的yum源(CentOS6.4): rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm 安装Ansible: yum install ansible -y 配置文件: 路径:/etc/ansible/hosts配置说明:webservers为组名,下面的ip或域名则是属于该组的主机. [webservers] 192.168.1.111

自动化运维工具--Ansible常用模块

注意:-a 参数后的命令用单引号:双引号有可能会出问题,特别是在user模块 模块一:测试目标主机是否在线,ping模块 主机如果在线,则回复Pong [[email protected] ~]# ansible web -m ping 192.168.30.36 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.30.32 | SUCCESS => { "c