ansible安装、点对点Ad-Hoc、模块、剧本Playbook

DevOps:

官网:https://docs.ansible.com

自动化运维工具对比

C/S 架构:客户端/服务端

Puppet:基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱

SaltStack:基于 Python 开发,采用 C/S 架构,YAML使得配置脚本更简单.需要配置客户端及服务器端;每台被控制节点需要安装agent

Ansible:基于 Python开发,分布式,无需客户端,轻量级,配置语法使用YAML语言,更强的远程命令执行操作 (优点)

Ansible简介(是什么、做什么、特点)

ansible是新出现的自动化运维工具,基于Python开发,分布式,无需客户端,轻量级,实现了批量系统配置、批量程序部署、批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架

一、安装

245(ansible)

vim /etc/hosts   (做解析)

IP+名字

配置ssh公钥认证:控制节点需要发送ssh公钥给所有非被控制节点(做免密)

ssh-keygen

ansible安装、点对点Ad-Hoc、模块、剧本Playbook_第1张图片

yum list | grep ansible  //有ansible 仓库

yum install -y ansible   //下载ansible

ansible --version   //查看版本、配置文件、python版本

ansible安装、点对点Ad-Hoc、模块、剧本Playbook_第2张图片

ansible --help   //帮助手册

二、主机清单inventory

vim /etc/ansible/hosts (要管理谁就写入谁)

web-1 //为主机

[db] 为主机组

ansible安装、点对点Ad-Hoc、模块、剧本Playbook_第3张图片

查看组内主机列表

语法:ansible  组名  --list-hosts

ansible web --list-hosts   //查看组里的主机

ansible安装、点对点Ad-Hoc、模块、剧本Playbook_第4张图片

[root@ansible-server ~]# ansible -i /opt/hostlist all -m ping -o
-i:指定清单文件

-m:调用模块

all:所有组

-o:改变输出格式

三:点对点Ad-Hoc

ansible-doc -l   //列出所有模块

ansible-doc -s yum   //yum的使用方法

用户管理模块:user

添加用户并设置密码:

[root@ansible-server ~]# ansible webservers1 -m user -a "name=liudehua password=`echo 1234 | openssl passwd -1 -stdin`" -o
"name=   "  #如:指定的用户名,要安装的软件
-1 MD5加密算法

删除用户:

[root@ansible-server ~]# ansible webservers1 -m user -a "name=liudehua state=absent" -o
adsent #删除用户,但是不会删除家目录

组管理模块:group 

gid:为组设置的可选GID
name:要管理的组的名称
state:该组是否应该存在于远程主机上;absent不在/默认是present在
system:如果是,表示创建的组是系统组;默认时no

[root@ansible-server ~]# ansible all -m group -a 'name=somegroup state=present'

[root@ansible-server ~]# ansible all -m group -a 'name=somegroup state=absent' //删除组

软件包管理模块:yum

config_file:yum的配置文件 
disable_gpg_check:关闭gpg_check 
disablerepo:不启用某个源 
enablerepo:启用某个源
name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径 
state:状态(present,absent,latest)

[root@ansible-server ~]# ansible webservers1 -m yum -a "name=httpd state=latest" -o
state=     #状态是什么,干什么
state=absent        用于remove安装包
state=latest       表示最新的
state=removed      表示卸载

卸载软件:

[root@ansible-server ~]# ansible webservers1 -m yum -a "name=httpd state=removed" -o

服务管理模块: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

[root@ansible-server ~]# ansible webservers1 -m file -a 'path=/tmp/88.txt mode=777 state=touch' #创建一个文件
[root@ansible-server ~]# ansible webservers1 -m file -a 'path=/tmp/99 mode=777 state=directory' #创建一个目录

收集信息模块:setup

[root@ansible-server ~]# ansible web1 -m setup -a 'filter=ansible_all_ipv4_addresses'

#只查询ipv4的地址
filter:过滤

[root@ansible-server ~]# ansible web1 -m setup -a 'filter=ansible_*_mb'       #内存的信息
[root@ansible-server ~]# ansible -i /home/ansible/hostlist web -m setup -a 'filter=ansible_processor_cores'       #磁盘的信息
[root@ansible-server ~]# ansible all -m setup --tree /tmp/facts 

文件复制模块:copy

[root@ansible-server ~]# ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644"
[root@ansible-server ~]# ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes"

计划任务模块:cron

获取每台主机的IP地址

[root@xingdian ~]# ansible -i /home/ansible/hostlist web -m shell -a "ip a | grep eth0| awk 'NR==2{print $2}'" -o > a.txt && cat a.txt |awk '{print $9,$NF}'

shell、command后跟在终端敲的命令

一个典型的例子就是 shell 和 command 模块. 这两个模块在很多情况下都能完成同样的工作, 以下是两个模块之前的区别:
command 模块命令将不会使用 shell 执行. 因此, 像 $HOME 这样的变量是不可用的。还有像 |,& 都将不可用
shell 模块通过shell程序执行, 默认是/bin/sh, <, >, |, ;, & 可用

获取每台主机的内存

[root@xingdian ~]# ansible -i /home/ansible/hostlist web -m shell -a "free -m | awk 'NR==2'" > b.txt -o && cat b.txt | awk '{print $10}'

四:剧本Playbook


案列一:          

          touch file.yaml

          vim file.yaml

         ansible安装、点对点Ad-Hoc、模块、剧本Playbook_第5张图片

         检查语法错误

         

         执行

         ansible-playbook file.yaml

案列二:

         handlers:由特定条件触发的Tasks

         安装ftp

         vim ftp.yaml

         ansible安装、点对点Ad-Hoc、模块、剧本Playbook_第6张图片

          ansible-playbook --syntax-check ftp.yaml

          ansible-playbook ftp.yaml

          删除ftp

         

         ansible安装、点对点Ad-Hoc、模块、剧本Playbook_第7张图片

案列三

         [root@ansible-server ansible]# vim /home/ansible/yum.yml
---
 - hosts: web
   user: root
   tasks:
   - name: install nginx
     yum: name=nginx state=latest
     notify: diandian
   handlers:
   - name: diandian
     service: name=nginx state=started

ansible-playbook --syntax-check /home/ansible/yum.yml

ansible-playbook /home/ansible/yum.yml

案例四:

循环:迭代,需要重复执行的任务

对迭代项的引用,固定变量名为”item”,使用with_items属性给定要迭代的元素

元素:1.列表 2.字符串 3.字典

基于字符串列表元素实战

vim php.yaml

- hosts: db
  user: root
  tasks:
  - name: install packages
    yum: name={{ item }} state=latest         #相当于for循环里面的i 
    with_items:                               #取值 。但是不支持通配符
     - httpd
     - php
     - php-mysql
     - php-mbstring
     - php-gd 

验证

ansible安装、点对点Ad-Hoc、模块、剧本Playbook_第8张图片

vim user.yaml

ansible安装、点对点Ad-Hoc、模块、剧本Playbook_第9张图片

案列四

vim tags.yaml

ansible安装、点对点Ad-Hoc、模块、剧本Playbook_第10张图片

ansible安装、点对点Ad-Hoc、模块、剧本Playbook_第11张图片

上传植物僵尸  

解压 unzip 

vim apache.yaml

ansible安装、点对点Ad-Hoc、模块、剧本Playbook_第12张图片

ansible-playbook --syntax-check apache.yaml 

ansible-playbook apache.yaml 

apache 虚拟主机配置文件

 vi jspvz.conf 

ansible安装、点对点Ad-Hoc、模块、剧本Playbook_第13张图片

   

   

你可能感兴趣的:(ansible)