美文网首页
Ansible服务

Ansible服务

作者: chenxuyuan123 | 来源:发表于2021-02-26 16:14 被阅读0次

    一:什么是Ansible

    Ansible是python中的一套模板,系统中的一套自动化工具,只需要使用 ssh 协议连接及可用来系统管理、自动化执行命令等任务

    二:Ansible安装部署

    [root@m01 ~]# yum install ansible -y
    

    三:Ansible主机清单

    3.1 配置主机组相关配置

    定义要管理的主机
    [root@m01-61 etc]# vim /etc/ansible/hosts
    [web]
    172.16.1.8
    172.16.1.9
    172.16.1.7
    
    因为是使用ssh协议去连接的,如果之前没有分发公钥,需要输入用户名和密码,就可以直接在主机组里面定义
    [web]
    172.16.1.8 
    172.16.1.9 
    
    也可以使用变量,这个变量对整个web主机组生效
    [web:var]
    ansible_ssh_pass='123456'
    

    四:Ansilbe常用模块

    4.1 模块语法

    参照ansible官网学校
    https://docs.ansible.com/

    ansilble 主机名称/主机组名称/主机地址/ -m 模块名称 -a "执行什么动作"
    

    4.2 ping模板

    [root@m01-61 etc]# ansible web -m ping
    172.16.1.7 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    172.16.1.8 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    172.16.1.9 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    

    4.3 command模块

    类似于shell,但是只能执行简单的命令,复杂的命令和有些符号不能识别,用的比较少

    查看hostname
    [root@m01-61 etc]# ansible web -m command -a "hostname"
    172.16.1.9 | CHANGED | rc=0 >>
    web03-9
    172.16.1.7 | CHANGED | rc=0 >>
    web01-7
    172.16.1.8 | CHANGED | rc=0 >>
    web02-8
    

    4.4 shell 模板

    使用命令查看ip

    [root@m01-61 etc]# ansible web -m shell -a "ifconfig | grep eth0"
    172.16.1.7 | CHANGED | rc=0 >>
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    172.16.1.9 | CHANGED | rc=0 >>
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    172.16.1.8 | CHANGED | rc=0 >>
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    
    

    执行shell脚本

    执行shell脚本在待执行的shell脚本的主机上创建sh脚本
    [root@web03-9 opt]# vim hello.sh 
    #!/bin/sh
    echo "`hostname`"
    
    使用ansible执行shell脚本
    [root@m01-61 etc]# ansible web -m shell -a "sh /opt/hello.sh"
    172.16.1.9 | CHANGED | rc=0 >>
    web03-9
    

    4.5 copy拷贝文件

    拷贝m01的hosts文件到其他主机的/opt目录下

    [root@m01-61 opt]# ansible 172.16.1.8 -m copy -a "src=/etc/hosts dest=/opt"
    172.16.1.8 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "checksum": "7c9d1d53a8b6f35918595fabccf5dc760155731e", 
        "dest": "/opt/hosts", 
        "gid": 0, 
        "group": "root", 
        "mode": "0644", 
        "owner": "root", 
        "path": "/opt/hosts", 
        "size": 511, 
        "state": "file", 
        "uid": 0
    }
    

    在传输文件时,修改文件的属主和属组信息

    [root@m01-61 /]# ansible 172.16.1.7 -m copy -a "src=/opt/cxy.txt dest=/opt owner=cxy group=cxy"
    172.16.1.7 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": true, 
        "checksum": "fa5a578a265ba393f3ed20fc77700ac68309977a", 
        "dest": "/opt/cxy.txt", 
        "gid": 1000, 
        "group": "cxy", 
        "md5sum": "abdf0785796b5eeb963cf17acdb05419", 
        "mode": "0644", 
        "owner": "cxy", 
        "size": 32, 
        "src": "/root/.ansible/tmp/ansible-tmp-1614320580.28-2951-255737454473188/source", 
        "state": "file", 
        "uid": 1000
    }
    

    在传输文件时,修改文件的权限

    [root@m01-61 opt]# ansible 172.16.1.7 -m copy -a "src=/opt/cxy.txt dest=/opt mode=600"
    

    创建文件并直接写入内容

    [root@m01-61 opt]# ansible 172.16.1.7 -m copy -a "content='cxy123456' dest=/etc/rsync.password mode=600"
    172.16.1.7 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": true, 
        "checksum": "e8c29180b366ab284b861ea669fdd5f902936e7b", 
        "dest": "/etc/rsync.password", 
        "gid": 0, 
        "group": "root", 
        "md5sum": "b865483fef2ecaf9e348abf03c349240", 
        "mode": "0600", 
        "owner": "root", 
        "size": 9, 
        "src": "/root/.ansible/tmp/ansible-tmp-1614321219.9-3054-172166927256398/source", 
        "state": "file", 
        "uid": 0
    }
    

    复制目录

    当src=/data的时候,等于是将data这个目录和data目录下面的文件全部传输过去了
    [root@m01-61 /]# ansible 172.16.1.7 -m copy -a "src=/data dest=/data"
    172.16.1.7 | CHANGED => {
        "changed": true, 
        "dest": "/data/", 
        "src": "/data"
    }
    
    当src=/data/,是将data目录下的文件传输过去了,不包含/data/这个目录
    [root@m01-61 /]# ansible 172.16.1.7 -m copy -a "src=/data/ dest=/data"
    

    参数说明:

    src #推送数据的源文件信息
    dest #推送数据的目标路径
    backup #对推送传输过去的文件,进行备份
    content #直接批量在被管理端文件中添加内容
    group #将本地文件推送到远端,指定文件属组信息
    owner #将本地文件推送到远端,指定文件属主信息
    mode #将本地文件推送到远端,指定文件权限信息
    

    4.6 file创建文件并设置文件属性

    创建目录

    [root@m01-61 /]# ansible 172.16.1.7 -m file -a "path=/data/cxy/ state=directory"
    

    创建文件并更改属性

    [root@m01-61 /]# ansible 172.16.1.7 -m file -a "path=/data/cxy/110.txt state=touch mode=755 owner=cxy group=cxy"
    

    创建软链接

    [root@m01-61 /]# ansible 172.16.1.7 -m file -a "src=/data/cxy/ dest=/data/cxy_link state=link"
    

    参数说明

    path #指定远程主机目录或文件信息
    recurse #递归授权
    
    state:
    directory #在远端创建目录
    touch #在远端创建文件
    link #link 或 hard 表示创建链接文件
    absent #表示删除文件或目录
    mode #设置文件或目录权限
    owner #设置文件或目录属主信息
    group #设置文件或目录属组信息
    

    4.7 script模块

    编写脚本
    [root@m01-61 cxy_shell]# vim hello.sh
    #!/bin/sh
    mkdir /data
    echo "Hello wrold" > /data/cxy.txt
    
    使用script模块执行脚本,不需要将脚本文件推送到目标主机执行,在本地运行模板,等同于在远程执行
    [root@m01-61 cxy_shell]# ansible web -m script -a "/cxy_shell/hello.sh"
    

    4.8 yum模块

    [root@m01-61 cxy_shell]# ansible web -m yum -a "name=httpd state=installed"
    

    参数说明:

    name       #指定要安装的软件包名称
    state      #指定使用 yum 的方法
    installed, present #安装软件包
    removed, absent #移除软件包
    latest     #安装最新软件包
    

    4.9 service模板

    [root@m01-61 cxy_shell]# ansible web -m service -a "name=nginx state=stopped enabled=yes"
    

    参数说明:

    name # 定义要启动服务的名称
    state # 指定服务状态
    started #启动服务
    stopped #停止服务
    restarted #重启服务
    reloaded #重载服务
    enabled #开机自启
    

    4.10 mount模块

    ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
    state=present"
    ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
    state=mounted"
     web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
    state=unmounted"
    web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
    state=absent"
    

    状态解释:

    present # 开机挂载,仅将挂载配置写入/etc/fstab
    mounted # 挂载设备,并将配置写入/etc/fstab
    unmounted # 卸载设备,不会清除/etc/fstab 写入的配置
    absent # 卸载设备,会清理/etc/fstab 写入的配置
    

    4.11 user模块

    创建用户指定uid,gid,不创建家目录也不允许登陆

    ansible web -m user -a "name=cxy uid=888 group=888 shell=/sbin/nologin
    create_home=no"`
    

    参数说明:

    uid #指定用户的 uid
    group #指定用户组名称
    groups #指定附加组名称
    password #给用户添加密码
    shell #指定用户登录 shell
    create_home #是否创建家目录
    

    4.12 group模块

    创建用户组

    ansible oldboy -m group -a "name=cxy gid=888 state=present"
    

    参数说明:

    name #指定创建的组名
    gid #指定组的 gid
    state
    absent #移除远端主机的组
    present #创建远端主机的组(默认)
    

    4.13 mount模块

    ansible backup -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
    state=present"
    ansible backup -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
    state=mounted"
    ansible backup -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
    state=unmounted"
    ansible backup -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults
    state=absent"
    

    参数说明:

    present # 开机挂载,仅将挂载配置写入/etc/fstab
    mounted # 挂载设备,并将配置写入/etc/fstab
    unmounted # 卸载设备,不会清除/etc/fstab 写入的配置
    absent # 卸载设备,会清理/etc/fstab 写入的配置
    

    4.14 unarchive模块

    解压远程服务器的压缩包到指定目录,压缩文件是在远程服务器上

    ansible 172.16.1.31 -m unarchive -a "src=/opt/sys.tar.gz dest=/opt/ remote_src=yes"
    

    解压本地文件到指定机器的指定目录

    ansible 172.16.1.31 -m unarchive -a "src=/opt/log.tar.gz dest=/opt/" 
    

    4.15 archive模块

    压缩单个文件

    ansible 172.16.1.31 -m archive -a "path=/var/log/message dest=/tmp/log.tar.gz format=gz force_archive=true" 
    

    五:Ansible输出信息颜色

    01. 绿色信息:  查看主机信息/对主机未做改动
    02. 黄色信息:  对主机数据信息做了修改
    03. 红色信息:  命令执行出错了
    04. 粉色信息:  忠告信息
    05. 蓝色信息:  显示ansible命令执行的过程
    

    相关文章

      网友评论

          本文标题:Ansible服务

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