Linux下ansible使用
一、ansible的功能和意义
1、功能
- ansible批量功能 ----------------------> 并行
- 01. 可以实现批量系统操作配置
- 02. 可以实现批量软件服务部署
- 03. 可以实现批量文件数据分发
- 04. 可以实现批量系统信息收集
2、意义
- 01. 提高工作的效率
- 02. 提高工作准确度
- 03. 减少维护的成本
- 04. 减少重复性工作
二、ansible的特点
- 1. 没有配置文件(不需要配置)
- 2. 不需要启动服务
- 3. 客户端不需要部署任务
三、ansible和相似的软件对比
和ansible相似的软件:saltstack
saltstack也是自动化批量管理软件。
但是saltstack比较复杂,软件服务比较重。
四、ansible安装
yum安装(需要epel源):
- yum -y install epel-release
- yum install -y ansible
五、ansible基本使用(默认是以root用户执行,但是基于ssh连接操作要多次输入密码,为方便可以使用基于ssh密钥方式进行认证)
1、ansible主要配置文件
- (1) ansible应用程序的主配置文件:/etc/ansible/ansible.cfg
- (2) Host Inventory定义管控主机:/etc/ansible/hosts
2、ansible应用程序命令
- ansible-doc 命令:获取模块列表,及模块使用格式;
- ansible-doc -l:获取模块列表
- ansible-doc -s module_name:获取指定模块的使用信息
ansible的命令格式可以理解为(ansible还有很多参数):
- ansible 主机信息(IP 主机组 all ...) -m (模块名)command -a "操作动作"
3、ansible执行命令返回信息的颜色的含义
(1)绿色:执行成功
(2)黄色:执行成功并且状态发生了改变
(3)红色:执行失败
提示:可以在ansible.cfg中进行定制颜色的设定
六、ansible主机清单功能模块(指定可以管理哪些主机)
1、主机清单配置方式:
方式1:直接把IP写在配置文件中
方式2:指定分组
- [oldboy]
- 172.16.1.41
- 172.16.1.31
- [oldgirl]
- 172.16.1.7
方式3:支持主机名符号匹配配置
- [oldboy]
- 172.16.1.[1:50]
- web[01:03]
方式4:支持内置变量信息配置
- [oldboy]
- 172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22
- [oldboy]
- 172.16.1.7 ansible_user=root ansible_password=123456 ansible_port=22
方式5:支持特殊变量信息配置 (剧本)
- [oldboy]
- 172.16.1.7
- [oldboy:vars]
- ansible_user=root
- ansible_password=123456
- ansible_port=22
方式6:嵌入式配置方法
- [backup:children]
- backupclient
- backupserver
- [backupclient]
- 172.16.1.7 ansible_user=root ansible_password=123456
- 172.16.1.31
- [backupserver]
- 172.16.1.41
2、ansible命令指定管理的主机方式
ansible命令后面指定要管理的主机,all表示主机清单里面的全部主机,也可指定主机清单里面的分组名等。
七、ansible的模块使用(以下列举的是一些常用的模块)
1、ping模块
2、command模块 :命令模块=========在目标主机执行命令
参数:
- chdir: 在执行命令前,先切换目录信息
- creates: 判断一个文件是否存在,如果存在,后面命令被跳过(不执行)
- removes: 判断一个文件是否存在,如果存在,后面命令就执行
- free_form:在使用command模块时候必须输入一个合法的linux命令
基本用法:
- [root@m01 ansible]# ansible backup -m command -a "hostname"
- 172.16.1.31 | CHANGED | rc=0 >>
- nfs01
- 172.16.1.41 | CHANGED | rc=0 >>
- backup
- 172.16.1.7 | CHANGED | rc=0 >>
- web01
特殊用法:
- chdir 参数:
- [root@m01 ansible]# ansible backup -m command -a "chdir=/tmp pwd"
- 172.16.1.31 | CHANGED | rc=0 >>
- /tmp
- 172.16.1.7 | CHANGED | rc=0 >>
- /tmp
- 172.16.1.41 | CHANGED | rc=0 >>
- /tmp
- creates 参数:
- [root@m01 tmp]# ansible backup -m command -a "creates=/etc/oldboy.txt touch /opt/oldboy.txt"
- 172.16.1.41 | CHANGED | rc=0 >>
- 172.16.1.7 | SUCCESS | rc=0 >>
- skipped, since /etc/oldboy.txt exists
- 172.16.1.31 | CHANGED | rc=0 >>
3、shell模块:万能模块==========在目标主机执行命令
- chdir: 在执行命令前,先切换目录信息
- creates: 判断一个文件是否存在,如果存在,后面命令被跳过(不执行)
- removes: 判断一个文件是否存在,如果存在,后面命令就执行
- free_form:在使用command模块时候必须输入一个合法的linux命令
- 可以识别一些特殊字符 < > | ; $
- 提示:shell模块虽然是万能模块,但最好选择专业的模块完成专业事情
例如:
- ansible backup -m shell -a "rpm -qa iftop"
4、script模块:命令模块==========执行脚本
例如:
- ansible backup -m script -a "/server/scripts/yum.sh"
5、copy模块:=============批量分发文件
作用:
- 01. 分发文件数据信息 从管理端 -- 被管理端
- 02. 修改文件权限属性信息
- 03. 移动远程主机数据信息 被管理端 -- /tmp/oldboy.txt --- /opt/
- 参数:
- src: 指定要推送的数据信息
- dest:指定数据保存在远程主机什么目录中
- mode:修改文件权限信息
- owner:修改文件属主信息
- group:修改文件属组信息
- backup: 分发文件数据时,会对源文件进行备份
- remote_src: 复制远程主机文件到其他路径,或者进行远程主机数据备份
- content: 直接编辑文件内容
基本用法:
- ansible backup -m copy -a "src=/etc/hosts dest=/etc/"
特殊用法:
传输文件时,修改文件权限:
- ansible backup -m copy -a "src=/etc/hosts dest=/etc/hosts.bak mode=600 owner=oldboy666 group=oldboy666"
分发文件时,对源文件进行备份:
- ansible backup -m copy -a "src=/etc/hosts dest=/etc/ backup=yes"
远程主机文件进行复制备份(便于批量还原):
- ansible backup -m copy -a "src=/etc/hosts dest=/etc/hosts.backup remote_src=yes"
批量还原:
- ansible backup -m copy -a "src=/etc/hosts.backup dest=/etc/hosts remote_src=yes"
直接编辑文件信息,并且进行批量分发:
- ansible backupclient -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"
6、fetch模块:===================批量拉取文件
- ansible 172.16.1.7 -m fetch -a "src=/etc/oldgirl.txt dest=/tmp"
7、file模块:
作用:
01. 修改文件权限信息
02. 创建数据信息/删除数据信息
基本用法:修改文件权限
- ansible 172.16.1.7 -m file -a "path=/etc/oldgirl.txt mode=666 owner=oldboy666 group=oldboy666"
特殊用法:创建数据信息
- 参数:state
- absent -- 删除数据信息
- directory -- 创建目录
- file ←
- hard -- 创建硬链接
- link -- 创建软链接
- touch -- 创建文件
创建文件:
- ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy.txt state=touch"
创建目录:
- ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy_dir state=directory"
删除文件数据:
- ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy_dir/oldboy_soft_link state=absent"
8、cron模块:定时任务模块=========批量添加设置定时任务信息
- 参数:
- minute hour day month weekday --- 时间参数
- job -- 指定定时任务信息
- name -- 添加注释信息
- state -- absent 删除定时任务 present 添加定时任务
- disabled -- 注释定时任务 yes 取消定时任务注释 no
每隔5分钟,时间同步:
- ansible backup -m cron -a "name='date ntpdate crond02' minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null'"
批量删除定时任务信息:
- ansible backup -m cron -a "name='date ntpdate crond' state=absent"
批量注释定时任务信息:
- ansible backup -m cron -a "name='date ntpdate crond' minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"
9、yum模块:批量下载安装软件
- 参数:
- name: 指定软件名称
- state: 指定动作信息 installed
- ansible backup -m yum -a "name=nmap state=installed"
10、service模块:管理服务状态模块
作用:批量启动/停止服务程序 设置服务是否开机自动启动
- 参数:
- name: 定义服务名称
- state: 是否启动 started 停止 stopped 重启 restarted 平滑重启 reloaded
- enabled:设置服务是否开机自动启动
- ansible backup -m service -a "name=firewalld state=started enabled=yes"
- ansible backup -m service -a "name=firewalld state=stopped enabled=no"
11、user模块:用户管理
- 参数
- name 创建的用户名称
- uid 指定用户的uid信息
- group 指定属于主要组
- groups 指定属于哪个附属组
- password 设置用户密码信息???
- shell 指定登录方式 /bin/bash /sbin/nologin
- create_home:
创建虚拟用户:
- ansible backup -m user -a "name=Alex uid=250 group=root groups=oldboy shell=/sbin/nologin create_home=no"
12、mount模块:挂载
- 参数:
- src:需要挂载存储设备信息
- path: 挂载点路径信息
- fstype:挂载类型信息
- state:挂载操作(mounted present)/卸载操作(unmounted absent)
- mounted:可以实现立即挂载 永久开机自动挂载
- present:永久开机自动挂载
- unmounted:可以实现立即卸载
- absent:可以实现立即卸载 永久卸载
批量挂载:
- ansible 172.16.1.7 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted"
八、ansible剧本
1、具体的编写规范
(1)python yaml 语法规范
(2)规范位置
- mkdir /etc/ansible/ansible_playbook
- vim /etc/ansible/ansible_playbook/test.yaml
(3)语法规范
- 规则一:缩进
- yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级别由两个空格组成。一定不能使用tab键
- 规则二:冒号
- CMD="echo"
- yaml:
- mykey:
- 每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)
- 规则三:短横线
- 想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分
核心规则:有效的利用空格进行剧本的编写,剧本编写是不支持tab的
2、剧本的执行方式
(1)检查剧本的语法
- ansible-playbook --syntax-check test.yaml
(2)剧本模拟执行
- ansible-playbook -C test.yaml
(3)正式执行剧本
- ansible-playbook test.yaml
3、ansible剧本的编写
Linux下ansible使用的更多相关文章
- Linux下ansible的group模块
一.概述 group 模块可以帮助我们管理远程主机上的组. 二.常用参数 name参数:必须参数,用于指定要操作的组名称. state参数:用于指定组的状态,两个值可选,present,absent, ...
- linux下安装部署ansible
linux下安装部署ansible 介绍 Ansible是一种批量部署工具,现在运维人员用的最多的三种开源集中化管理工具有:puppet,saltstack,ansible,各有各的优缺点,其中sal ...
- Ansible学习记录一:Linux下部署
0.Ansible介绍 Ansible 是一个简单的自动化运维管理工具,可以用来自动化部署应用.配置.编排 task(持续交付.无宕机更新等),采用 paramiko 协议库(fabric 也使用这个 ...
- Linux下实现免密登录
过程如下: 1.Linux下生成密钥 通过命令”ssh-keygen -t rsa“ 2.1 通过ssh-copy-id的方式 命令: ssh-copy-id -i ~/.ssh/id_rsa.put ...
- 1.Linux下生成密钥
1.Linux下生成密钥 ssh-keygen的命令手册,通过”man ssh-keygen“命令: 通过命令”ssh-keygen -t rsa“ 生成之后会在用户的根目录生成一个 “.ssh”的文 ...
- linux 下使用github
Linux下Git和GitHub环境的搭建 1.创建Github帐号 (name@server.com) 2.安装git [root@cloud ~]# yum install git -y 3.生 ...
- Linux下如何使用Rsync备份服务器重要数据
Rsync介绍: Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似 ...
- NodeJs在Linux下使用的各种问题
环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
随机推荐
- 还不了解一下 Java 8 Predicate 函数接口
同学你好,这里有一份你的未读代码,等你查收. 这篇文章属于 Java 8 教程(LTS)系列教程,点击阅读更多相关文章. Predicate 函数接口同之前介绍的 Function 接口一样,是一个函 ...
- String,String Builder,String Buffer-源码
目录 String 源码分析 常用的API isEmpty() length() charAt() substring() equals() equals()与"==" inter ...
- JS系统函数
1. parseInt--转为整型 2. parseFloat--转为浮点型 3. Number--转为数字型 4. isFinite()--检测一个值是否为有限值,如果是返回true,否则就是Inf ...
- 为什么 WordPress 镜像用起来顺手?
有用户朋友问,用已有WordPress镜像好?还是自己动手安装配置好? 答案:用Websoft9的相关镜像好(各大云市场的镜像提供商比较多,"真假李逵"的现象总是有的,我们只对We ...
- Bugku-web-字符?正则?
题目意思很明显,根据给出的规则构造出合理的正则表达式然后通过get方式提交弹出Flag. i:字体大小 /..../表示开始和结束. .号表示匹配0-9任一数字 *号表示重复前一个字符多次 {4,7} ...
- HTML5(十一)——WebSocket 基础教程
一.为什么要学 WebSocket? websocket 是 HTML5 提供的一种长链接双向通讯协议,使得客户端和服务器之间的数据交换更简单,允许服务端主动向客户端推送数据,并且客户端与服务端只需连 ...
- 一键部署lamp脚本
#!/bin/bash systemctl stop firewalld systemctl disable firewalld setenforce 0 #-------Apache------ # ...
- LDAP未授权访问学习
LDAP未授权访问学习 一.LDAP 介绍 LDAP的全称为Lightweight Directory Access Protocol(轻量级目录访问协议), 基于X.500标准, 支持 TCP/IP ...
- 题解 block
传送门 如果不想让next_permutation()自动忽略重复元素,可以在比较函数里加个rk之类的东西使它们不同(next_permutation()不用等于号) 关于第一问:貌似也是一个挺常见的 ...
- Sadmin:打造私有Django公共库实现代码复用
我们借助于Django开发了许多的内部管理系统,例如之前介绍过的Probius.Kerrigan.Proxy等等,这些系统看起来长的都一样,但实际实现的功能确是千差万别,这些不同的系统为什么会长的一样 ...