Ansible自动化运维工具

Ansible核心参数

Modules :包括ansible自带核心模块及自定义模块
Plugins :完成模块功能补充,包括连接插件、邮件等
Playbooks :剧本,定义ansible多任务配置文件,由ansible自动执行
Inventory :定义ansible管理主机清单
Ansible自动化运维工具_第1张图片
安装ansible
yum install wget -y
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install epel-release-latest-7.noarch.rpm -y
yum --disablerepo="*" --enablerepo=“epel” list available
yum install ansible -y

ansible --version 查看ansible版本

Ansible命令使用语法
ansible [-i主机清单文件] [-f批次] [组名] [-m模块名称] [-a模块参数]
Ansible详细参数
-v, -verbose # 详细模式,如果命令执行成功,输出详细结果(-vv;-vvv;-vvvv)v越多代表越详细
-i PATH, -inventory=PATH # 指定host文件路径,默认是在/etc/ansible/hosts inventory清单
-f NUM, -forks=NUM # NUM是指定一个整数,默认为5,指定fork开启同步进程个数
-m NAME, -module-name=NAME # 指定使用的module名称,默认使用command模块
-a, MODULE_ARGS # 指定module模块参数
-k, -ask-pass #提示输入ssh密码
-sudo #指定使用sudo获取root权限
-K, -ask-sudo-pass #提示输入sudo密码,可与sudo一起使用
-u USERNAME, -user=USERNAME #指定移动端执行用户
-C, -check #测试此命令执行情况

ansibl-doc 命令详细参数:
ansible-doc -l #列出所有的模块列表
ansible-doc -s 模块名 #查看指定模块参数 -s, --snippet

例: ansible-doc -s service

cd /etc/ansible/
[root@server2 ansible]# ls
ansible.cfg(主配置文件) hosts(主机清单) roles(决策)

定义主机清单
1、基于端口、用户、密码定义主机清单
ansible 基于ssh连接 -i(inventory)参数后指定远程主机时,也可以写端口、用户、密码。
使用格式: ansible_ssh_port:指定ssh端口
ansible_ssh_user:指定ssh用户
ansible_ssh_pass:指定ssh用户登录认证密码
ansible_sudo_pass:指明sudo密码

vim hosts 在最后添加
[web-servers] #定义组名称
定义单个IP
192.168.1.52 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
定义多个IP(50至53)
192.168.1.[51:53] ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
例如:

ansible -i /etc/ansible/hosts web-servers -m ping
-i	指定host文件路径
-m	指定ping模块

在这里插入图片描述
出现报错,这里是因为ssh第一次连接需要认证,手动ssh连接后再次测试
ssh 192.168.1.52
Ansible自动化运维工具_第2张图片
再次测试发现已经成功单还有明显报错这里明显可以看出hosts文件中有多余的字母删除即可
在这里插入图片描述
SUCCESS 表示成功
False 因为ping命令不能改变目标服务器服务状态返回为false

基于ssh密钥访问定义主机清单
一般来说明文密码安全程度不够,增加主机无密码访问
在ansible服务器中生成密钥并发送公钥至需管理节点
ssh-keygen #生成密钥直接回车
[root@server2 ansible]# cd /root/.ssh/
[root@server2 .ssh]# ls
id_rsa(私钥) id_rsa.pub(公钥) known_hosts
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
配置完成并测试成功
[root@server2 .ssh]# ssh [email protected]
Last login: Tue Apr 23 11:28:18 2019 from 192.168.1.51
[root@server2 .ssh]# ssh [email protected]
Last login: Tue Apr 23 11:28:18 2019 from 192.168.1.51

修改ansible中清单配置
cd /etc/ansible/
vim hosts
[web-servers]
#192.168.1.52 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
192.168.1.52
192.168.1.51
192.168.1.53
测试
ansible -i /etc/ansible/hosts ‘web-servers’ -m pingAnsible自动化运维工具_第3张图片
输入命令查看磁盘空间

ansible -m command -a 'df -h' web-servers
-m command		#-m	后添加模块
-a	后加命令

Ansible自动化运维工具_第4张图片
测试添加用户

ansible -m command -a 'useradd li' web-servers		#添加用户li
ansible -m command -a 'id li' web-servers			#查看li用户ID

Ansible自动化运维工具_第5张图片
command模块是ansible默认模块,不能使用"<",">","|","&"等操作.

shell 模块
使用shell模块,在远程命令通过/bin/sh来执行;所以,我们在终端输入的命令可以使用.
Shell模块1 :如执行命令少则可直接执行
例如 :运行free -m命令过滤Mem所对应参数

ansible -i /etc/ansible/hosts web-servers -m shell -a 'source ~/.bash_profile && free -m | grep Mem'

Ansible自动化运维工具_第6张图片
IP及目录
Shell模块2 :如执行命令较多则可书写为脚本通过script模块来执行
例如 :执行同时查询系统时间及IP

vim /root/a.sh
#!/bin/bash
date
ip addr | grep 192 | awk  '{ print $2}' | awk -F '/' '{print $1}'

利用ansible执行
ansible -i /etc/ansible/hosts web-servers -m script -a '/root/a.sh'
执行完成可以看到明显的时间及IP

Ansible自动化运维工具_第7张图片

copy模块	:实现主控端向目标端口copy文件,类似SCP功能
例如	:拷贝/etc/hosts文件至 /tmp/下并设置所属人所属组及文件权限大小
ansible -i /etc/ansible/hosts web-servers -m copy -a 'src=/etc/hosts dest=/tmp/ owner=root group=root mode=0755'
src	#表示拷贝地址
dest		#表示目标地址
owner	#表示所属人
group	#表示所属组
mode	#表示权限大小

Ansible自动化运维工具_第8张图片
删除

ansible -i /etc/ansible/hosts web-servers -m command -a 'rm -fr /tmp/hosts'

Ansible自动化运维工具_第9张图片

File	模块	:设置文件属性

例如	:修改目标端口/tmp/hosts	文件权限为444及所属人为li用户

ansible web-servers -m file -a 'path=/tmp/hosts mode=444 owner=li'

Ansible自动化运维工具_第10张图片
在这里插入图片描述

Stat	模块	:显示文件信息
例如	:显示目标端/tmp/hosts文件信息

ansible web-servers -m stat -a 'path=/tmp/hosts'

get_url模块		:实现目标端下载指定url至本地,支持sha256sum文件校验

ansible web-servers -m get_url -a 'url=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm dest=/tmp force=yes'

这里force=yes
如果force=yes,当下载文件时,如果所下载的内容和原目录下的文件内容不同,则替换原文件,如果一样就不用下载
如果force=no,当下载文件时,则只下载不存在的文件.
Ansible自动化运维工具_第11张图片
执行成功且发生改变颜色为黄色
在这里插入图片描述
这里因为之前下载过所以为false
Ansible自动化运维工具_第12张图片
执行成功未发生改变颜色为绿色

Yum模块 :可以提供status状态,
Status五种状态 :latest、present、installed 代表安装
:removed、absent 表示卸载
例如 :安装httpd服务

ansible web-servers -m yum -a 'name=httpd state=installed'

在这里插入图片描述
在这里插入图片描述
这里因为yum源问题配置yum源再次安装
Ansible自动化运维工具_第13张图片

成功并启动服务查看状态
ansible web-servers -m command -a 'systemctl start httpd'
ansible web-servers -m command -a 'systemctl status httpd'

Ansible自动化运维工具_第14张图片

cron	模块	:目标端crontab配置
例如	:增加每40分钟执行date
ansible web-servers -m cron -a "name='date' minute='*/40' job='date'"

name 	#名称
minute	#执行时间
Job		#执行命令

Ansible自动化运维工具_第15张图片

Service	模块	:指定目标端需要操作的服务如nginx、httpd等
state有五种状态	started、stopped、restarted、reloaded、enabled
例如	:启动httpd服务
ansible web-servers -m service -a 'name=httpd state=started'

Ansible自动化运维工具_第16张图片Ansible自动化运维工具_第17张图片

查看80端口
ansible -i /etc/ansible/hosts web-servers -m shell -a 'source ~/.bash_profile && netstat -antlp | grep 80'

Ansible自动化运维工具_第18张图片

这里报错明显没有命令需安装
ansible web-servers -m yum -a 'name=net-tools state=installed'
再次执行
ansible -i /etc/ansible/hosts web-servers -m shell -a 'source ~/.bash_profile && netstat -antlp | grep 80'

Ansible自动化运维工具_第19张图片

Sysctl模块	:指定目标端sysctl配置
例如	:开启路由转发机制
ansible web-servers -m sysctl -a 'name=net.ipv4.ip_forward value=1 reload=yes'

Ansible自动化运维工具_第20张图片
在这里插入图片描述

User 模块	:目标端用户管理
例如	:添加xiao用户
ansible web-servers -m user -a 'name=xiao state=present'
ansible web-servers -m command -a 'id xiao'

Ansible自动化运维工具_第21张图片
Ansible-Palybook
Palybook 是一个不同于使用ansible命令执行方式的模块,功能更加强大.
Palybook 使用方式
1、在playbook中定义任务
-name:task description #任务描述信息
Module_name:module_args #需要使用的模块名称 : 模块参数
2、ansible-playbook 执行命令
playbook 是由一个或多个’play’组成的列表.play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色
github 上提供大量实例 https://github.com/ansible/ansible-examples

playbook 常用文件夹作用

files:存放需要同步到异地服务器的源码文件及配置文件
handlers:当服务的配置文件发生变化时需要进行的操作,比如:重启服务,重新加载配置
meta:角色定义,可留空
tasks:lamp安装过程需要进行的执行任务
templates:用于执行安装任务时的模块文件,一般为脚本
vars:本次安装定义的变量

批量安装lamp

安装httpd服务
yum install httpd -y
systemctl start httpd
安装mysql服务
yum install mariadb-server -y
mkdir -p /mydata/data
chown -R mysql:mysql /mydata/
vim /etc/my.cnf	#修改第二行
datadir=/mydata/data
systemctl start mariadb
安装php服务
yum install php php-mysql -y
vim /var/www/html/index.php

systemctl restart httpd

在页面测试
Ansible自动化运维工具_第22张图片

添加目标主机
vim /etc/ansible/hosts
[web-servers]
192.168.1.52
192.168.1.53
配置ssh免密登录
ssh-keygen
ssh-copy-id [email protected]
ssh-copy-id [email protected]
创建安装路径目录
mkdir -pv /etc/ansible/lamp/roles/{prepare,httpd,mysql,php}/
{tasks,files,templates,vars,meta,default,handlers}
cd /etc/ansible/lamp/roles

Ansible自动化运维工具_第23张图片

使用playbook	创建lamp环境
并拷贝安装的主配置文件
cp /etc/httpd/conf/httpd.conf /etc/ansible/lamp/roles/httpd/files/
cp /etc/my.cnf /etc/ansible/lamp/roles/mysql/files/
书写配置yum脚本
vim /etc/ansible/lamp/roles/prepare/tasks/main.yml
- name:  delete yum
  shell:  rm -fr /etc/yum.repos.d/*
- name:  provide yum file
  shell:  echo [yum] > /etc/yum.repos.d/yum.repo
- name:  provide yum name
  shell:  echo name=yum >> /etc/yum.repos.d/yum.repo
- name:  provide yum route
  shell:  echo baseurl=file:///mnt >> /etc/yum.repos.d/yum.repo
- name:  provide yum gpg
  shell:  echo gpgcheck=0 >> /etc/yum.repos.d/yum.repo
- name:  clean yum
  shell:  yum clean all

-name #杠空格name冒号后两个空格

name #自定义名称
shell #使用shell模块

拷贝index.php
cp /var/www/html/index.php /etc/ansible/lamp/roles/httpd/files/

构建httpd任务
vim /etc/ansible/lamp/roles/httpd/tasks/main.yml
- name: web server install
  yum:  name=httpd state=present
- name:  provide test page
  copy:  src=index.php dest=/var/www/html
- name:  provide configuration file
  copy:  src=httpd.conf dest=/etc/httpd/conf/httpd.conf
  notify:  restart httpd

copy #使用copy模块
notify #当copy模块命令执行成功后,notify通知名字为restart httpd的handlers运行
notify与调用handlers必须同时进行,在handlers中name必须与notify模块命令一致

配置handlers模块
vim /etc/ansible/lamp/roles/httpd/handlers/main.yml
- name: restart httpd
  shell:  systemctl restart httpd
- name: restart httpd
  shell:  systemctl enable httpd
配置mysql安装
vim /etc/ansible/lamp/roles/mysql/tasks/main.yml
- name:  install mysql
  yum:  name=mariadb-server state=installed
- name:  mkdir data directory
  shell:  mkdir -p /mydata/data
- name:  provide configration file
  copy:  src=my.cnf dest=/etc/my.cnf
- name:  chage the owner
  shell:  chown -R mysql:mysql /mydata/
- name:  start mariadb
  service:  name=mariadb enabled=yes  state=started
配置php安装
vim /etc/ansible/lamp/roles/php/tasks/main.yml
- name:  php install
  yum:  name=php state=installed
- name:  install php-mysql
  yum:  name=php-mysql state=installed

使httpd、mysql、php、yum安装连接起来
vim /etc/ansible/lamp/roles/lamp.yml		#名称随意已yml为后缀
- name:  LAMP build
  remote_user:  root
  hosts:  web-servers
  roles:
   -  prepare
   -  mysql
   -  php
   -  httpd

roles使用 :roles下跟3个空格加横杆后两个空格
检测是否正常可安装

ansible-playbook -C /etc/ansible/lamp/roles/lamp.yml

在这里插入图片描述
执行安装

ansible-playbook -i /etc/ansible/hosts /etc/ansible/lamp/roles/lamp.yml

Ansible自动化运维工具_第24张图片
安装成功测试
这里因copy模块没执行成功没有触发notify所以手动执行

ansible web-servers -m command -a 'systemctl restart httpd'

在这里插入图片描述
测试
Ansible自动化运维工具_第25张图片
Ansible自动化运维工具_第26张图片
###这里可以修改httpd安装模块之间使用shell模块安装,因安装完成copy模块未执行所有notify模块也不能执行.

- name: web server install
  yum:  name=httpd state=present
- name:  provide test page
  copy:  src=index.php dest=/var/www/html
- name:  delete httpd
  shell:  rm -fr /etc/httpd/conf/httpd.conf
- name:  provide configuration file
  copy:  src=httpd.conf dest=/etc/httpd/conf/httpd.conf
  notify:  restart httpd

host配置文件
如需安装多台
[web-servers]
192.168.1.52
192.168.1.53
192.168.1…100 #IP1-100执行
ansible因默认通过ssh连接
在这里插入图片描述
这里取消ssh检查

vim /etc/ansible/ansible.cfg 
host_key_checking = False

在这里插入图片描述
配置httpd80端口修改为8080端口

mkdir -pv /etc/ansible/httpd/roles/httpd/
{tasks,files,templates,vars,meta,default,handlers}
cp /etc/httpd/conf/httpd.conf /etc/ansible/httpd/roles/httpd/files/
vim /etc/ansible/httpd/roles/httpd/files/httpd.conf

修改为listen 8080
配置tasks

vim /etc/ansible/httpd/roles/httpd/tasks/main.yml
- name:  delete httpd
  shell:  rm -fr /etc/httpd/conf/httpd.conf
- name:  update httpd
  copy:  src=httpd.conf dest=/etc/httpd/conf/httpd.conf
  notify:  restart httpd

因notify模块配置handlers模块

vim /etc/ansible/httpd/roles/httpd/handlers/main.yml
- name:  restart httpd
  service:  name=httpd enabled=yes state=restarted

连接http至ansible-playbook

vim /etc/ansible/httpd/roles/http.yml
- name:  update httpd
  remote_user:  root
  hosts:  httpd-servers
  roles:
-  httpd
修改hosts文件
vim /etc/ansible/hosts
[httpd-servers]
192.168.1.52

测试运行是否正确

ansible-playbook -C /etc/ansible/httpd/roles/http.yml

Ansible自动化运维工具_第27张图片
测试完成推送

ansible-playbook -i /etc/ansible/hosts /etc/ansible/httpd/roles/http.yml

Ansible自动化运维工具_第28张图片
查看192.168.1.52
在这里插入图片描述
源码编译nginx
首先可以先进行测试源码编译安装服务时需要安装哪些包及修改哪些配置

首先优化一些参数
1、修改nginx版本号,删除nginx后参数

vim /root/nginx-1.14.0/src/core/nginx.h

在这里插入图片描述
2、gcc参数优化

vim /root/nginx-1.14.0/auto/cc/gcc

在这里插入图片描述
准备利用ansible安装nginx
创建目录文件
Ansible自动化运维工具_第29张图片
创建ansible安装nginx配置目录

mkdir -p /etc/ansible/nginx/roles/nginx/{default,files,handlers,meta,tasks,templates,vars}

拷贝nginx源码包至files文件中

cp /root/nginx-1.14.0.tar.gz /etc/ansible/nginx/roles/nginx/

配置tasks文件

vim /etc/ansible/nginx/roles/nginx/tasks/main.yml
- name:  copy nginx package
  copy:  src=nginx-1.14.0.tar.gz dest=/tmp/nginx-1.14.0.tar.gz
- name:  tar nginx
  shell:  cd /tmp;tar zxf nginx-1.14.0.tar.gz
- name:  delete nginx.h
  shell:  mv /tmp/nginx-1.14.0/src/core/nginx.h /tmp/nginx-1.14.0/src/core/nginx.h.bak
- name:  delete gcc
  shell:  mv /tmp/nginx-1.14.0/auto/cc/gcc /tmp/nginx-1.14.0/auto/cc/gcc.bak
- name:  copy nginx.h
  copy:  src=nginx.h dest=/tmp/nginx-1.14.0/src/core/nginx.h
- name:  copy gcc
  template:  src=gcc dest=/tmp/nginx-1.14.0/auto/cc/gcc
- name:  install package
  yum:  name={{ item }} state=installed
  with_items:
    -  openssl-devel
    -  pcre-devel
    -  zlib-devel
    -  gcc
- name:  configure
  shell:  cd /tmp/nginx-1.14.0;./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre;make && make install
- name:  copy nginx.conf
  template:  src=nginx.conf dest=/usr/local/nginx/conf/nginx.conf
- name:  copy shell
  copy:  src=/opt/create_user.sh dest=/tmp/create_user.sh
- name:  create user nginx
  shell:  sh /tmp/create_user.sh
- name:  bak index
  shell:  mv /usr/local/nginx/html/index.html /usr/local/nginx/html/index.html.bak
- name:  copy index.html
  copy:  src=index.html dest=/usr/local/nginx/html/index.html
  notify:  start nginx service

配置files模块,
在/etc/ansible/nginx/roles/nginx/files/放置
index.html nginx-1.14.0.tar.gz nginx.h
配置handlers模块

vim /etc/ansible/nginx/roles/nginx/handlers/main.yml
- name:  start nginx service
  shell:  /usr/local/nginx/sbin/nginx

配置templates模块
在/etc/ansible/nginx/roles/nginx/templates/放置
gcc nginx.conf
创建nginx用户
vim /opt/create_user.sh
#!/bin/bash
a=cat /etc/passwd | grep nginx > /dev/null
if [ $? == 0 ]
then
echo ‘this nginx repeat’
else
useradd nginx
fi
把所有连接起来

vim /etc/ansible/nginx/roles/nginx.yml
- name:  update nginx
  remote_user:  root
  hosts:  nginx-servers
  roles:
-  nginx

修改hosts

vim /etc/ansible/hosts
[nginx-servers]
192.168.1.52
192.168.1.53

推送测试
ansible-playbook -C /etc/ansible/nginx/roles/nginx.yml
Ansible自动化运维工具_第30张图片
测试成功推送

ansible-playbook -i /etc/ansible/hosts /etc/ansible/nginx/roles/nginx.yml

Ansible自动化运维工具_第31张图片
在这里插入图片描述
查看nginx端口
Ansible自动化运维工具_第32张图片
Ansible打包rpm包供离线安装
在本地访问外网及有ansible安装源的系统中

mkdir /ansible
yum reinstall ansible --downloadonly --downloaddir=/ansible

[root@server2 ansible]# ls
ansible-2.7.10-1.el7.noarch.rpm
重新开启一台服务器
scp ansible-2.7.10-1.el7.noarch.rpm [email protected]:
解压rpm发现出现依赖包
[root@server3 ansible]# rpm -ivh ansible-2.7.10-1.el7.noarch.rpm
Ansible自动化运维工具_第33张图片
在连接外网服务器中安装依赖包

yum reinstall python-httplib2 python-keyczar python-paramiko python2-jmespath sshpass --downloadonly --downloaddir=/ansible

拷贝安装需要的依赖至无连接网络的服务器

scp python* sshpass-1.06-1.el7.x86_64.rpm [email protected]:/

再次测试发现仍有依赖

[root@server3 ansible]# rpm -ivh ansible-2.7.10-1.el7.noarch.rpm python* sshpass-1.06-1.el7.x86_64.rpm

在这里插入图片描述
再次安装依赖

yum reinstall libtomcrypt libtommath --downloadonly --downloaddir=/ansible

并拷贝至未连接外网服务器

scp libtomcrypt-1.17-25.el7.x86_64.rpm [email protected]:
scp libtommath-0.42.0-5.el7.x86_64.rpm [email protected]:
[root@server3 ansible]# ls
ansible-2.7.10-1.el7.noarch.rpm     libtommath-0.42.0-5.el7.x86_64.rpm      python2-jmespath-0.9.0-1.el7.noarch.rpm   python-keyczar-0.71c-2.el7.noarch.rpm      sshpass-1.06-1.el7.x86_64.rpm
libtomcrypt-1.17-25.el7.x86_64.rpm  python2-crypto-2.6.1-16.el7.x86_64.rpm  python-httplib2-0.9.2-0.1.el7.noarch.rpm  python-paramiko-2.1.1-0.10.el7.noarch.rpm

安装ansible安装成功
[root@server3 ansible]# yum install * -y
Ansible自动化运维工具_第34张图片
测试

vim /etc/ansible/hosts		最后添加并配置免密
[web-servers]
192.168.1.52
192.168.1.51
ansible web-servers -m ping

Ansible自动化运维工具_第35张图片
安装完成.
在生产环境中通常用户是不允许直接root连接的所以我们比如修改文件时就需要利用sudo来进行修改
这里修改bond0配置

创建ansible所需配置文件

mkdir -p /etc/ansible/network/roles/network/{default,files,handlers,meta,tasks,templates,vars}

这里利用脚本进行修改,在files中配置使用脚本

vim b.sh
#!/bin/bash
a=`ip addr | grep bond0 | awk -F':' '{print $2}' | head -n1 | awk '{print $1}'`
cat /etc/sysconfig/network-scripts/ifcfg-bond0
if [ $? -ne 0 ]
then 
exit
else
        sed -i 's/BOND/#BONDING_OPTS/' /etc/sysconfig/network-scripts/ifcfg-bond0
fi
echo 'BONDING_OPTSING_OPTSING_OPTS="mode=1 miimon=50 primary='$a'"' >> /etc/sysconfig/network-scripts/ifcfg-bond0
sed -i '/^#/d' /etc/sysconfig/network-scripts/ifcfg-bond0
cat /etc/sysconfig/network-scripts/ifcfg-bond0

在tasks中使用copy模板

[root@localhost tasks]#vim main.yml 
- name:  revise networkconfig
  copy:  src=b.sh dest=/tmp/b.sh owner=lichen group=lichen mode=755

在roles中连接起来network

[root@localhost roles]# vim network.yml 
- name: revise networkconfig 
  remote_user:  zdadmin
  hosts:  servers
  sudo_user:  zdadmin
  roles:
-  network

配置hosts文件

vim /etc/ansible/hosts
192.168.1.[5:60] ansible_ssh_user=*** ansible_ssh_pass=*** ansible_sudo_pass=***
192.168.2.[5:30] ansible_ssh_user=*** ansible_ssh_pass=*** ansible_sudo_pass=***

user这里用的sudo的用户
pass 用户密码
修改ansible主配置文件vim /etc/ansible/ansible.cfg 添加
host_key_checking = False
配置运行脚本

[root@localhost ~]# vim /root/b.sh 
#!/bin/bash
ansible-playbook -i /etc/ansible/hosts /etc/ansible/network/roles/network.yml
ansible servers -m shell -a 'ls -ll /tmp/b.sh' --sudo
ansible servers -m shell -a 'chmod +x /tmp/b.sh' --sudo
ansible servers -m shell -a 'chown root:root /tmp/b.sh' --sudo
ansible servers -m shell -a 'ls -ll /tmp/b.sh' --sudo
ansible servers -m shell -a 'sh /tmp/b.sh' --sudo
ansible servers -m shell -a 'rm -fr /tmp/b.sh' --sudo

sh /root/b.sh,查看修改已成功
在这里插入图片描述

Ansible批量升级openssh
Ansible自动化运维工具_第36张图片
创建升级openssh升级目录

mkdir-p /etc/ansible/openssh7/roles/openssh7/{default,files,handlers,meta,tasks,templates,vars}

Files 放置copy文件
在这里插入图片描述
[root@localhost files]# pwd
/etc/ansible/openssh7/roles/openssh7/files
书写脚本

[root@localhost files]# vim openssh.sh 
#!/bin/bash
cp /etc/ssh/sshd_config /etc/ssh/sshd.bak
rpm -Uvh /tmp/*.rpm
chmod 600 /etc/ssh/ssh_host*key
sed -i 's/^GSSAPIAuthentication/#GSSAPIAuthentication/' /etc/ssh/sshd_config
sed -i 's/^GSSAPICleanupCredentials/#GSSAPICleanupCredentials/' /etc/ssh/sshd_config
sed -i 's/^UsePAM/#UsePAM/' /etc/ssh/sshd_config
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
systemctl restart sshd

Tasks 剧本文件放置点

[root@localhost tasks]# vim main.yml 
- name:  update openssh
  copy:  src=openssh-8.0p1-1.el7.x86_64.rpm dest=/tmp/openssh-8.0p1-1.el7.x86_64.rpm
- name:  update openssh-clients
  copy:  src=openssh-clients-8.0p1-1.el7.x86_64.rpm dest=/tmp/openssh-clients-8.0p1-1.el7.x86_64.rpm
- name:  update openssh-server
  copy:  src=openssh-server-8.0p1-1.el7.x86_64.rpm dest=/tmp/openssh-server-8.0p1-1.el7.x86_64.rpm
- name:  update openssh-askpass
  copy:  src=openssh-askpass-8.0p1-1.el7.x86_64.rpm dest=/tmp/openssh-askpass-8.0p1-1.el7.x86_64.rpm
- name:  update openssh-askpass-gnome
  copy:  src=openssh-askpass-gnome-8.0p1-1.el7.x86_64.rpm dest=/tmp/openssh-askpass-gnome-8.0p1-1.el7.x86_64.rpm
- name:  update openssh-debuginfo
  copy:  src=openssh-debuginfo-8.0p1-1.el7.x86_64.rpm dest=/tmp/openssh-debuginfo-8.0p1-1.el7.x86_64.rpm
- name:  revise openssh.sh
  copy:  src=openssh.sh dest=/tmp/openssh.sh

Ansible自动化运维工具_第37张图片
Roles 连接起剧本文件

[root@localhost roles]# pwd
/etc/ansible/openssh7/roles
[root@localhost roles]# ls
openssh7  openssh.retry  openssh.yml
[root@localhost roles]# vim openssh.yml 
- name: update openssh
  remote_user:  zdadmin
  hosts:  servers
  sudo_user:  zdadmin
  roles:
-  openssh7

添加hosts升级

vim /etc/ansible/hosts
[servers]
Ip	ansible_ssh_user=  ansible_ssh_pass= ansible_sudo_pass=

这里需要升级的IP
准备完成,开始测试

ansible servers -m command -a 'cat /proc/version'

Ansible自动化运维工具_第38张图片
执行成功后在进行安装

[root@localhost ~]# vim b.sh 
#!/bin/bash
ansible-playbook -i /etc/ansible/hosts /etc/ansible/openssh7/roles/openssh.yml
ansible servers -m command -a 'sh /tmp/openssh.sh' --sudo
ansible servers -m command -a 'ssh -V'

Ansible自动化运维工具_第39张图片
升级成功.

你可能感兴趣的:(运维)