Brc's blog
首页
前端
后端
运维
  • 工作笔记
  • 分类
  • 标签
  • 归档
关于

Brc

努力中
首页
前端
后端
运维
  • 工作笔记
  • 分类
  • 标签
  • 归档
关于
  • Linux基础

  • Linux进阶

    • shell

    • nginx

    • keepalived

    • LVS

    • ansible

      • Ansible基础快速入门
        • Ansible基础知识与架构
          • 什么是Ansible
          • Ansible主要功能
          • Ansible的特点
          • Ansible基础架构
        • Ansible安装与配置
          • Ansible安装方式
          • rpm安装
          • pip安装
          • 确认安装
          • Ansible相关文件
          • Ansible配置文件
          • Ansible主配置文件
          • Ansible配置优先级
          • Ansible Inventory
          • Inventory是什么
          • Inventory-密码连接方式
          • Inventory-秘钥连接方式
          • 使用普通用户管理被控端
          • Ansible相关工具
          • ansible
          • ansible-doc
        • Ansible ad-hoc与常用模块
          • ad-hoc基本介绍
          • ad-hoc是什么
          • ad-hoc命令使用
          • ad-hoc执行过程
          • ad-hoc执行状态
          • Ansible常用模块
          • command模块
          • shell模块
          • script模块
          • yum模块
          • copy模块
          • file模块
          • lineinfile模块
          • get_url模块
          • systemd模块
          • group模块
          • user模块
          • cron模块
          • mount模块
          • hostname模块
          • archive模块
          • unarchive模块
          • selinux模块
      • Ansible Playbook
      • Ansible Variables
      • Ansible Facts Variables
      • Ansible Task Control
      • Ansible Advanced
      • python调用ansible模块
    • docker

    • mysql

  • 其他

  • 运维
  • Linux进阶
  • ansible
Brc
2021-12-16
目录

Ansible基础快速入门

# Ansible基础知识与架构

# 什么是Ansible

Ansible是一个IT自动化的配置管理工具,自动化主要体现在Ansible集成了丰富模块,以及强大的功能组件,可以通过一个命令行完成一系列的操作。进而能减少我们重复性的工作,以提高工作的效率。

# Ansible主要功能

  • 批量执行远程命令,可以对N多台主机同时进行命令的执行。
  • 批量配置软件服务,可以进行自动化的方式配置和管理服务。
  • 实现软件开发功能,jumpserver底层使用ansible来实现的自动化管理。
  • 编排高级的IT任务,Ansible的Playbook是一门编程语言,可以用来描绘一套IT架构。

# Ansible的特点

  • 容易学习:无代理,不像salt既要学客户端与服务端,还需要学习客户端与服务端中间通讯协议;
  • 操作灵活:Ansible有较多的模块,提供了丰富的功能、playbook则提供类似于编程语言的复杂功能;
  • 简单易用:体现在Ansible一个命令可以完成很多事情;
  • 安全可靠:因为Ansible使用了SSH协议进行通讯,既稳定也安全;
  • 移植性高:可以将写好的playbook拷贝至任意机器进行执行;
  • 幂等性:一个任务执行1遍和执行n遍效果一样,不会因为重复执行带来意外情况;

# Ansible基础架构

Ansible架构中的控制节点、被控制节点、inventroy、ad-hoc、playbook、Connection Protocol是什么?

ansible架构

# Ansible安装与配置

# Ansible安装方式

# rpm安装

[root@manager ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@manager ~]# yum install ansible -y
1
2

# pip安装

[root@manager ~]# yum install python3 python3-devel python3-pip -y
[root@manager ~]# pip3 install --upgrade pip -i https://pypi.douban.com/simple/
[root@manager ~]# pip3 install ansible -i https://pypi.douban.com/simple/
[root@manager ~]# /usr/local/bin/ansible --version
1
2
3
4

# 确认安装

  • 方式一、检查Ansible版本

    [root@manager ~]# ansible --version
    ansible 2.9.27
      config file = /etc/ansible/ansible.cfg
      configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
      ansible python module location = /usr/lib/python2.7/site-packages/ansible
      executable location = /usr/bin/ansible
      python version = 2.7.5 (default, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
    
    1
    2
    3
    4
    5
    6
    7
  • 方式二、测试Ansible是否可用

    [root@manager ~]# ansible localhost -m ping
    localhost | SUCCESS => {
        "changed": false,
        "ping": "pong"
    }
    
    1
    2
    3
    4
    5

# Ansible相关文件

# Ansible配置文件

  • /etc/ansible/ansible.cfg:主配置文件,配置Ansible工作特性
  • /etc/ansible/hosts:配置主机清单文件
  • /etc/ansible/roles/:存放Ansible角色的目录

# Ansible主配置文件

Ansible的主配置文件存在/etc/anible/ansible.cfg,其中大部分的配置内容无需进行修改;

[root@manager ~]# cat /etc/ansible/ansible.cfg
[defaults]
#inventory			= /etc/ansible/hosts		# 主机列表配置文件
#library			= /usr/share/my_modules/	# 库文件存放目录
#remote_tmp 		= ~/.ansible/tmp 			# 临时py文件存放在远程主机目录
#local_tmp			= ~/.ansible/tmp 			# 本机的临时执行目录
#forks 				= 5 						# 默认并发数
#sudo_user 			= root 						# 默认sudo用户
#ask_sudo_pass 		= True 						# 每次执行是否询问sudo的ssh密码
#ask_pass 			= True 						# 每次执行是否询问ssh密码
#remote_port 		= 22 						# 远程主机端口
host_key_checking 	= False 					# 检查对应服务器的host_key,建议取消
log_path 			= /var/log/ansible.log 		# ansible日志,建议启用

[privilege_escalation] 							# 如果是普通用户则需要配置提权
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# Ansible配置优先级

  • Ansible的配置文件可以存放在任何位置,但配置文件有读取顺序,查找顺序如下:
    • 最先查找$ANSIBLE_CONFIG变量
    • 其次查找当前项目目录下ansible.cfg
    • 然后查找用户家目录下的.ansible.cfg
    • 最后查找/etc/ansible/ansible.cfg
  • 通过命令行操作演示,验证结论;

# Ansible Inventory

# Inventory是什么

Inventory文件主要用来填写被管理主机以及主机组信息;(逻辑上定义);

默认Inventory文件为/etc/ansible/hosts;

当然也可以自定义一个文件,当执行Ansible命令时使用-i选项指定Inventory文件位置;

# Inventory-密码连接方式

  1. 指定主机IP,指定主机端口,指定主机用户名、密码;

    # 详细清单文件;
    [webservers]
    10.0.0.12 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
    10.0.0.13 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
    
    # 通过域名的简写方式;
    [webservers]
    web[1:2].bi.com ansible_ssh_pass='123456'
    
    1
    2
    3
    4
    5
    6
    7
    8
  2. 通过变量方式定义密码;

    [webservers]
    web[1:2].bi.com
    [webservers:vars]
    ansible_ssh_pass='123456'
    
    1
    2
    3
    4

# Inventory-秘钥连接方式

  1. 创建秘钥对,然后下发秘钥;

    [root@manager ~]# ssh-keygen -t rsa
    [root@manager ~]# ssh-copy-id root@10.0.0.12
    
    
    1
    2
    3
  2. 配置Inventory主机清单;

    [webservers]
    10.0.0.12
    10.0.0.13
    
    1
    2
    3

# 使用普通用户管理被控端

场景说明:Ansible使用bi普通用户统一管理所有的被控端节点;

  1. 首先控制端,被控端,都需要有bi用户;

    [root@manager ~]# useradd bi
    [root@manager ~]# echo "123" | passwd --stdin bi
    
    1
    2
  2. 将控制端bi用户的公钥推送到被控端bi用户下,使普通用户能进行免密码登录;

    [root@manager ~]# su - bi
    [bi@manager ~]$ ssh-keygen -t rsa
    [bi@manager ~]$ ssh-copy-id bi@IP
    
    1
    2
    3
  3. 所有主机的bi用户都必须添加sudo权限。

    [root@manager ~]# visudo
    bi ALL=(ALL) NOPASSWD: ALL
    
    1
    2
  4. 修改控制端/etc/ansible/ansible.cfg主配置文件,配置普通用户提权;

    [root@manager ~]# vim /etc/ansible/ansible.cfg
    [privilege_escalation]
    become=True
    become_method=sudo
    become_user=root
    become_ask_pass=False
    
    1
    2
    3
    4
    5
    6
  5. 使用bi用户测试是否能执行任务;

    [bi@manager ~]$ ansible webservers -m shell -a "touch 123.txt"
    [WARNING]: Consider using the file module with state=touch rather than running
    'touch'.  If you need to use command because file is insufficient you can add 'warn:
    false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid
    of this message.
    10.0.0.12 | CHANGED | rc=0 >>
    
    10.0.0.13 | CHANGED | rc=0 >>
    
    1
    2
    3
    4
    5
    6
    7
    8

# Ansible相关工具

# ansible

此工具通过ssh协议,实现对远程主机的配置管理,应用部署、任务执行等功能;

  • Ansible命令使用格式;

    ansible <host-pattern> [-m module_name] [-a args]
    
    1
  • Ansible的host-pattern使用;

    # 指定操作所有的组
    ansible all -m ping
    
    # 通配符;
    ansible "*" -m ping
    ansible 10.0.0.* -m ping
    
    # 与:在webservers组;并且在dbservers中的主机;
    ansible "webservers:&dbservers" -m ping
    
    # 或:在webservers组,或者在appservers中的主机;
    ansible "webservers:appservers" -m ping
    
    # 非:在webservers组,但不在apps组中的主机
    ansible 'webservers:!apps' -m ping
    
    # 正则表达式;
    ansible "~(web|db).*\.bi\.com" -m ping
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
  • Ansible命令常用选项说明;

    --version		# ansible版本信息
    -v 				# 显示详细信息
    -i 				# 主机清单文件路径,默认是在/etc/ansible/hosts
    -m 				# 使用的模块名称,默认使用command模块
    -a 				# 使用的模块参数,模块的具体动作
    -k 				# 提示输入ssh密码,而不使用基于ssh的密钥认证
    -C 				# 模拟执行测试,但不会真的执行
    -T 				# 执行命令的超时
    --become-user 	# 指定sudo时的用户名称,默认为root
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

# ansible-doc

  1. 查看所有的模块

    [root@manager ~]# ansible-doc -l
    
    1
  2. 查看模块的详细文档

    [root@manager ~]# ansible-doc copy
    
    1
  3. 查看模块的所有方法

    [root@manager ~]# ansible-doc -s copy
    
    1

# Ansible ad-hoc与常用模块

# ad-hoc基本介绍

# ad-hoc是什么

ad-hoc简而言之就是“临时命令”,执行完即结束,并不会保存;

  • 应用场景1:查看多台节点的进程是否存在;
  • 应用场景2:拷贝指定的文件至本地;

# ad-hoc命令使用

命令示例:ansible 'groups' -m command -a 'df -h',含义如下图所示;

20220327173723

# ad-hoc执行过程

  1. 加载自己的配置文件,默认/etc/ansible/ansible.cfg;

  2. 查找对应的主机配置文件,找到要执行的主机或者组;

  3. 加载自己对应的模块文件,如command;

  4. 通过Ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器;

  5. 执行用户家目录的.ansible/tmp/ansible-tmp-number/XXX.py文件;

  6. 给文件+x执行;

  7. 执行并返回结果;

  8. 删除临时py文件,sleep0退出;

# ad-hoc执行状态

使用ad-hoc执行一次远程命令,注意观察返回结果的颜色;

  • 绿色:代表被管理端主机没有被修改
  • 黄色:代表被管理端主机发现变更
  • 红色:代表出现了故障,注意查看提示

# Ansible常用模块

Ansible有着诸多的模块,虽然模块众多,但最为常用的模块也就20-30个左右;

# command模块

功能:在远程主机执行Shell命令;此为默认模块,可忽略-m选项;

注意:不支持管道命令|

参数 选项 含义
chdir chdir /opt 执行ansible时,切换到指定的目录
creates creates /data/file 如果文件存在,则跳过执行
removes removes /data/file 如果文件存在,则执行
  • 范例1:chdir,切换目录执行Shell命令;

    [root@manager ~]# ansible localhost -m command -a 'chdir=/etc pwd'
    localhost | CHANGED | rc=0 >>
    /etc
    
    1
    2
    3
  • 范例2:creates,如果/data/file文件存在,则跳过执行;

    [root@manager ~]# ansible localhost -m command -a 'creates=/data/file ifconfig ens33'
    localhost | SUCCESS | rc=0 >>
    skipped, since /data/file exists
    
    1
    2
    3
  • 范例3:removes,如果/data/file文件存在,则执行;

    [root@manager ~]# ansible localhost -m command -a 'removes=/data/file ifconfig ens33'
    localhost | CHANGED | rc=0 >>
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 10.0.0.11  netmask 255.255.255.0  broadcast 10.0.0.255
            inet6 fe80::250:56ff:fe38:9dec  prefixlen 64  scopeid 0x20<link>
            ether 00:50:56:38:9d:ec  txqueuelen 1000  (Ethernet)
            RX packets 26697  bytes 32693213 (31.1 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 12939  bytes 1574916 (1.5 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

# shell模块

功能:在远程主机执行Shell命令,执行管道等特殊符号的操作;

参数 选项 含义
chdir chdir /opt 执行ansible时,切换到指定的目录
creates creates /data/file 如果文件存在,则跳过执行
removes removes /data/file 如果文件存在,则执行
  • 范例:使用Shell命令过滤被控端主机的IP地址;

    [root@manager ~]# ansible localhost -m shell -a "ifconfig ens33|awk 'NR==2' "
    localhost | CHANGED | rc=0 >>
            inet 10.0.0.11  netmask 255.255.255.0  broadcast 10.0.0.255
    
    1
    2
    3

# script模块

功能:在被控节点,运行Ansible主机的脚本;

  • 范例:在Ansible主机上编写脚本,然后推送至被控端运行;

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

# yum模块

功能:管理各个操作系统的软件包;

参数 选项 含义
name httpd、nginx、... 指定安装软件包名或软件包URL
state present(Defaults)、absent、latest 指定yum对应的方法
enablerepo epel、base、... 允许从哪些仓库获取软件
disablerepo epel、base、... 禁止从哪些仓库获取软件
exclude kernel、... 排除某些软件包
download_only yes、no 仅下载软件包,不安装
  • 范例1:安装当前最新的Apache软件,如果存在则不安装

    [root@manager ~]# ansible webservers -m yum -a "name=httpd state=present"
    
    1
  • 范例2:安装当前最新的Apache软件,通过epel仓库安装

    [root@manager ~]# ansible webservers -m yum -a "name=httpd state=present enablerepo=epel"
    
    1
  • 范例3:通过公网URL安装rpm软件

    [root@manager ~]# ansible webservers -m yum -a "name=https://xx.rpm state=present"
    
    1
  • 范例4:安装最新版本的Apache软件,如果存在则更新Apache

    [root@manager ~]# ansible webservers -m yum -a "name=httpd state=latest"
    
    1
  • 范例5:更新所有的软件包,但排除和kernel相关的

    [root@manager ~]# ansible webservers -m yum -a "name=* state=latest exclude=kernel"
    
    1
  • 范例6:删除Apache软件

    [root@manager ~]# ansible webservers -m yum -a "name=httpd state=absent"
    
    1

# copy模块

功能:从Ansible服务端主控端复制文件到远程主机;

参数 选项 含义
src 复制本地目录下的文件至远程服务器
dest 文件复制到远程的绝对路径
owner root(Defaults) 文件复制到远程并设定属主
group root(Defaults) 文件复制到远程并设定属组
mode file=644,directory=755 文件复制到远程并设定权限
backup yes 备份被修改前的配置文件
content 新建文件并给文件添加内容
  • 范例1:将本地的httpd.conf文件Listen端口修改为8080,推送至远程服务器

    [root@manager ~]# ansible webservers -m copy -a "src=./httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644"
    
    1
  • 范例2:将本地的httpd.conf文件Listen端口修改为9090,推送至远程服务器,然后检查远端是否存在上一次的备份文件

    [root@manager ~]# ansible webservers -m copy -a "src=./httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644 backup=yes"
    
    1
  • 范例3:往远程的主机文件中写入内容,如果文件不存在则创建

    [root@manager ~]# ansible webservers -m copy -a "content="Http_Server" dest=/var/www/html/index.html"
    
    1

# file模块

功能:为被控端创建文件或目录,设定权限属性;

参数 选项 含义
path 指定远程服务器的路径
recurse 递归方式(可以是递归授权)
state touch、directory、link、absent 文件复制到远程的状态
owner root(Defaults) 文件复制到远程并设定属组
group root(Defaults) 备份被修改前的配置文件
mode file=644,directory=755 文件复制到远程并设定权限
  • 范例1:创建文件,并设定属主、属组、权限

    [root@manager ~]# ansible webservers -m file -a "path=/tmp/foo.conf state=touch mode=666"
    
    1
  • 范例2:创建目录,并设定属主、属组、权限

    [root@manager ~]# ansible webservers -m file -a "path=/tmp/foo state=directory mode=777"
    
    1
  • 范例3:递归授权目录

    [root@manager ~]# ansible webservers -m file -a "path=/tmp/foo state=directory owner=root group=root mode=777 recurse=yes"
    
    1

# lineinfile模块

功能:修改或删除文件内容,与系统中的sed命令类似;

参数 选项 含义
path 指定要操作的文件
regexp 使用正则表达式匹配对应的行
line 修改为新的内容
insertafter 将文本插入到“指定的行”之后
insertbefore 将文本插入到“指定的行”之前
state absent、present(Defaults) 删除对应的文本时,需要state=absent
backrefs yes、no 1.支持后向引用、2.当未匹配到内容则不操作文件
backup 是否在修改文件之前对文件进行备份
create 当要操作的文件并不存在时,是否创建对应的文件
  • 范例1:将SELINUX修改为disabled状态;

    [root@manager ~]# ansible localhost -m lineinfile -a 'path=/etc/selinux/config regexp='^SELINUX=' line=SELINUX=disabled'
    
    1
  • 范例2:删除/etc/sudoers文件中%wheel开头的行;

    [root@manager ~]# ansible localhost -m lineinfile -a 'path=/etc/sudoers regexp='^%wheel' state=absent'
    
    1
  • 范例3:替换/etc/hosts文件中以12.0.0.1开头的行为127.0.0.1 ansible.bi.com

    [root@manager ~]# ansible localhost -m lineinfile -a 'path=/etc/hosts regex='^127\.0\.0\.1' line="127.0.0.1 ansible.bi.com"'
    
    1
  • 范例4:修改默认Apache的端口为8080,使用insertafter;

    ansible localhost -m lineinfile -a 'path=/etc/httpd/conf/httpd.conf regexp='^Listen' line="Listen 8080" insertafter='^#Listen''
    
    1

# get_url模块

功能:通过互联网下载软件至被控端本地;

参数 选项 含义
url HTTP, HTTPS... 资源文件在互联网上的具体位置
dest 文件下载位置的绝对路径
mode 文件下载后的权限
checksum md5、sha256 对下载的资源进行校验
timeout 10(Default) URL请求超时时间
  • 范例1:下载互联网的软件至本地

    [root@manager ~]# ansible webservers -m get_url -a "url=https://mirrors.aliyun.com/xx.rpm dest=/tmp"
    
    1
  • 范例2:下载互联网文件并进行md5校验

    [root@manager ~]# ansible webservers -m get_url -a "url=http,https dest=/opt checksum=md5:76eb3af80ffd"
    
    1

# systemd模块

功能:管理服务启动与停止,与service模块用法一致;

参数 选项 含义
name httpd、nginx、... 定义要启动服务的名称
state started、stopped、restarted、reloaded 指定服务状态
enabled yes、no 允许服务开机自启或禁止服务开机自启
  • 范例1:启动Httpd服务

    [root@manager ~]# ansible webservers -m service -a "name=httpd state=started"
    
    1
  • 范例2:重载Httpd服务

    [root@manager ~]# ansible webservers -m service -a "name=httpd state=reloaded"
    
    1
  • 范例3:重启Httpd服务

    [root@manager ~]# ansible webservers -m service -a "name=httpd state=restarted"
    
    1
  • 范例4:停止Httpd服务

    [root@manager ~]# ansible webservers -m service -a "name=httpd state=stopped"
    
    1
  • 范例5:启动Httpd服务,并加入开机自启

    [root@manager ~]# ansible webservers -m service -a "name=httpd state=started enabled=yes"
    
    1

# group模块

功能:管理被控端用户组;

参数 选项 含义
name 指定创建的组名
gid 为组设置可选gid
state present(Default)、absent 是否将组创建在远程主机上
system yes、no(Default) 是否创建系统组
  • 范例1:创建news基本组,指定gid为9999

    [root@manager ~]# ansible webservers -m group -a "name=news gid=9999 state=present"
    
    1
  • 范例2:创建http系统组,指定gid为8888

    [root@manager ~]# ansible webservers -m group -a "name=http gid=8888 system=true state=present"
    
    1
  • 范例3:删除news基本组

    [root@manager ~]# ansible webservers -m group -a "name=news state=absent"
    
    1

# user模块

功能:管理被控端用户;

参数 选项 含义
name 创建或删除的用户名
uid 为用户设置可选uid
group 为用户设置主要的组
groups 为用户设置附加的组
shell present(Default)、absent 为用户设置登陆时的Shell
create_home yes(Default)、no 为用户创建主目录
state present(Default)、absent 用户是否应该存在
remove yes、no(Default) 删除与用户关联的目录,只有当state=absent时生效
generate_ssh_key yes、no(Default) 为相关用户生成ssh密钥。不会覆盖现有的ssh密钥
ssh_key_bits 2048 创建用户ssh密钥中位数
ssh_key_file .ssh/id_rsa(Default) 可以实现ssh密钥改名,或变更存放ssh密钥位置
  • 范例1:创建joh用户,uid是1040,主要的组是adm

    [root@manager ~]# ansible webservers -m user -a "name=joh uid=1040 group=adm"
    
    1
  • 范例2:创建joh用户,登录shell是/sbin/nologin,追加bin、sys两个组

    [root@manager ~]# ansible webservers -m user -a "name=joh shell=/sbin/nologin groups=bin,sys"
    
    1
  • 范例3:创建jsm用户,为其添加123作为登录密码,并且创建家目录

    [root@manager ~]# ansible localhost -m debug -a "msg={{ '123' | password_hash('sha512', 'sal1t') }}"
    $6$salt$jkH
    [root@manager ~]# ansible webservers -m user -a 'name=jsm password="$6$salt$jkH" create_home=yes'
    
    1
    2
    3
  • 范例4:示例四、移除joh用户

    [root@manager ~]# ansible webservers -m user -a "name=joh remove=yes state=absent"
    
    1
  • 范例5:创建http用户,并为该用户创建2048字节的私钥,存放在~/http/.ssh/id_rsa

    [root@manager ~]# ansible webservers -m user -a "name=http uid=8888 group=8888 generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa"
    
    1

# cron模块

功能:管理被控端计划任务;

参数 选项 含义
name 定时任务基本描述
job 定时任务要执行的命令
minute (Default)、0-59 分
hour (Default)、0-23 时
day (Default)、1-31 日
month (Default)、1-12 月
weekday (Default)、0-6 周
  • 范例1:添加定时任务,每分钟执行一次ls,* * * * * ls >/dev/null

    [root@manager ~]# ansible webservers -m cron -a "name='cron01' job='ls >/dev/null'"
    
    1
  • 范例2:添加定时任务,每天的凌晨2点和凌晨5点执行一次ls,0 2,5 * * * ls >/dev/null

    [root@manager ~]# ansible webserver -m cron -a "name='cron02' minute=0 hour=2,5 job='ls >/dev/null'"
    
    1
  • 范例3:关闭定时任务,使定时任务失效

    [root@manager ~]# ansible webservers -m cron -a "name='cron02' minute=0 hour=2,5 job='ls >/dev/null' disabled=yes"
    
    1

# mount模块

功能:管理被控端设备挂载;

参数 选项 含义
src 本地或远程设备的路径
path 设备挂载至本地的路径
fstype xfs、nfs... 文件系统类型
opts defaults、ro... 挂载的参数
state absent、mounted、unmounted 挂载的状态

环境准备:将Ansible作为nfs服务端,10.0.0.12、10.0.0.13作为nfs客户端挂载;

```sh
[root@manager ~]# ansible localhost -m yum -a 'name=nfs-utils state=present'
[root@manager ~]# ansible localhost -m file -a 'path=/ops state=directory onwer=nfsnobody group=nfsnobody'
[root@manager ~]# ansible localhost -m copy -a 'content="/ops 10.0.0.0/24(rw,sync)" dest=/etc/exports'
[root@manager ~]# ansible localhost -m service -a "name=nfs state=restarted"
```
  • 范例1:挂载nfs至本地的/opt目录,并实现开机自动挂载

    [root@manager ~]# ansible webservers -m mount -a "src=10.0.0.11:/ops path=/opt fstype=nfs opts=defaults state=mounted"
    
    1
  • 范例2:临时卸载nfs的挂载,但不清理/etc/fstab

    [root@manager ~]# ansible webservers -m mount -a "src=10.0.0.11:/ops path=/opt fstype=nfs opts=defaults state=unmounted"
    
    1
  • 范例3:永久卸载nfs挂载,同时清理/etc/fstab

    [root@manager ~]# ansible webservers -m mount -a "src=10.0.0.11:/ops path=/opt fstype=nfs opts=defaults state=absent"
    
    1

# hostname模块

功能:管理被控端主机名称;

  • 范例:设置主机名称为ansible-hostname

    [root@manager ~]# ansible localhost -m hostname -a 'name=ansible-hostname'
    
    1

# archive模块

功能:在被控端打包与压缩;

参数 选项 含义
path 要压缩的文件或目录
dest 压缩后的文件
format bz2、gz、tar、xz、zip 指定打包压缩的类型
  • 范例:将/var/log目录压缩为tar格式,并存储至/opt目录下;

    [root@manager ~]# ansible localhost -m archive -a 'path=/var/log dest=/opt/log.tar.gz format=gz'
    
    1

# unarchive模块

功能:解包与解压缩;

参数 选项 含义
src 要解压的软件包路径
dest 解压到目标位置
remote_src yes、no(default) yes:要解压的包在被控端、no:要解压的包在控制端
  • 范例:解压控制端的包;

    # 被控;
    [root@manager ~]# ansible webservers -m copy -a 'src=php.zip dest=/root/'
    [root@manager ~]# ansible webservers -m unarchive -a 'src=/root/php.zip dest=/tmp/ remote_src=yes'
    
    # 控制(*):
    [root@manager ~]# ansible webservers -m unarchive -a 'src=/root/php.zip dest=/tmp/'
    
    1
    2
    3
    4
    5
    6

# selinux模块

功能:管理SELINUX防火墙;

参数 选项 含义
state enforcing、permissive、disabled Selinux模式
  • 范例1:设置selinux为 enforcing

    [root@manager ~]# ansible webservers -m selinux -a "state=enforcing"
    
    1
  • 范例2:设置selinux为disabled

    [root@manager ~]# ansible webservers -m selinux -a "state=disabled"
    
    1
#ansible
Last Updated: 2022/03/30, 20:04:37
LVS调度算法详解
Ansible Playbook

← LVS调度算法详解 Ansible Playbook→

最近更新
01
谷歌云创建GKE集群
07-26
02
ElastiCacheForRedis启用密码
07-26
03
upload-to-gcs
06-29
更多文章>
Theme by Vdoing | Copyright © 2021-2024 Brc | MIT License | 浙ICP备19031881号-4
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式