Ansible 概念理解
特点:基于python开发,有丰富的内置模块,一条命令影响上千台机器,无客户端,通信基于ssh 具有幂等性
工具集:
如图:四种工具集
1,lnventory:主机清单
2,moudle : 模块
3,playins : 插件
4,API : 接口
使用流程:
使用者在使用式,在服务器终端输入命令或者playbooks,会通过预定好的规则将playbook拆解为play,再组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过SSH将临时文件发给远程的客户端执行并返回结果,执行结束后自动删除
服务端和客户端之间免密通讯
用到一个命令:sshpass (免交互连接)在yum安装ansible时,sshpass命令包已经安装了,后续不用再安装一次
用法:
#sshpass -p 远程客户端密码 ssh root@IP
#sshpass -p 密码 ssh -o StricHostKeyChecking=no root@IP
安装后配置:
vim /etc/ansible/hosts
[组名]
机器ip...........
####################
之后测试一下:#ansible 组名 -a "df -hT"
Ansible 语法:
ansible -i
ansible 组名 -m
ansible 组名 -m 模块 -a "命令" --limit
ansible-playbook + 文件名.yaml/yml
基本常用的模块
一,command模块在远程主机执行命令,不支持管道,重定向等shell的特性,常用到的参数(不支持管道)
1,chdir:在远程主机上运行命令前提前进入目录
2,creates: 在命令运行时创建一个文件,如果文件存在,则不会创建任务
3,removes: 在命令运行时移除一个文件,如果文件不存在,则不会执行移除任务
4,executeble: 指明运行命令的shell程序
案例:ls查看所有客户机
ansible all -m command -a "chdir=/home ls ./"
二,shell模块在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持shell命令)
案例:测试管道符
ansible 组名 -m shell -a 'ifconfig ens32 | awk "/ether/{print $2}"'
三,raw模块,最原始的方式运行命令 (不依赖python,仅通过ssh实现)
案例:清除yum缓存
ansible all -m raw -a "yum clean all "
四,copy模块用于复制指定主机文件到远程主机的
1,dest : 指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
2,src :指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
3,mode: 指出复制时,目标文件的权限
4,owner:指出复制时,目标文件的属主
5,group: 指出复制时,目标文件的属组
6,content:指出复制到目标主机上的内容,不能与src一起使用
五,hostname 模块用于管理远程主机上的主机名
案例:
ansible 组名 -m hostname -a "name=主机名"
六,yum模块管理远程的安装包
1,name : 程序包名,可以带上版本号
2,state=present|latest|absent : pressent表示安装包;latest表示安装最新版本的程序包;absent表示卸载程序包
3,disablerepo :在用yum安装时禁用某个仓库ID
4,enablerepo:在用yum安装时启用某个参考的ID
5,conf_file:YUM运行时的配置文件,而不是使用默认的配置文件
七,service 模块
1,name:被管理的服务名称
2,state=started|stopped|restarted:动作包含启动关闭或者重启
3,enabled=yes|no :表示是否设置该服务开机自启
4,runlevel:如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动
案例:ansible 组名 -m service -a "name=httpd state=started enabled=yes"
八,User模块
用户管理的模块
1,name : 必选参数
2,state=present|absent: 创建账号或者删除账号,present表示创建,absent 表示删除
3,system=yes|no:是否为系统账号
4,uid:用户uid
5,group:用户基本组
6,shell:默认使用的shell
7,move_home=yse|no :如果设置的家目录已经存在,是否将已经存在的家目录进行移动
8,password:用户的密码,建议使用加密后的字符串
9,comment:用户的注释信息
10,remove=yes|no 当state=absent时,是否删除用户的家目录
九,script模块实现远程批量运行本地的shell脚本
ansible 组名 -m script -a "/root/脚本名.sh"
十,PLAYBOOK:
文件后缀.yaml
这里介绍一个命令ansible-vault(加密文件)一般用于playbook写好后,防止敏感信息泄露,从而对此文件进行加密处理:用法: #ansible-vault encrypt 文件.yml (也可对其他后缀的文件进行加密)
加密后不可运行文件,需先解密
解密用法:ansible-vault decrypt 文件.yml
#ansible-vault view 文件.yml //看加密后文件内容
# ansible-vault edit 文件.yml //修改加密后的文件
#ansible-vault rekey 文件.yml //修改口令
============工具============
交互工具
#ansible-console
Welcome to the ansible console.
Type help or ? to list commands.
root@all (0)[f:5]$ // “all”代表全部组 其中的()里是当前组有多少个主机
//[]:表示可以支持多少并发
并发可以修改:forks 10 //在后面输入即可改为10并发
交互用法:
root@all (0)[f:5]$ command(模块) hostname(命令) //模块加命令即可实现对组主机操作
单个进入一个主机操作:cd + IP 就可以
playbook
Playbook 是由一个或者多个play组成的列表(YAML语言编写)
主要功能在于将事先归并为一组的主机装扮成事先通过ansible中task定义好的角色。
工作流程:
YAML语言简介
- 使用#号注释代码
- 缩进必须是统一的,不能空格和TAB混谈
- 缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别通过缩进
- 键值对可以同行写,或者分隔写
- 一个完整的代码块功能需要包含name:task
- 一个name只能包括一个task
- YAML文件扩展名通常为yml或yaml
- “-”开头
#playbook书写规范
#尽量用空格
#
#模板————————————————————————————-
- host : hostname #主机名
remote_user : root #远程主机用户
tasks: #任务列表
- name : test1 #任务名称
user : name=user state=present #执行user模块
tages: #创建标签
- testa #标签名
- name : test2
group : name=root system=yes
tages:
- testb
- name : test3
command : hostname
tages:
- testb
#----------------------------------------------------------------------------------------------
没有处理不了的问题,只有不能处理的人