一、ansible简介
ansible是一个自动化批量部署工具,底层是用python写的(paramiko,jinjia2(模板语言),yaml)
核心组件:
Ansible:ansible的核心程序
Playbooks:yaml格式文件,多个任务定义在一个文件中,使用时可以统一调用,‘剧本’用来调用哪些主机需要调用哪些模块来完成的功能。
Host Inventory:管理主机,记录了由每一个ansible管理的主机信息,包括ssh端口号,root用户密码,ip地址等,可以通过file加载,也可以通过CMDB加载。
Core Modules:核心模块,把常用命令模块化,Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。
Custom Modules:支持任意语言,自定义模块,完成Core Modules无法完成的功能。
Connection Plagins:连接作用,连接插件,Ansible和Host通信使用。
工作原理:
ansible加载hosts文件,通过免密钥或配置文件参数来批量管理主机。
优点:
ansible不需要安装客户端或agent(代理)
支持API和自定义模块
通过playbooks定制强大的配置,状态管理
配置简单,功能强大
提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台
幂等性:一次操作重复多次结果相同
ansible配置客户端(两种方法):
第一种:ssh免密登录
第二种:vim /etc/ansible/hosts在最低端写入要管理的主机
如:192.168.42.12 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=root
二、ansible常用模块
①ping模块
[root@localhost ~]# ansible testhost -m ping 192.168.42.10 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.42.9 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.42.8 | SUCCESS => { "changed": false, "ping": "pong" }
②command模块
这个模块可以直接在远程主机上执行命令,并将结果返回本主机。
ansible testhost -m command -a ‘ls -ltr‘
③shell模块
shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等。
ansible testhost -m shell -a ‘rpm -qa | grep "http"‘
④copy模块
这个模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等。(src是源文件,dest是目标文件,可以改名)
ansible testhost -m copy -a ‘src=/root/1 dest=/tmp‘
#给定内容生成文件,并制定权限
ansible web -m copy -a ‘content="I am keer\n" dest=/data/name mode=666‘ #connect可以直接指定文件的值(替换src)
#查看上条命令的执行结果
ansible testhost -m shell -a ‘ls -l /tmp/‘
#覆盖,原文件备份
ansible testhost -m copy -a ‘content="I am keerya\n" backup=yes dest=/tmp/name mode=666‘
⑤file模块
该模块主要用于设置文件的属性,比如创建文件、创建链接文件、删除文件等。
⑥yum模块
name=要安装的包名 state有三种模式(present下载 latest下载最新版本 absent卸载)
ansible testhost -m yum -a ‘name=httpd state=present‘
⑦service模块
该模块用于服务程序的管理。
name=服务名称 state有started,stopped,restarted,reloaded四种模式,enabled开机自启。
ansible testhost -m service -a ‘name=ntpd state=started enabled=true‘
⑧user模块
该模块主要是用来管理用户账号。
#创建一个uid为11111的keer用户
ansible testhost -m user -a ‘name=keer uid=11111‘
#删除用户
ansible testhost -m user -a ‘name=keer state=absent‘
⑨scrip模块
该模块用于将本机的脚本在被管理端的机器上运行。直接指定脚本的路径即可
在服务端写一个脚本/tmp/test.sh
ansible testhost -m script -a ‘/tmp/test.sh‘
⑩setup
查看用户信息
facts组件是Ansible用于采集被管机器设备信息的一个功能,我们可以使用setup模块查机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最上层的值。
facts就是变量,内建变量 。每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件。
ansible testhost -m setup
ansible testhost -m setup -a ‘filter="*mem*"‘
三、playbooks
一个任务叫做一个play,多个play组成的组合叫playbooks
①基础
- hosts: testhost remote_user: root tasks: - name: cteate user name user: name=jam1
②变量
- hosts: testhost #冒号后面必须有空格 remote_user: root vars: - packages: jam2 #等价于packages=jam2 tasks: #tasks的s不能少 - name: cteate user name #名字随便起,最好是任务的注释 user: name={{ packages }} #与变量呼应 - name: delete user: name=jam1 state=absent
③迭代
什么情况下可以用到迭代?
安装软件包;创建用户,组;删除用户,软件包等
- hosts: testhost #-和:后面必须都有空格 remote_user: root #用root用户执行 vars: - packages: jam2 tasks: - name: cteate user name user: name={{ packages }} - name: delete user: name=jam1 state=absent - name: yum install many user: name={{ item }} state=present #迭代固定格式 with_items: #固定 - jam0 - jam1 - jam2 - jam3
④触发器
只要执行文件就重启ntpd,类似于只要修改配置文件就重启服务
- hosts: testhost remote_user: root vars: - packages: jam2 tasks: - name: cteate user name user: name={{ packages }} - name: delete user: name=jam1 state=absent - name: yum install many user: name={{ item }} state=present with_items: - jam0 - jam1 - jam2 - jam3 notify: #触发器,固定 - restart ntp #随便起 handlers: #要与tasks对齐 - name: restart ntp #名字要与触发器名字一样 service: name=ntpd state=restartede‘u
⑤模板
原文:https://www.cnblogs.com/daisyyang/p/10806203.html