Ansible
简介
ansible是基于Python语言开发的配置管理工具,批量分发软件,部署任务。
ansible框架
核心core:ansible
主机列表:host inventory,记录着需要部署服务的主机ip、域名、主机名
核心模块:core modules
扩展模块:consume modules
链接插件:connectiors plugin,SSH
插件:olugins,log,mail
实验步骤
第一台上操作:
生成ssh密钥
ssh-keygen
吧密钥拷贝出去
ssh-copy-id 192.168.43.3
ssh-copy-id 192.168.43.28
安装软件包
yum -y install ansible
更改hosts文件
vim /etc/ansible/hosts
[web1] #这个模块的名字,以及那些主机属于这个模块
192.168.43.28 #这个是你要管理的主机ip
192.168.43.3
[web2]
192.168.43.57
查看ansible有多少个核心模块
ansible-doc -l
ansible的常用模块
ansible ip/domain_name/hostname/group_name -m module_name -a "job"
ansible命令解析
ansible web1 -m user -a "name=user1 uid=501" #web1是指定的区域名、模块名
#-m 指定模块
#-a -m模块的参数
command模块命令
ping:用来测试ansible预远程主机的链接情况 例:ansible all -m ping //这个是测试你所连接的主机是不是都是好的,绿色的是正确的 颜色分为四种:黄色:表示成功,修改了内容 绿色:表示成功 红色:表示错误没有连接成功 紫色:表示警告2、command:在远程主机上运行指定命令要加 -a
例:
ansible all -m command -a "ls /home"
chdir:切换工作目录
ansible web1 -m command -a ""
creates:当指定的文件存在是不执行后面的命令,不存在则执行后面的命令
ansible web1 -m command -a "creates=/etc/haha ls /home"
removes
ansible web1 -m command -a "removes=/etc/fstab ls /home"
shell模块命令:
script模块:在远程主机上执行指定的ansible中的脚本文件
user模块:创建、删除、管理远程主机上的用户
参数:
name:指定要管理的用户的名字,如果该用户名在远程主机上不存在则创建
例:
ansible web1 -m user -a "name=user1"
password:对指定的用户进行修改密码,如果密码存在则覆盖
例:
openssl passwd -1 123.com //生成密文密码,-1 是使用MD5加密
ansible web1 -m user -a 'name=user1 password="$1$5sKX.H8d$yi.j90HD8d7XMrrfXXa1L."'
uid:修改用户的uid
例:
ansible web1 -m user -a "name=user1 uid=501"
shell:指定用户的shell环境
例:
ansible web1 -m user -a "name=user1 shell=/sbin/nologin"
group:修改用户的基本组
例:
ansible web1 -m user -a "name=user1 group=root"
groups:给用户指定附加组
append=yes
例:
ansible web1 -m user -a "name=user1 groups=user1 append=yes"
state=absent:删除指定用户
remove=yes:删除用户的相关数据
例:
ansible web1 -m user -a "name=user1 state=absent remove=yes"
group模块:创建、删除、管理远程主机上组
name:指定用户组名,如果远程主机不存在则创建
例:
ansible web1 -m group -a "name=group1"
gid:修改组的gid
例:
ansible web1 -m group -a "name=group1 gid=1982"
state=absent:删除指定的组
例:
ansible web1 -m group -a "name=group1 state=absent"
copy模块:将ansible主机上的文件拷贝到远程主机上
src:复制本地的文件
dest:复制到所存放的位置
例:
ansible web1 -m copy -a "src=/bb dest=/"
content:修改指定文件的内容
例:
ansible web1 -m copy -a 'content="hehe" dest=/bb'
force=no:当拷贝的文件与远程主机的一样不进行更改内容,不加这个默认覆盖
例:
ansible web1 -m copy -a 'src=/bb dest=/bb force=no"
backup:当拷贝的文件名与远程主机一样,会进行备份然后在覆盖
owner:指定要拷贝的文件的属主
group:指定要拷贝的文件的属组
mode:指定要拷贝文件的权限
例:
ansible web1 -m copy -a "src=/cc dest=/ owner=ceshi group=ceshi mode=777"
file模块:创建、删除、管理远程主机上的文件
参数:
path:指定文件见的路径
state:
touch:指定文件不存在,则创建普通文件
directory:指定的文件不存在,则创建目录
link:指定的文件不存在,则创建软连接与src一起使用
absent:删除指定的文件
例:
ansible web1 -m file -a "path=/xixi state=touch"
例:
ansible web1 -m file -a "path=/xixi11 state=directory"
例:
ansible web1 -m file -a "path=/xixi22 state=link src=/xixi"
例:
ansible web1 -m file -a "path=/xixi state=absent"
owner:创建时修改文件的属主
group:创建时修改文件的属组
mode:创建时修改文件的权限
例:
ansible web1 -m file -a "path=/xixi owner=ceshi group=ceshi mode=777"
cron模块:
crontab -e
* * * * * job //job要执行的任务 分时日月周
* 14 * * 3 touch /three
@reboot touch /three //@reboot每次重启
@hourly touch /three //@hourly每个小时
@daily
参数:
name:给任务起个名字
minute
hour
day
month
special_time:reboot,hourly,daily,monthly,year
yum模块:在远程主机上用yum安装软件
name:软件包的名字
state:
安装:installed、lastest
删除:removed、absent
disable_gpg_check=yes:不要对安装的软件进行秘钥检查
例:
ansible web1 -m yum -a "name=mariadb-server state=installed disable_gpg_check=yes"
service模块:管理远程主机上的服务
参数:
name:指定管理的服务的名字
state:
started:开启
stopped:关闭
restarted:重启
reloaded:重新加载配置文件
enabled:设置为开机自启动
例:
ansible web1 -m service -a "name=maridb-server state=started"
playbook:剧本
yaml:yaml an't markdown language,yaml不是标记语言
语法格式:
--- //文件的开头,三个横岗 filename.yaml/filename.yam 后缀名
区分大小写:缩进用空格来表示,不用制表符(就是TAB)
one
two-1
two-2
three-1
three-2 #用空格来表示层级关系
#表示是注释
数据类型:
- fruit: apple
对象: 键值对
值:数字,字符串、布尔值(true,false)
数字、字符串、布尔值
ansible-playbook --syntax-check service.yaml #检查playbook的语法真确与否 #这是你文件名字
ansible-playbook #执行playbook文件
例:
ansible-playbook /root/service.yaml #后面加你要执行文件的绝对路径
hosts: web1 #你要让那些主机执行,可以写ip,可以写组
remote_user: root #要用什么用户执行下面的操作
tasks: 这些都是固定的单词
- yum: name=mariadb-server state=installed disable_gpg_check=yes
- name: install httpd
yum: name=httpd state=installed disable_gpg_check=yes
- service: name=mariadb state=started
- service: name=httpd state=started