Ansible精简
ansible的使用以及剧本
在使用的每台机器上安装ansible
安装配置
yum install -y epel*
yum install -y ansible
配置文件
vim /etc/ansible/hosts
vim /etc/ansible/ansible.cfg
主机组和包含组配置文件写法
[webservers]
192.168.10.11
[weball:children]
webserver
某一个组配置连接变量
[weball:vars]
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_private_key_file=/root/.ssh/id_rsa
ansible_ssh_pass=1
看默认主机文件里的主机
ansible weball --list-hosts
在别的地方写主机清单
vim /opt/hostlist
#使用-i参数调用里面的组
ansible -i /opt/hostlist all -m ping -o
模块
复制模块
1.远程复制备份模块:copy
模块参数详解:
src=:指定源文件路径
dest=:目标地址(拷贝到哪里)
owner:指定属主
group:指定属组
mode:指定权限,可以以数字指定比如0644
backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
使用命令实例
把本地的拷贝到对方机器
ansible web -m copy -a 'src=/root/b dest=/root/a '
带上copy=no是指不从本地拷贝,在远程主机上操作
用户管理user模块
添加用户:
ansible web -m user -a "name=123"
添加叫123的用户
删除用户
ansible web -m user -a "name=123 state=absent"
软件包管理 yum模块
安装软件包
ansible web -m yum -a 'name=httpd state=latest'
ansible web -m yum -a 'name=httpd state=remove'
服务管理service模块
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=started" #启动
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=stopped" #停止
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=restarted" #重启
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=started enabled=yes" #开机启动
[root@ansible-server ~]# ansible webservers1 -m service -a "name=httpd state=started enabled=no" #开机关闭
文件模块file
参数
模块参数详解:
owner:修改属主
group:修改属组
mode:修改权限
path=:要修改文件的路径
recurse:递归的设置文件的属性,只对目录有效
yes:表示使用递归设置
state:
touch:创建一个新的空文件
directory:创建一个新的目录,当目录存在时不会进行修改
实例
ansible web -m file -a 'path=/tmp/88.txt mode=777 state=touch '
ansible web -m file -a 'path=/tmp/99 mode=777 state=directory '
脚本 script 模块
指定本地的脚本文件,到远程主机运行一次
注意:和 shell 模块的不同,shell 模块是要求客户端上有这个脚本才能执行;script 是要求 ansible 服务端有这个脚本就可以了,执行的时候是不会拷贝这个脚本到客户端的。
ansible webservers1 -m script -a "chdir=/mnt /root/test.sh"
要给脚本权限
chmod o+x test.sh
参数:
creates:如果其后跟的文件存在,则不执行脚本;
removes:如果其后跟的文件存在,则执行脚本;
ansible webservers1 -m script -a "/root/awk.sh removes=/etc/passwd"
收集信息模块setup
收集主机组信息
ansible webservers1 -m setup #收集所有信息
查询主机组的ip
ansible webservers1 -m setup -a 'filter=ansible_all_ipv4_addresses' #只查询ipv4的地址
archive模块
作用:压缩
常用参数
path 打包目录名称
dest 声称打包文件名称
format 打包格式
owner 指定文件所属人
mode 指定文件权限
ansible webservers1 -m archive -a "path=/etc dest=/mnt/etc.tar.gz format=gz"
解压模块unarchive
参数解释:
copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
ansible webservers -m unarchive -a 'src=/root/jdk-8u191-linux-x64.tar.gz dest=/opt/ copy=yes' -o
cron模块作用:计划任务
常用参数
minute 分钟
hour 小时
day 天
month 月
weekday 周
name 任务名称
job 任务脚本或命令
disabled yes 禁用计划任务/no 启动计划任务
state=absent 删除计划任务
ansible webservers -m cron -a 'job="rm -rf /mnt/*" name="deletefile" minute="53" hour="20" day="7" month="5"'
ansible-playbook
概念
-
剧本(Playbook): 一个包含一系列任务的 Ansible 配置文件,通常使用 YAML 编写。
-
主机组(Hosts): 定义任务将在哪些主机上执行。可以使用具体的主机名、IP 地址,也可以使用在 Ansible 主机清单(Inventory)中定义的主机组。
-
任务(Task): 定义了在目标主机上执行的一组操作。每个任务通常与一个模块(Module)关联,模块用于执行特定的功能,例如安装软件、配置文件等。
-
模块(Module): Ansible 操作的基本单元,用于执行特定的功能。例如,apt 模块用于管理 Debian/Ubuntu 系统上的软件包。
-
角色(Roles): 可以将一组任务和文件组织成可重用的角色。角色包含了在多个剧本中共享的任务和变量。
-
变量(Variables): 允许你在剧本中定义和使用变量,使剧本更具灵活性和可重用性。
-
处理器(Handlers): 用于在剧本中定义的任务中触发的操作,通常用于在特定条件下重新启动服务或执行其他动作
架构
playbook的基础组件:
- name:
定义playbook或者task的名称(描述信息),每一个play都可以完成一个任务。 - hosts:
playbook中的每一个paly的目的都是为了让某个或某些以某个指定用户的身份执行任务。hosts用于指定要执行指定任务的主机. - user :
remote_user则用于指定远程主机上的执行任务的用户,也可以使用user(基本上是root) - tasks :
任务列表play的主体部分是task list. task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。 - vars:
定义变量(如果不使用内部变量需要提前定义) - vars_files:
调用定义变量文件 - notify:
任务执行结果如果是发生更改了的则触发定义在handler的任务执行 - handlers:
用于当前关注的资源发生变化时采取一定指定的操作
角色
目录顺序:
- role_name/ ---角色名称=目录
- files/:存储一些可以用copy调用的静态文件。
- tasks/: 存储任务的目录,此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用es;
- handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由(与notify:名字相同,方便notify通知执行下一条命令)通过main.yml进行“包含”调用;
- vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;
- templates/:存储由template模块调用的模板文本; (也可以调用变量)
- site.yml:定义哪个主机应用哪个角色