一、Ansible模块回顾

1.command模块

[root@m01 ~]# ansible web01 -m command -a 'free -m'

2.shell模块

#支持管道符这种特殊符号
[root@m01 ~]# ansible web01 -m shell -a 'ps -ef | grep httpd'

[root@m01 ~]# ansible web01 -m shell -a 'yum localinstall -y /package/*.rpm'

3.script模块

[root@m01 ~]# ansible web01 -m script -a '/root/mkdir.sh'

4.yum模块

#1.使用服务名字安装
[root@m01 ~]# ansible web01 -m yum -a 'name=httpd state=present'

#2.使用网上安装包的地址安装
[root@m01 ~]# ansible web01 -m yum -a 'name=http://.../.../.../httpd.rpm state=present'

#3.使用本地rpm包(包一定在受控端)
[root@m01 ~]# ansible web01 -m yum -a 'name=/package/http.rpm state=present'

yum
name:
httpd #包的名字
http://.../.../... #包在网上的地址
/package/http.rpm #包在受控端的地址
state
latest #安装最新的包
present #安装
absent #卸载

5.yum_repository模块

6.copy模块

#1.推送控制端文件到受控端
[root@m01 ~]# ansible web01 -m copy -a 'src=/root/mkdir.sh dest=/tmp/'

#2.推送文件并授权
[root@m01 ~]# ansible web01 -m copy -a 'src=/root/mkdir.sh dest=/tmp/ owner=nginx group=nginx mode=0644'

#3.推送文件并将原文件备份
[root@m01 ~]# ansible web01 -m copy -a 'src=/root/mkdir.sh dest=/tmp/ backup=yes'

#4.直接将内容写到受控端新文件
[root@m01 ~]# ansible web01 -m copy -a 'content="rsync_backup:123456" dest=/tmp/rsync_password owner=rsync group=rsync mode=600'

#注意:
1.授权时,用户必须是存在的系统用户
2.文件可以修改名字
3.推送文件至目录,目标地址最好在最后加 /

copy
src: #控制端的文件或目录
dest: #受控端的目录
owner: #文件推送后的属主
group: #文件推送后的属组
backup: #文件推送后,是否备份原文件
follow: #识别软链接
mode: #文件推送后的权限
content: #直接将内容写入文件

7.file模块

#1.创建目录
[root@m01 ~]# ansible web01 -m file -a 'path=/code/worpdress state=directory'

#2.创建文件
[root@m01 ~]# ansible web01 -m file -a 'path=/code/worpdress/index.html state=touch'

#3.创建文件或目录时授权
[root@m01 ~]# ansible web01 -m file -a 'path=/code/worpdress/index.php state=touch owner=nginx group=nginx mode=777'

#4.递归授权
[root@m01 ~]# ansible web01 -m file -a 'path=/code/ owner=nginx group=nginx mode=777 recurse=yes'

#注意:
1.创建文件时上层目录必须存在
2.授权时,直接授权上层目录加递归参数即可

file
src: #做软连接时的原目录
dest: #做软连接时的目标文件
path: #要在受控端创建的文件或目录
owner: #属主
group: #属组
mode: #权限
recurse: #递归授权
state:
directory #创建目录
touch #创建文件
link #软链接
absent #删除

8.get_url

#1.下载文件
[root@m01 ~]# ansible web01 -m get_url -a 'url=http://10.0.0.7/index.html dest=/tmp/'

#2.下载文件并授权
[root@m01 ~]# ansible web01 -m get_url -a 'url=http://10.0.0.7/index.html dest=/tmp/ owner=nginx group=nginx mode=777'

get_url:
url: #要下载的内容
dest: #下载到哪里,可以改名
mode: #下载包后的权限
checksum: #下载是进行验证
sha256:
md5:
owner: #下载包后的属主
group: #下载包后的属组

二、Ansible 模块 新

1.service模块

1)帮助语法
[root@m01 ~]# ansible-doc service
EXAMPLES:
- name: Start service httpd, if not started
 service:
  name: httpd
  state: started
  enabled: yes
   
name: httpd #服务的名字
state:
started #启动服务
stopped #停止服务
restarted #重启服务
reloaded #重载服务
enabled: #开机自启
yes
no
2)实例
#1.停止nginx服务
[root@m01 ~]# ansible web03 -m service -a 'name=nginx state=stopped'

#2.启动httpd服务,并加入开机自启
[root@m01 ~]# ansible web03 -m service -a 'name=httpd state=started enabled=yes'

2.systemd模块

1)帮助语法
[root@m01 ~]# ansible-doc systemd
EXAMPLES:
- name: Start service httpd, if not started
systemd:
  name: httpd
  state: started
  enabled: yes
  daemon_reload: yes
   
name: httpd #服务的名字
state:
started #启动服务
stopped #停止服务
restarted #重启服务
reloaded #重载服务
enabled: #开机自启
yes
no
daemon_reload: #后台启动
2)实例
#1.停止nginx服务
[root@m01 ~]# ansible web03 -m systemd -a 'name=nginx state=stopped'

#2.启动httpd服务,并加入开机自启
[root@m01 ~]# ansible web03 -m systemd -a 'name=httpd state=started enabled=yes'

3.group模块

1)帮助语法

EXAMPLES:
- name: Ensure group "somegroup" exists
group:
  name: somegroup #组名字
  state:
  present #创建用户组
  absent #删除用户组
  gid: 666 #用户组ID
2)实例
#创建用户组
[root@m01 ~]# ansible web_group -m group -a 'name=www state=present gid=666'

#删除用户组
[root@m01 ~]# ansible web_group -m group -a 'name=www state=absent'

4.user模块

1)帮助语法
- name: Add the user 'johnd' with a specific uid and a primary group of 'admin'
user:
  name: johnd #用户名
  comment: John Doe #用户的注释
  uid: 1040 #用户id
  group: admin #用户的组
  groups: admins,developers #指定附加组
  shell: /bin/bash #指定登录脚本
  append: yes #添加附加组时使用
  remove: yes #移除家目录
  generate_ssh_key: yes #是否生成密钥对
  ssh_key_bits: 2048 #秘钥加密的位数
  ssh_key_file: .ssh/id_rsa #秘钥文件
  expires: 1422403387 #用户的有效时间
  state:
  present #添加用户
  absent #删除用户
  create_home:yes/no     #是否创建家目录
  password       #给用户添加密码(单引号)
2)实践
#1.创建用户
[root@m01 ~]# ansible web_group -m user -a 'name=www uid=666 group=www shell=/sbin/nologin state=present'

#2.仅删除用户
[root@m01 ~]# ansible web_group -m user -a 'name=www state=absent'

#3.删除用户及用户组
[root@m01 ~]# ansible web_group -m user -a 'name=www state=absent remove=yes'

#注意:
1.如果用户名字跟组名字相同,删除用户是会将组也删除
2.当组下面有多个用户,删除的与组同名的用户也不会删除组

5.cron模块

1)帮助语法
EXAMPLES:
- name: Ensure a job that runs at 2 and 5 exists. Creates an entry like "0 5,2 * * ls -alh > /d
cron:
  name: "check dirs" #定时任务的注释
  minute: "0" #分钟
  hour: "5,2" #小时
  day: "2" #日
  month: "2" #月
  weekday: "2" #周
  job: "ls -alh > /dev/null"  #定时任务的内容
  state:
  absent #删除定时任务
  present #添加定时任务
2)实践
#1.添加定时任务
[root@m01 ~]# ansible web01 -m cron -a 'name="时间同步" minute=*/10 job="/usr/sbin/ntpdate time1.aliyun.com &> /dev/null"'

#2.修改定时任务(不修改名字,只修改内容)
[root@m01 ~]# ansible web01 -m cron -a 'name="时间同步" job="/usr/sbin/ntpdate time1.aliyun.com &> /dev/null"'

#3.删除定时任务(一定要用name参数)
[root@m01 ~]# ansible web01 -m cron -a 'name="时间同步" state=absent'

#4.注释定时任务
[root@m01 ~]# ansible web01 -m cron -a 'name="时间同步" job="/usr/sbin/ntpdate time1.aliyun.com &> /dev/null" disabled=yes'

6.磁盘挂载mount模块

1)帮助语法
EXAMPLES:
# Before 2.3, option 'name' was used instead of 'path'
- name: Mount DVD read-only
mount:
  path: /mnt/dvd #挂载的目录(nfs客户端)
  src: /dev/sr0 #远端被挂载的目录 (nfs服务端)
  fstype: nfs #挂在类型
  opts: ro,noauto #自动挂载的参数
  state:
  present #写入自动挂载,但实际没有挂咋,需要重启服务器
  unmounted #取消临时挂载,但是没有清理自动挂载
  mounted #写入自动挂载,并且直接挂载了(常用)
  absent #取消临时挂载,并且清理自动挂载(常用)
2)准备挂载的服务端
1.安装nfs
[root@m01 ~]# ansible nfs -m yum -a 'name=nfs-utils state=present'
2.配置nfs
[root@m01 ~]# ansible nfs -m copy -a 'content="/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)" dest=/etc/exports'
3.创建用户
[root@m01 ~]# ansible nfs -m group -a 'name=www gid=666'
[root@m01 ~]# ansible nfs -m user -a 'name=www uid=666 group=www shell=/sbin/nologin create_home=no'
4.创建目录并授权
[root@m01 ~]# ansible nfs -m file -a 'path=/data state=directory owner=www group=www'
5.启动
[root@m01 ~]# ansible nfs -m systemd -a 'name=nfs state=started'
3)客户端使用模块挂载
#挂载目录,并加入开机自动挂载
[root@m01 ~]# ansible web01 -m mount -a 'src=172.16.1.31:/data path=/code/wordpress fstype=nfs state=mounted'

#取消挂载,并取消开机自动挂载
[root@m01 ~]# ansible web01 -m mount -a 'src=172.16.1.31:/data path=/code/wordpress fstype=nfs state=absent'

7.selinux模块

1)帮助语法
EXAMPLES:
- name: Enable SELinux
selinux:
  policy: targeted
  state:
  enforcing #开启
  disabled #关闭
2)关闭selinux
[root@m01 ~]# ansible web01 -m selinux -a 'state=disabled'

8.firewalld模块

1)帮助语法
EXAMPLES:
- firewalld:
   service: https #防火墙开启的服务
  permanent:
  yes    #永久生效
  no #临时生效
  state:
  enabled    #开启
  disable #关闭
  port: 8081/tcp  161-162/udp  #防火墙配置的端口
  zone: dmz #指定配置空间
  rich_rule: #富规则
   source: 192.0.2.0/24 #防火墙配置的源ip
  masquerade:
  yes #开启ip伪装
  no #关闭ip伪装
  interface: eth2 #绑定网卡
2)防火墙配置实践
#1.允许访问http,永久生效
[root@m01 ~]# ansible web01 -m firewalld -a 'service=http permanent=yes state=enabled'

#2.允许80端口被访问,临时生效
[root@m01 ~]# ansible web01 -m firewalld -a 'port=80/tcp state=enabled'

#3.允许10.0.0.0/24网段访问22端口
[root@m01 ~]# ansible web01 -m firewalld -a 'rich_rule="rule family=ipv4 source address=10.0.0.0/24 service name=ssh accept" state=enabled'

#4.允许10.0.0.0/24网段访问所有服务
[root@m01 ~]# ansible web01 -m firewalld -a 'source=10.0.0.0/24 zone=trusted state=enabled permanent=yes'

9.unarchive 解压模块

1)帮助语法
- name: Unarchive a file that is already on the remote machine
unarchive:
  src: /tmp/foo.zip #要解压的包
  dest: /usr/local/bin #解压到目标位置
  remote_src:
  yes #要解压的包在受控端
  no #要解压的包在控制端
2)实例
#1.解压控制端的包到受控端
[root@m01 /package]# ansible web01 -m unarchive -a 'src=/package/php.tar.gz dest=/tmp/'

#2.解压受控端的包到受控端
[root@m01 /package]# ansible web03 -m unarchive -a 'src=/package/php.tar.gz dest=/tmp/ remote_src=yes'

10.archive 压缩模块

1)帮助语法
EXAMPLES:
- name: Compress directory /path/to/foo/ into /path/to/foo.tgz
archive:
  path: /path/to/foo #要压缩的文件或目录
  dest: /path/to/foo.tgz #压缩后的文件
  format:bz2, gz, tar, xz, zip #指定打包的类型
2)实例
#1.打包站点目录
[root@m01 /package]# ansible web01 -m archive -a 'path=/code dest=/tmp/code.tar.gz'

11.Ansible主机信息模块 setup

为什么要讲这个模块?
这个模块非常实用,在公司中总会有一些需求

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

2.获取主机名(使用setup获取的信息,指定对应的小标题获取指定的信息)
[root@m01 ~]# ansible web01 -m setup -a 'filter=ansible_fqdn'
2)常用的参数
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.环境准备

主机名 IP 角色
m01 10.0.0.61 跳板机
web01 172.16.1.7 web服务器
web02 172.16.1.8 web服务器

2.m01配置

1.上传相关源码包
[root@m01 ~]# rz                                                                            
[root@m01 ~]# ll
-rw-r--r-- 1 root root    26995 Aug 13 16:42 kaoshi.zip
-rw-r--r-- 1 root root 19889622 Aug 26 09:04 php.tar.gz

2.编写脚本
[root@m01 ~]# vim zuoye.sh
#!/bin/bash
#创建目录并解压相关源码包
mkdir /package
mv /root/kaoshi.zip /root/php.tar.gz /package
cd /package
mkdir -p /code/zuoye
mkdir /php
tar xf php.tar.gz -C /php
unzip kaoshi.zip -d /code/zuoye
#安装ansible
yum -y install ansible
#配置ansible
sed -ir 's#\#host_key_checking = False#host_key_checking = False#g' /etc/ansible/ansible.cfg
sed -ir 's#\#log_path = /var/log/ansible.log#log_path = /var/log/ansible.log#g' /etc/ansible/ansible.cfg
#配置本地hosts
echo -e '172.16.1.7 web01\n172.16.1.8 web02' >>/etc/hosts
#配置主机清单
echo -e "[web_group]\nweb01 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='root'\nweb02 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='root'" >/etc/ansible/hosts
#配置本地yum源
echo -e '[nginx-stable]\nname=nginx stable repo\nbaseurl=http://nginx.org/packages/centos/$releasever/$basearch/\ngpgcheck=1\nenabled=1\ngpgkey=https://nginx.org/keys/nginx_signing.key\nmodule_hotfixes=true' > /etc/yum.repos.d/nginx.repo
#配置web服务器yum源
ansible 'web_group' -m copy -a 'src=/etc/yum.repos.d/nginx.repo dest=/etc/yum.repos.d/nginx.repo'
#安装依赖包
ansible 'web_group' -m yum -a 'name=gcc,gcc-c++,autoconf,pcre,pcre-devel,make,automake,wget,httpd-tools,vim,tree state=present'
#安装nginx
ansible 'web_group' -m yum -a 'name=nginx state=present'
#配置本地nginx文件
echo -e 'server{\n   listen 80;\n   server_name linux.zuoye.com;\n   root /code/zuoye;\nlocation / {\n   index index.html;\n}\nlocation ~* \.php$ {\n   fastcgi_pass 127.0.0.1:9000;\n   fastcgi_param SCRIPT_FILENAME /code/zuoye/$fastcgi_script_name;\n   include fastcgi_params; \n}\n}' >/root/linux.zuoye.com.conf
#推送nginx配置文件
ansible 'web_group' -m copy -a 'src=/root/linux.zuoye.com.conf dest=/etc/nginx/conf.d/'
#创建目录并授权
ansible 'web_group' -m file -a 'path=/code/zuoye state=directory owner=nginx group=nginx mode=755'
#推送作业平台
ansible 'web_group' -m copy -a 'src=/code/zuoye/ dest=/code/zuoye owner=nginx group=nginx mode=0644 '
#启动服务
ansible 'web_group' -m shell -a 'systemctl restart nginx'
#创建php目录
ansible 'web_group' -m file -a 'path=/php state=directory '
#推送php
ansible 'web_group' -m copy -a 'src=/php/ dest=/php'
#本地安装PHP
ansible 'web_group' -m shell -a 'cd /php && yum -y localinstall *.rpm'
#启动PHP
ansible 'web_group' -m shell -a 'systemctl start php-fpm'

3.执行脚本
[root@m01 ~]# /bin/bash zuoye.sh

4.配置本地hosts
10.0.0.7     linux.zuoye.com
10.0.0.8     linux.zuoye.com

5.测试
web01能正常访问交作业平台并上传作业
web02能正常访问交作业平台并上传作业

第二十六章 ansible主要模块介绍的更多相关文章

  1. Gradle 1.12用户指南翻译——第二十六章. War 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  2. “全栈2019”Java多线程第二十六章:同步方法生产者与消费者线程

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  3. “全栈2019”Java第二十六章:流程控制语句中循环语句do-while

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  4. SpringBoot | 第二十六章:邮件发送

    前言 讲解了日志相关的知识点后.今天来点相对简单的,一般上,我们在开发一些注册功能.发送验证码或者订单服务时,都会通过短信或者邮件的方式通知消费者,注册或者订单的相关信息.而且基本上邮件的内容都是模版 ...

  5. UNP学习笔记(第二十六章 线程)

    线程有时称为轻权进程(lightweight process) 同一进程内的所有线程共享相同的全局内存.这使得线程之间易于共享信息,然后这样也会带来同步的问题 同一进程内的所有线程处理共享全局变量外还 ...

  6. 第二十五章 ansible基础

    一.Ansible概述 1.什么是Ansible Ansible是一个自动化统一配置管理工具,自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命令完成一系列的操作,进而能减少重复 ...

  7. 第二十六章 hystrix-dashboard + turbine

    一.使用turbine的意义 引入多个hystrix stream: 1.使用hystrix-dashboard的可以添加多个stream的功能 图中添加的两个stream会在真正monitor的时候 ...

  8. 【第二十六章】 hystrix-dashboard + turbine

    一.使用turbine的意义 引入多个hystrix stream: 1.使用hystrix-dashboard的可以添加多个stream的功能 图中添加的两个stream会在真正monitor的时候 ...

  9. 【WPF学习】第二十六章 Application类——应用程序的生命周期

    在WPF中,应用程序会经历简单的生命周期.在应用程序启动后,将立即创建应用程序对象,在应用程序运行时触发各种应用程序事件,你可以选择监视其中的某些事件.最后,当释放应用程序对象时,应用程序将结束. 一 ...

随机推荐

  1. Burp Suite抓包使用步骤

    Burp Suite抓包工具的操作步骤见安装步骤那篇博客 检查是否存在漏洞,就看拦截之后修改过的数据是否写进了数据库 举例一.上传文件 1.打开Burp.调整Proxy-Intercept-Inter ...

  2. oracle之数据限定与排序

    数据限定与排序 6.1 简单查询语句执行顺序 from, where, group by, having, order by, select where限定from后面的表或视图,限定的选项只能是表的 ...

  3. ef6 code first,对已有数据库如何执行迁移

    先执行:Enable-Migrations,会生成Migrations->Configuration.cs 再执行:Add-Migrations InitialCreate – IgnoreCh ...

  4. 使用PXE+VNC方式安装CentOS 7

    U盘坏了,用个下面的方法安装 安装配置dhcp yum -y install dhcp tftp-server 修改如下,网段改为你自己的网段 vim /etc/dhcp/dhcpd.conf sub ...

  5. 2.1 Spring5源码编译

    一. 准备工作 1. . 编译环境 maven jdk8 idea 2. 编译版本: SpringV5.2.7RELEASE+GradleWapper+jdk1.8.0_131编译 二. 源码下载 g ...

  6. Linux实战(10):ssh密码被拒绝

    网上的操作都试过了,可还是不行,最终通过重装ssh服务解决. 参考资料:https://blog.csdn.net/VicdorLin/article/details/90727826 https:/ ...

  7. Docker公共&本地镜像仓库(七)

    分发镜像 我们已经会构建自己的镜像了,那么如果在多个docker主机上使用镜像那?有如下的几种可用的方法: 用相同的Dockerfile在其他host上构建镜像 将镜像上传到公共registry(比如 ...

  8. docker注册&打包

    在https://hub.docker.com上注册账号,新建reosity docker images命令列出dockerlist docker login命令登录:这其中出现了一个问题,登录不上去 ...

  9. java 泛型学习随笔

    对于java 泛型 编译时处理,运行时擦除的特点理解 对于编译时处理 在使用泛型相关的类或方法时,如果声明时的类型和具体使用时的类型不一致则直接会编译不通过 对于运行时擦除 当在运行时对两个相同类型但 ...

  10. win10彻底卸载和删除MySql

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_41140741/article/de ...