码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-08-02 00:01:26      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:交互   start   ssh协议   connect   pen   led   com   pass   mod   

一、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 CST

192.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 CST

192.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

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

标签:交互   start   ssh协议   connect   pen   led   com   pass   mod   

原文地址:http://blog.51cto.com/13620954/2153372

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!