1.ansible的安装

1)使用源码安装Python3.5

安装支持包

yum -y install lrzsz vim net-tools gcc gcc-c++ ncurses ncurses-devel unzip zlib-devel zlib openssl-devel openssl

tar xf Python-3.5.2.tgz -C /usr/src/

./configure --prefix=/usr/local/python/

make && make install

ln -s /usr/local/python/bin/python3 /usr/bin/python3

2)使用pip3安装ansible

/usr/local/python/bin/pip3 install ansible

ln -s /usr/local/python/bin/ansible /usr/local/bin/

2.模块简单使用

1)ansible的配置文件

vim /etc/ansible/hosts

机器1 ansible_ssh_host=ip ansible_ssh_port=22 ansible_ssh_user=root

机器2 ansible_ssh_host=ip ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=666666

  1. ansible_ssh_host ===>主机IP
  2. ansible_ssh_port ===>ssh的默认端口
  3. ansible_ssh_user ===>ssh的用户名
  4. ansible_ssh_pass ===>ssh的用户的连接密码

如果我们已经设置了ssh免密钥了。那么就不需要写密码了。例如:webA

我们要是没有设置免密钥,那么就需要安装sshpass工具,并在/etc/ansible/hosts文件里写上主机的连接密码。

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum -y install sshpass

2)进行ansible远程执行命令测试

ansible -i /etc/ansible/hosts 主机或主机组 -m 指定模块 -a 命令

使用ping模块用来查看服务器是否连接正常,ping模块不需要-a指定参数

ansible 主机1    -m ping

  1. [root@ansible .ssh]# ansible all -m ping
  2. webA | SUCCESS => {
  3.     "changed": false,
  4.     "ping": "pong"
  5. }
  6. webB | SUCCESS => {
  7.     "changed": false,
  8.     "ping": "pong"
  9. }

3)ansible模块command(不支持管道,不建议使用)

ansible all -m command -a "pwd"

ansible all -m command -a "echo bb >> /tmp/testansible"

-a 'name= state={present(创建)|absent(删除)} force=(是否强制操作删除家目录) system= uid= shell= home='

4)ansible模块shell(支持管道,支持重定向)

ansible all -m shell -a "echo testansible | grep a"

ansible all -m shell -a "echo bb >> /tmp/testansible"

ansible all -m shell -a "cat /etc/passwd | awk -F":" '{print \$1}'"

5)ansible的copy模块批量下发文件或文件夹

ansible all -m copy -a "src=/service/scripts/test.txt dest=/service/scripts/"

ansible webB -m copy -a "src=/service/scripts/test.txt dest=/service/scripts/"

copy模块拷贝文件夹,如果目标路径里有与我拷贝的文件同名文件的话,会直接覆盖目标路径下的文件

参数:backup=yes ===>意思是,如果目标路径下,有与我同名但不同内容的文件时,在覆盖前,对目标文件先进行备份。

ansible webB -m copy -a "src=/service/scripts/ dest=/service/scripts/ backup=yes"

6)ansible的script模块批量运行脚本

ansible all   -m script -a "/root/service/mysql/auto_mysql.sh"

在指定的机器上执行本地脚本

7)service:

-a 'name= state={started|stopped|restarted} enabled=(是否开机自动启动) runlevel=' [root@localhost ~]# ansible all -m service -a 'name=httpd state=started'

3.变量种类:

1)facts:由远程主机发回的主机特有的属性信息,这些信息被保存在ansible变量中;无须声明,可直接调用;

2)自定义变量: 通过命令行传递:ansible-playbook test.yml --extra-vars "host=www user=test" 通过roles传递

3)主机变量:定义在inventory中的主机之后的变量;直接传递给单个主机的变量

例子:

[root@localhost~]# vim useradd.yml
- hosts: websrvs
remote_user: root
vars:
username: testuser
password: xuding
tasks:
-name: add user
user: name={{ username }} state=present
-name: set password
shell: /bin/echo {{ password }} |/usr/bin/passwd --stdin {{ username }}

|--extra-vars=VARS} 变量的重新赋值调用方法

ansible-playbookuseradd.yml --extra-vars "username=ubuntu"

4)playbook--- tasks

条件测试:

在某task后面添加when子句即可实现条件测试功能;when语句支持Jinja2语法; 实例:当时RedHat系列系统时候调用yum安装

例子:

-name: install web server package
yum: name=httpd state=present
when: ansible_os_family == "RedHat"

item

在task中调用内置的item变量;在某task后面使用with_items语句来定义元素列表;

-name: add four users

user: name={{ item }} state=present

with_items:

-testuser1

-testuser2

-testuser3

-testuser4

注意:迭代中,列表中的每个元素可以为字典格式;

实例:

-name: add two users
user: name={{ item.name }} state=present groups={{ item.groups }}
with_items:
- { name: 'testuser5', groups: 'wheel' }
- { name: 'testuser6', groups: 'root' }
5)handlers:处理器;触发器

只有其关注的条件满足时,才会被触发执行的任务; 实例:配置文件发生改变触发重启服务

-hosts: websrvs
remote_user: root
tasks:
-name: install httpd
yum:name=httpd state=present
-name: install config file
copy: src=/root/httpd.conf   dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
-name: start httpd service
service: name=httpd state=started
handlers:
-name: restart httpd
service: name=httpd state=restarted

4.ansible-playbook的初步使用

核心元素

Tasks任务、Variables变量、Templates模板、Handlers处理器、Roles角色

playbook的使用,playbook可以把ansible的模块进行组合

cat test_shell.yaml  #playbook的执行模板

  1. ---         #开头三个小-开头
  2. - hosts: webB  
  3.   tasks:       
  4.   - name: test
  5.     shell: echo "welcome to yunjisaun" >> /tmp/username
  6.   - name: test2
  7.     shell: echo "welcome to yunjisuan" >> /tmp/username
  8. - name: install httpd
  9. yum:  name=httpd state=present
  10. - name: start httpd
  11. service: name=httpd  state=started enable=true
  12. 模板说明:
  13. ---  #开头必须有三个小-,顶格写
  14. - hosts:   #正文配置代码的第一级,必须有两个空格(-占一个空格位)
  15. - host: webB   #webB是host参数的值,值和hosts:之间要有一个空格
  16.   tasks:        #tasks:表示接下来要执行的具体任务
  17.   - name:     #相对于tasks再多缩进两个格(-占一个空格位),表示属于tasks的下一级
  18.   - name: test  #test只是要执行的具体命令的名字可以随便写。name:后还是有一个空格要注意
  19.     shell:  #表示调用shell模块执行命令相对于tasks仍旧要多缩进两个空格
  20.     shell: echo "xxx" >> xxx     #shell:后边还是要有个空格,需要注意。

执行playbook配置文件,ansible-playbook test_shell.yaml #执行playbook配置文件

实例:用ansible-playbook,在两台机器上自动化部署mysql 数据库

1)准备三台Linux,其中一台安装好ansible,三台机器互相连通

2)准备.yaml文件,setup.yaml

---
  - hosts: all                                                                               #hosts文件中全部主机
    vars:                                                                                      #定义变量
    - dst: "/service/"                                                                     #变量名为dst
    tasks:                                                                                    # 任务
    - name: cp cmake mysql                                                       #第一个任务名
      copy: src=/root/service/mysql/  dest={{ dst }}                      #拷贝MySQL下的文件到变量dst中

notify:  # 如果copy执行完之后~/hosts.dest文件发送了变化,则执行

- clear copy  # 调用handler
      handlers:
      - name: clear copy
        shell: 'mv ~/hosts.dest hosts.del'  # 假装删除
    - name: install mysql                                                             #第二个任务名
      script: /root/service/mysql/auto_mysql.sh                           #执行脚本模块, 后边跟脚本路径
      register: print_result                                                            #打印执行结果
    - debug: var=print_result

3)准备脚本文件auto_mysql.sh

#!/bin/bash
#in ansible use
#install myysql
#20180731
mysql_tar="mysql-5.6.40.tar.gz"
mysql_dir="mysql-5.6.40"
cmake_tar="cmake-2.8.6.tar.gz"
cmake_dir="cmake-2.8.6"
dest="/service/"

#删旧版本
rpm -e mariadb-libs  --nodeps &>/dev/null
rpm -e mysql mysql-server --nodeps &>/dev/null
#关防火墙
rpm -q make gcc gcc-c++ &>/dev/null
if [ $? -ne 0 ];then
 yum -y install  make gcc gcc-c++ &>/dev/null
fi
#安装cmake

cd $dest
tar xf $cmake_tar -C /usr/src/ &>/dev/null
cd /usr/src/$cmake_dir
./configure &>/dev/null && make &>/dev/null  && make install &>/dev/null
#删除包
rm -fr /usr/src/$cmake_dir &>/dev/null
cd $dest
rm -fr $cmake_tar
#安装依赖
yum -y install ncurses ncurses-devel &>/dev/null
groupadd mysql &>/dev/null
useradd -M -s /sbin/nologin  -g mysql mysql &>/dev/null
#解压源码包

tar xf $mysql_tar -C /usr/src/ &>/dev/null
#安装
cd /usr/src/$mysql_dir
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql  -DDEFAULT_CHARSET=utf8  -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all  -DSYSCONFDIR=/etc &>/dev/null &&make &>/dev/null &&make install &>/dev/null
#优化
cd /usr/local/mysql
cp support-files/my-default.cnf  /etc/my.cnf &>/dev/null
#安装数据

yum -y install autoconf &>/dev/null && /usr/local/mysql/scripts/mysql_install_db  --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data  --user=mysql &>/dev/null
echo "PATH=$PATH:/usr/local/mysql/bin">>/etc/profile
source  /etc/profile &>/dev/null
chown -R mysql:mysql /usr/local/mysql/ &>/dev/null
cp support-files/mysql.server  /etc/init.d/mysqld &>/dev/null
chmod +x /etc/init.d/mysqld
sed -i -e '1a #chkconfig: 35 50 45' /etc/init.d/mysqld
cd $dest
rm -fr /usr/src/$mysql_dir &>/dev/null
rm -fr $mysql_tar

#启动服务

/usr/sbin/chkconfig --add mysqld
/etc/init.d/mysqld start

3)准备好安装包

cmake-2.8.6.tar.gz    mysql-5.6.40.tar.gz放到与脚本同一目录下

4)ansible-playbook setup.yaml

剩下的时间,你可以喝杯茶了,休息一下。两台机器部署完成,登录下机器看是否服务启动

mysql -uroot  -p123456  -h ip

成功登录。

ansible自动化运维入门的更多相关文章

  1. [Linux]Ansible自动化运维① - 入门知识

    目录 一.Ansible 概述 1.1 Ansible 是什么 1.2 Ansible 优势 1.3 Ansible 特性 二.Ansible 入门 2.1 Ansible 架构 2.2 Ansibl ...

  2. Ansible自动化运维工具-上

    [Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...

  3. ansible 自动化运维

    Ansible 自动化运维 ansible安装epel #yum list all *ansible*#yum install *ansible*#yum info ansible#rpm -ql a ...

  4. Ansible 自动化运维工具

    Ansible 自动化运维工具 Ansible是什么? Ansible是一个"配置管理工具"也是一个"自动化运维工具" Ansible 作用: Ansible是 ...

  5. ansible自动化运维03

    ansible自动化运维常用模块 常用模块实现的功能:安装软件包:修改配置文件:创建程序用户组:创建目录,并修改所属和权限:挂载:启动服务:测试. command模块: shell模块: 注意:com ...

  6. 简单聊一聊Ansible自动化运维

    一.Ansible概述 Ansible是今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible通过本身集成的非常丰富的模块 ...

  7. Ansible自动化运维工具的使用

                                 Ansible自动化运维工具的使用       host lnventory 管理主机 ip  root账号密码 ssh端口 core mod ...

  8. Ansible 自动化运维——剧本(playbook)

    Ansible 自动化运维--剧本(playbook) 1.playbook介绍: playbook是ansible用于配置,部署,和管理被控节点的剧本.通过playbook的详细描述,执行其中的ta ...

  9. Ansible自动化运维工具及其常用模块

    Ansible自动化运维工具及其常用模块 目录 Ansible自动化运维工具及其常用模块 一.Ansible简介 1. Ansible概述 2. Ansible作用 3. Ansible的工作模块 4 ...

随机推荐

  1. #单元测试#以karma+mocha+chai 为测试框架的Vue webpack项目(二)

    学习对vue组件进行单元测试,先参照官网编写组件和测试脚本. 1.简单的组件 组件无依赖,无props 对于无需导入任何依赖,也没有props的,直接编写测试案例即可. /src/testSrc/si ...

  2. 再学UML-Bug管理系统UML2.0建模实例(三)

    3.系统设计 在对系统进行全面分析后,我们开始使用UML对系统进行设计,构造BMS系统的设计模型,包括类图.包图.顺序图(实现模型).组件图和部署图等的绘制,回答了“怎么做”的问题.具体设计工作如下: ...

  3. Struts的学习-例子

    一.新建空项目user和配置maven实现下面的页面 1.配置内容 2.编写struts.xml实现页面 <!--定义一个useraction--> <package name=&q ...

  4. ABAP正则表达式 vs SPLIT INTO

    需求: 把如下通过"/"连接起来的三个字符串分别解析出来. 传统的做法见下图第98行的function module SKWF_UTIL_IO_FIND_BY_KEY: 这个fun ...

  5. 如何用python语言撸出图表系统

    公司指标图表化显示,解决目前跟踪技术指标数据的各种不方便:于是话不多说,撸起袖子就是干: 1.挖掘需求和罗列功能点: a.图表显示技术指标数据. b.根据服务名和系统名查询对应的图表. c.根据日期区 ...

  6. linux shell中 if else以及大于、小于、等于逻辑表达式介绍

    在linux shell编程中,大多数情况下,可以使用测试命令来对条件进行测试,这里简单的介绍下, 比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示条件测试. 注 ...

  7. pthread_create & pthread_exit

    http://www.cppblog.com/saha/articles/189802.html 1.   pthread_create    #include <pthread.h>   ...

  8. Shell脚本学习之expect命令

     转载:http://blog.csdn.net/leexide/article/details/17485451 目录(?)[-] 一概述 二expect的安装 一Tcl 安装 二expect 安装 ...

  9. BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)

    Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...

  10. 动态规划(DP),类似LIS,FatMouse's Speed

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1108 解题报告: 1.首先按照weight从小到大排列,weig ...