美文网首页
ansible基础模块

ansible基础模块

作者: mk_ | 来源:发表于2021-07-20 19:00 被阅读0次

    环境部署

    m01        192.168.1.170        ansible管理端

    backup    192.168.1.171        ansible受控端

    nfs            192.168.1.172         ansible受控端

    web01      192.168.1.173        ansible受控端

    web02      192.168.1.174        ansible受控端

    1、安装ansible

    [root@localhost ~]# hostnameclt set-hostname m01

    [root@localhost ~]# bash

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

    //查看版本

    [root@m01 ~]# ansible --version

    ansible 2.9.23

    2、ssh部署公钥认证

    利用非交互式工具实现批量分发公钥与批量管理服务器

    配置所有主机相互SSH登录无密码验证

    [root@m01 ~]# ssh-keygen -t rsa

    [root@m01 ~]# ssh-copy-id 192.168.1.171

    [root@m01 ~]# ssh-copy-id 192.168.1.172

    [root@m01 ~]# ssh-copy-id 192.168.1.173

    [root@m01 ~]# ssh-copy-id 192.168.1.174

    3、配置ansible主机清单

    [root@m01 ~]# vim /etc/ansible/hosts          #编辑,在最后添加一行

    写法一:

    [nfzl]

    192.168.1.171

    192.168.1.172

    192.168.1.173

    192.168.1.174

    写法二:

    [nfzl]

    192.168.1.171 ansible_ssh_pass='talent'

    192.168.1.172 ansible_ssh_pass='talent'

    192.168.1.173 ansible_ssh_pass='talent'

    192.168.1.174 ansible_ssh_pass='talent'

    [root@backup ~]# rm -rf .ssh/authorized_keys    #删除公钥

    写法三

    [nfzl]

    192.168.1.171 ansible_ssh_user=root ansible_ssh_pass='talent' ansible_ssh_port=22

    192.168.1.172 ansible_ssh_pass='talent'

    192.168.1.173 ansible_ssh_pass='talent'

    192.168.1.174 ansible_ssh_pass='talent'

    写法四_拆分密码版

    [nfzl]

    192.168.1.171

    192.168.1.172

    192.168.1.173

    192.168.1.174

    [nfzl:vars]

    ansible_ssh_pass='talent'

    写法五_建议写法

    [backup]

    192.168.1.171

    [nfs]

    192.168.1.172

    [web]

    192.168.1.173

    192.168.1.174

    [nfzl:children]

    backup

    nfs

    web

    4、测试

    [root@m01 ~]# ansible nfzl -m ping

    [root@m01 ~]# ansible nfs -m ping

    [root@m01 ~]# ansible nfzl -m command -a "hostname"

    [root@m01 ~]# ansible nfzl -m shell -a "df -h | grep /$"            #shell支持管道符

    [root@m01 ~]# ansible nfzl -m shell -a "df -h " -f 2                    #-f:指定一次显示返回主机信息的量

    [root@m01 ~]# ansible nfzl -m shell -a "echo talent | passwd --stdin nfzl" -f 2  #修改密码

    5、Aansible常用模块

    在linux系统里把多个命令集合写到文件里,叫做脚本 在Ansible中把多个模块集中写到文件里,叫做剧本 剧本:就是把多个模块写到一个文件里来完成一个任务

    1、 Ad-Hoc:命令 -> 文件 =脚本

    2、Ansible playbook:模块 -> 文件 =剧本

    Ansible注意事项->提示颜色信息说明

    翔黄色:对远程节点进行相应修改

    帽子绿:对远程节点不进行相应修改,或者只是对远程节点信息进行查看

    深红色:操作执行命令有异常

    浅紫色:表示对命令执行发出警告信息(可能存在问题,给你一下建议)

    常用模块:

    1、command 执行命令 command只能执行简单的命令

    2、shell 执行命令 shell 可以使用管道

    3、yum 安装软件模块

    4、copy 配置模块

    5、service 启动服务模块

    6、user 用户管理

    7、file 创建目录,创建文件,往文件里写内容

    8、cron 定时任务

    9、mount 挂载

    模块动作

    -a : 指定要执行的动作,如具体命令

    -f:指定一次显示返回主机信息的量,如-f 1则一台主机一台主机的返回信息,-f 2则两台两台的返回主机结果信息

    Examples

    [root@m01 ~]# ansible nfzl -m shell -a "df -h " -f 2   

    5.1 yum模块

    yum模块用来在远程机器上安装软件包

    在用yum模块安装软件之前先保证远端机器的yum源可用

    Examples

    [root@m01 ~]# ansible web -m yum -a "name=httpd state=present"

    name —指定要安装的软件包

    state —指定使用yum的哪些方法

    installed, present —安装软件包

    removed, absent —移除软件包

    latest —安装最新软件包

    5.2 copy模块

    copy模块用来把本地文件批量传输到多台服务器上

    Examples 

    #示例一  显示黄色证明拷贝成功,如果在/etc/passwd文件没有变动的情况下再次拷贝则显示绿色表示无任何改动,只有在文件有变化的时候才会进行拷贝

    [root@m01 ~]# ansible nfzl -m copy -a "src=/etc/hosts dest=/tmp/test.txt"

    #示例二 运行结果是对被管理机目标文件拷贝前的文件进行备份

    [root@m01 ~]# ansible nfzl -m copy -a "src=/etc/passwd dest=/tmp/test.txt backup=yes"

    #示例 三   运行结果是将用户和密码写进Rsync/etc/rsync.passwd文件中,并且指定属主和属组都为root,权限设置600

    [root@m01 ~]# ansible backup -m copy -a "content='rsync_backup:talent' dest=/etc/rsync.passwd owner=root group=root mode=600"

    src —— 推送数据的源文件信息

    dest —— 推送数据的目标路径

    backup —— 对推送传输过去的文件进行备份

    content —— 直接批量在被管理段文件中添加内容

    group —— 将本地文件推送到远端,指定文件属组信息

    owner —— 将本地文件推送到远端,指定文件属主信息

    mode —— 将本地文件推送到远端,指定文件权限信息

    5.3 service模块

    service是服务管理模块

    Examples

    [root@m01 ~]# ansible web -m service -a "name=httpd state=started enabled=yes"

    name —定义要启动服务的名称

    state —指定服务状态是停止或运行,停止和运行指令要写成过去时

    started —启动

    stopped —停止

    restarted —重启

    reloaded —重载

    enabled —是否让服务开启自启动

    5.4 script模块

    执行本地脚本,不用传输到远端,执行结果会作用于远端服务器上

    [root@m01 ~]#mkdir -p /server/scripts/

    [root@m01 scripts]# cd /server/scripts/

    [root@m01 scripts]# vim change_passwd.sh

    #!/bin/bash

    useradd nfzl

    echo talent | passwd --stdin nfzl && echo "password create successfully"

    [root@m01 scripts]# ansible nfzl -m script -a "/server/scripts/change_passwd.sh"

    5.5 file模块

    file模块用来创建文件或目录

    Examples

    #示例1 创建目录

    [root@m01 ~]# ansible nfzl -m file -a "path=/server/scripts state=diretory"

    #示例2 创建文件,并设定属主、属组、权限

    [root@m01 ~]# ansible all -m file -a "path=/server/scripts/nfzl.txt state=touch owner=nfzl group=root mode=600"

    #示例3 递归授权目录的方式

    [root@m01 ~]# ansible all -m file -a "path=/var/www/html state=directory owner=root group=root mode=700"

    [root@m01 ~]# ansible all -m file -a "path=/data state=directory owner=www group=www recurse=yes"

    path —指定远程主机目录或文件信息

    recurse —递归授权

    state —

    directory —在远端创建目录

    touch —在远端创建文件

    link —link或hard表示创建连接文件

    absent —表示删除文件或目录

    mode —设置文件或目录权限

    owner —设置文件或目录属主信息

    group —设置文件或目录属组信息

    5.6 user模块

    Examples

    #示例一、创建joh用户,uid是1008,基本组是adm

    [root@m01 ~]# ansible nfzl -m user -a "name=joh uid=1008 group=adm"

    #示例二、创建jon用户,登录shell是/sbin/nologin,追加bin,sys两个附件组

    [root@m01 ~]# ansible nfzl -m user -a "name=jon shell=/sbin/nologin groups=bin,sys"

    #示例三、创建jsm用户,为其添加talent作为登录密码,并且创建家目录

    [root@m01 ~]# ansible nfzl -m debug -a "msg={{'talent' | password_hash('sha512','salt')}}"

    192.168.1.171 | SUCCESS => {

        "msg": "$6$salt$MUVhjPhKyI2uE9sPg7185PcBQFlDwLGPbVTx.CsD6GXQbRGsUfmjsSfb9e9ej2.vLgmBI5CtgFq1plbD0a6tM."

    }

    [root@m01 ~]#ansible nfzl -m user -a "name=jsm password=$6$salt$MUVhjPhKyI2uE9sPg7185PcBQFlDwLGPbVTx.CsD6GXQbRGsUfmjsSfb9e9ej2.vLgmBI5CtgFq1plbD0a6tM create_home=yes"

    #示例四、移除joh用户 (state=ansent且remove=yes,删除用户同时删除家目录)

    [root@m01 ~]# ansible nfzl -m user -a "name=xuyong state=absent remove=yes"

    #示例五  创建用户httpd 并用户生成 ssh 密钥对

    [root@m01 ~]# ansible nfzl -m user -a 'name=httpd generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa'

    name -添加和删除的用户名

    uid —指定用户的uid

    group —指定用户的组名

    groups —指定附加组名称

    password —给用户添加密码

    shell —指定用户登录的shell

    create_home —是否创建家目录

    remove  -是否创建家目录yes\no

    5.7 group模块

    Examples

    #示例一、创建news基本组,指定uid为678

    [root@m01 ~]# ansible nfzl –m group –a “name=news gid=678 state=present”

    #示例二、创建http系统组,指定uid为778

    [root@m01 ~]# ansible nfzl –m group –a “name=http gid=778 system=true state=present”

    #示例三、删除基本组news

    [root@m01 ~]# ansible nfzl –m group –a “name=news  state=absent”

    name ——指定创建的组名

    gid ——指定组的gid

    state

    absent ——移除远端主机的组

    present ——创建远端主机的组(default)

    system  ——yes、no(default)是否创建系统组

    5.8 cron模块

    定时计划任务模块

    Examples

    #示例一、添加定时任务。每分钟执行一次/server/scripts/change_passwd.sh

    [root@m01 ~]# ansible nfzl -m cron -a "name=job1 job='/bin/bash /server/scripts/change_passwd.sh'"

    #示例二、添加定时任务。每分钟执行一次ls * * * * * ls > /dev/null

    [root@m01 ~]# ansible nfzl -m cron -a "name=job2 job='ls > /dev/null'"

    #示例三、添加定时任务。每天的凌晨2点和5点执行一次ls * * * * * ls > /dev/null

    [root@m01 ~]# ansible nfzl -m cron -a "name=job3 minute=0 hour=5,2 job='ls > /dev/null'"

    #示例四、关闭定时任务,使定时任务失效

    [root@m01 ~]# ansible nfzl -m cron -a "name=job1  job='/bin/bash /server/scripts/change_passwd.sh' disabled=yes"

    name ——备注计划任务,在同样一个计划任务用ansible执行第二次的时候,如果远端主机已经有该相同备注的计划任务时,会不做任何操作,如果没有该计划任务的主机时则会执行,所以一定要加name备注避免重复

    disabled ——注释计划任务(yes|no)

    minute ——分钟(default *)

    hour ——小时(default *)

    day ——日(default *)

    month ——月(default *)

    weekday ——周(default *)

    job ——任务

    分时日月周都默认为*,在需要的时候可以单独添加

    5.9 mount模块

    环境准备

    1、将192.168.1.172作为nfs服务端,192.168.1.173、192.168.1.174作为客户端挂载

    [root@m01 ~]# ansible nfs -m yum -a "name=nfs-utils state=present"

    [root@m01 ~]# ansible nfs -m file -a "path=/data state=directory"

    [root@m01 ~]# ansible nfs -m copy -a "content='/data 192.168.1.0/24(rw,sync)' dest=/etc/exports"

    [root@m01 ~]# ansible nfs -m service -a "name=nfs state=restarted"

    挂载模块

    Examples

    #示例一、仅将挂载的配置写入/etc/fstab, 并不会执行挂载操作

    [root@m01 ~]#ansible web -m mount -a "src=192.168.1.172:/data path=/var/www/html fstype=nfs opts=defaults state=present"

    #示例二、临时挂载设备,并将挂载信息写入/etc/fstab

    [root@m01 ~]#ansible web -m mount -a "src=192.168.1.172:/data path=/var/www/html fstype=nfs opts=defaults state=mounted"

    #示例三、临时卸载,不会清理/etc/fstab

    [root@m01 ~]#ansible web -m mount -a "src=192.168.1.172:/data path=/var/www/html fstype=nfs opts=defaults  state=unmounted"

    #示例四、卸载,不仅临时卸载,同时会清理/etc/fstab

    [root@m01 ~]#ansible web -m mount -a "src=192.168.1.172:/data path=/var/www/html fstype=nfs opts=defaults state=absent"

    path ——目标挂载目录

    src ——挂载源

    fstype ——挂载类型

    opts ——挂载选项

    state ----

    absent ——卸载设备,会删除/etc/fstab写入的配置

    unmounted ——卸载设备,不会删除/etc/fstab写入的配置

    mounted ——挂载设备,将配置写入/etc/fstab

    present ——仅将配置写入/etc/fstab,不会挂载设备(开机挂载)

    5.10 selinux

    关闭selinux

    [root@m01 ~]# ansible nfzl -m selinux -a "state=disabled"

    5.11 firewalld

    [root@m01 ~]# ansible nfzl -m firewalld -a "name=firewalld state=tarted"

    Examples

    #示例一 永久放行httpds的流量

    [root@m01 ~]# ansible nfzl -m firewalld -a "zone=public service=https permanent=yes state=enabled"

    #示例二 永久放行8081端口的流量,只有重启才会生效

    [root@m01 ~]# ansible nfzl -m firewalld -a "zone=public prot=8080/tcp permanent=yes state=enabled"

    #示例三 放行8080-8090的所有TCP端口流量,临时和永久都生效

    [root@m01 ~]# ansible nfzl -m firewalld -a "zone=public prot=8080-8090/tcp permanent=yes immediate=yes state=enabled"

    5.12 get_url

    Examples

    #示例一 下载互联网的软件至本地

    [root@m01 ~]# ansible nfzl -m get_url -a "http://mirrors.aliyun.com/repo/epel-7.repo" dest=/etc/yum.repos.d/epel.repo

    相关文章

      网友评论

          本文标题:ansible基础模块

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