一、Ansible简介

Ansible基于Python语言开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能。

二、安装部署Ansible服务

Ansible自动化运维环境由控制主机与被管理主机组成,由于Ansible是基于SSH协议进行通信的,所以控制主机安装Ansible软件后不需要重启或允许任何程序,被管理主机也不需要安装和运行任何应用程序。

Ansible案例环境

角色 ip地址 组名
控制主机 192.168.174.209
被管理主机1 192.168.174.208 webservers
被管理主机2 192.168.174.142 dbservers

1. 在控制主机上安装epel源

yum install -y epel-release

2.使用yum命令安装Ansible

yum install -y ansible

3.安装tree,展示ansible树状结构

yum install tree -y

4.查看树状结构

tree /etc/ansible/
/etc/ansible/
├── ansible.cfg    #ansible的配置文件
├── hosts         #ansible的主仓库,用于存储需要管理的远程主机的相关信息
└── roles     #角色

5.配置主机清单

vim /etc/ansible/hosts
插入被管理主机的组名,及ip地址[webservers]
192.168.174.208[dbservers]
192.168.174.142

6.设置SSH无密码登录

ssh-keygen -t rsa      #基于ssh密钥的连接

在使用ssh-keygen产生一对密钥后,在家目录会产生一个隐藏文件夹.ssh,进入.ssh目录下,使用ssh-copy-id来下发生成的密钥。

ssh-copy-id root@192.168.174.208   #配置密钥对验证
ssh-copy-id root@192.168.174.142 

7.使用免交互代理

ssh-agent bash
ssh-add

8.使用ansible命令测试是否安装成功

[root@promote .ssh]# ansible all -a 'date'  //查看两台被管理主机的时间
192.168.174.142 | SUCCESS | rc=0 >>
2018年 08月 01日 星期三 20:55:39 CST192.168.174.208 | SUCCESS | rc=0 >>
2018年 08月 01日 星期三 20:55:39 CST

以上ansible的环境部署就完成了。

三、Ansible基础命令的应用

Ansible可以使用命令方式进行自动化管理,其基本语法为:
ansible <host-pattern> [-m module_name] [-a args]

<host-pattern>被管理的主机的ip或组号

[-m module_name]要使用的哪些模块

[-a args]模块特有的参数

Ansible自带了很多的模块进行对管理主机的各种任务管理。首先来了解一下Ansible常用的一些模块。

1.command模块

Ansible管理工具使用-m选项指定使用的模块,默认使用的是command模块。

(1)使用ip地址指定运行的主机

[root@promote .ssh]# ansible 192.168.174.208 -m command -a 'date'
192.168.174.208 | SUCCESS | rc=0 >>
2018年 08月 01日 星期三 21:21:18 CST

(2)使用被管理主机中的分类运行

[root@promote .ssh]# ansible webservers -m command -a 'date'
192.168.174.208 | SUCCESS | rc=0 >>
2018年 08月 01日 星期三 21:22:38 CST

(3)在所有被管理主机上运行

[root@promote .ssh]# ansible all -m command -a 'date'
192.168.174.142 | SUCCESS | rc=0 >>
2018年 08月 01日 星期三 21:23:28 CST192.168.174.208 | SUCCESS | rc=0 >>
2018年 08月 01日 星期三 21:23:28 CST

2.cron模块

即自定义任务计划模块,用于管理被管理主机的任务计划。cron有两种状态(state):present表示添加(可以省略),absent表示移除。

(1)添加任务计划

ansible webservers -m cron -a 'minute="*/1" job="/bin/echo heihei name="test cron job"'

(2)移除任务计划

移除任务计划是按照指定的任务计划名来执行的,因此必须指定被移除任务计划的名字name,假如该计划任务没有取名字,name=None即可

ansible webservers -m cron -a 'name="test cron job" state=absent'

3.user模块

用于创建新用户和更改、删除已存在的用户。用name指定创建的用户的名称。

(1)创建用户

[root@promote .ssh]# ansible webservers -m user -a 'name=zhangsan'
192.168.174.208 | SUCCESS => {"changed": true, "comment": "", "create_home": true, "group": 1000, "home": "/home/zhangsan", "name": "zhangsan", "shell": "/bin/bash", "state": "present", "system": false, "uid": 1000
}

(2)查看用户是否创建成功

[root@promote .ssh]# ansible webservers -a 'tail -1 /etc/passwd'
192.168.174.208 | SUCCESS | rc=0 >>
zhangsan:x:1000:1000::/home/zhangsan:/bin/bash

4.group模块

用于对用户组的管理

#创建mysql组,并将zhangsan用户添加到mysql组
[root@promote .ssh]# ansible webservers -m group -a 'name=mysql gid=306 system=yes'
192.168.174.208 | SUCCESS => {"changed": true, "gid": 306, "name": "mysql", "state": "present", "system": true
}
[root@promote .ssh]# ansible webservers -m user -a 'name=zhangsan uid=307 system=yes group=mysql'
192.168.174.208 | SUCCESS => {"append": false, "changed": true, "comment": "", "group": 306, "home": "/home/zhangsan", "move_home": false, "name": "zhangsan", "shell": "/bin/bash", "state": "present", "uid": 307
}

5.copy模块

实现文件的复制和批量下发文件

#将本地文件/etc/fstab复制到被管理主机的/opt下,取名fstab.bk,并将所有者设置为root,权限设置为666
[root@promote .ssh]# ansible webservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bk owner=root mode=666'
192.168.174.208 | SUCCESS => {"changed": true, "checksum": "6fb776f669de8f65b92aa2d6975f29d14860e8a9", "dest": "/opt/fstab.bk", "gid": 0, "group": "root", "md5sum": "7f37c08e599574ebb0f41f2f92a54f20", "mode": "0666", "owner": "root", "secontext": "system_u:object_r:usr_t:s0", "size": 465, "src": "/root/.ansible/tmp/ansible-tmp-1533132004.58-223000841853605/source", "state": "file", "uid": 0
}
[root@promote .ssh]# ansible webservers -a 'ls -l /opt'
192.168.174.208 | SUCCESS | rc=0 >>
总用量 4
-rw-rw-rw-. 1 root root 465 8月   1 22:00 fstab.bk
drwxr-xr-x. 2 root root   6 3月  26 2015 rh

6.file模块

用于设置被管理主机的文件属性

#设置/opt/fstab.bk的所属主为mysql,所属组为mysql,权限为644
[root@promote .ssh]# ansible webservers -m file -a 'owner=mysql group=mysql mode=644 path=/opt/fstab.bk'
192.168.174.208 | SUCCESS => {"changed": true, "gid": 306, "group": "mysql", "mode": "0644", "owner": "mysql", "path": "/opt/fstab.bk", "secontext": "system_u:object_r:usr_t:s0", "size": 465, "state": "file", "uid": 306
}
[root@promote .ssh]# ansible webservers -a 'ls -l /opt'
192.168.174.208 | SUCCESS | rc=0 >>
总用量 4
-rw-r--r--. 1 mysql mysql 465 8月   1 22:00 fstab.bk
drwxr-xr-x. 2 root  root    6 3月  26 2015 rh

7.ping模块

检测指定被管理主机的连通性

[root@promote .ssh]# ansible webservers -m ping
192.168.174.208 | SUCCESS => {"changed": false, "ping": "pong"
}

8.yum模块

负责在被管理主机上安装与卸载软件包

[root@promote .ssh]# ansible webservers -m yum -a 'name=httpd'

9.service模块

控制管理服务的运行状态

#启动http的服务并设置为开机自启
[root@promote .ssh]# ansible webservers -m service -a 'enabled=true name=httpd state=started'

10.shell模块

Ansible中的shell模块可以在被管理主机上运行命令

使用无交互方式给zhangsan用户设置密码
[root@promote .ssh]# ansible webservers -m shell -a 'echo abc123 | passwd --stdin zhangsan'
192.168.174.208 | SUCCESS | rc=0 >>
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。

11.script模块

将本地脚本复制到被管理主机上进行运行

#编写本机脚本test.sh,复制到被管理主机上进行运行
[root@promote .ssh]# vim test.sh
#!/bin/bash
echo "this is test script" >/opt/fstab.bk
[root@promote .ssh]# chmod +x test.sh #给脚本添加可执行权限
[root@promote .ssh]# ansible webservers -m script -a 'test.sh'
192.168.174.208 | SUCCESS => {"changed": true, "rc": 0, "stderr": "Shared connection to 192.168.174.208 closed.\r\n", "stderr_lines": ["Shared connection to 192.168.174.208 closed."], "stdout": "", "stdout_lines": []
}
[root@promote .ssh]# ansible webservers -a 'cat /opt/fstab.bk'
192.168.174.208 | SUCCESS | rc=0 >>
this is test script

12.setup模块

用于模块收集、查看被管理主机的facts。

[root@promote .ssh]# ansible webservers -m setup

转载于:https://blog.51cto.com/13620954/2153372

自动化运维之ansible-安装部署与基础命令篇相关推荐

  1. 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客

    自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansib ...

  2. 自动化运维工具Ansible详细部署

    一.基础介绍 ================================================================================= 1.简介 ansibl ...

  3. 自动化运维工具——ansible安装及模块介绍

    ansbile 前言 一.主流自动化运维工具简介 1.1 Puppet 1.2 Saltstack 1.3 Ansible 二.Ansible 运维工具原理 三.Ansible安装 3.1 下载软件包 ...

  4. 自动化运维工具ansible(安装与模块介绍)

    自动化运维工具ansible(安装与模块介绍) 一.ansible运维工具概述 (一).ansible的特点 (二).ansible的原理 (三)ansible的优点 二.安装ansible 三.an ...

  5. 自动化运维工具ansible的安装管理以及模块介绍

    自动化运维工具ansible的安装管理以及模块介绍 目录 自动化运维工具ansible的安装管理以及模块介绍 一.ansible概述 1.几种常用运维工具比较 2.Ansible简介 3.Ansibl ...

  6. Ansible自动化运维工具介绍与部署

    ansible自动化运维工具介绍与部署 文章目录 一.什么是自动化运维? 二.常用的自动化运维工具 2.1 Ansible 2.2 SaltStack 2.3 Puppet 2.4 三种自动化工具特点 ...

  7. 自动化运维工具----ansible

    自动化运维工具----ansible ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置.批量程序的部署.批量运行命令等功能. 主要模块以及功能 ...

  8. 自动化运维工具-Ansible的Playbook的使用

    Playbook的使用 前言 一.Playbook是什么? 二.playbook使用场景 三.Playbook格式说明 四.Play book变量的使用 1 在主机列表定义变量 2 在playbook ...

  9. 自动化运维工具-Ansible实战指南

    Ansible实战 前言 一.Ansible简介 1.ansible是什么? 2.ansible特点 3.ansible架构 主要模块 工作流程 命令执行过程 二.Ansible 配置 1 安装ans ...

最新文章

  1. jsoho.com介绍
  2. 你如果只是一直囤干货,那永远不可能进步
  3. c:forEach循环的List为String时的写法
  4. 访百度奥运logo设计师李兴钢:虚实之间最美的呈现
  5. 中职计算机说课稿三篇,2020精选中职计算机说课稿3篇(15页)-原创力文档
  6. GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决
  7. python初中必背语法_一些python语法的合集
  8. owncloud搭建过程
  9. 实验二(第一部分,第二部分)
  10. MySQL数据库——密码遗忘解决方案
  11. shapley值法初学入门详细介绍
  12. Windows 利用IIS搭建需要身份验证登录的FTP站点
  13. python英语词汇读音_Python 将英语单词列表,转换为听写使用的MP3格式(每个单词朗读两遍)...
  14. PDF合并在电脑上怎样实现?PDF合并的方法有哪些?
  15. 画仓鼠大赛 结果公布
  16. scanf(3c,c);
  17. Vue刷新、跳转页面的数据保存方法: sessionStorage + Object.assign()
  18. 近期一个称重设备微信端开发前端知识点,及使用插件遇到的常见问题
  19. 即时通讯云服务免费 破解APP社交化困局
  20. [ANT]apache ant 安装说明

热门文章

  1. 配置项、基线以及软件配置控制委员会
  2. Linux进不了进程,既然在Linux中程序不是进程,那么到底什么才算是进程呢?
  3. spring boot mybatis 整合_两大热门框架 Spring 与 Mybatis 如何整合呢?
  4. 带你通俗理解https
  5. fiddler启用过滤规则只显示想要的接口数据
  6. 编译器错误~System.Data.Objects.DataClasses.EntityObject在未被引用的程序集中定义
  7. AGG第四十二课 Blitting an image over another with transparency
  8. 区分元素特性attribute和对象属性property
  9. 设置图片和文字的垂直居中
  10. easyuI企业管理系统-实战二 表格引入json数据