ansible软件的安装部署以及ansible命令的基本使用。

ansible是2013年推出的一款IT自动化和DevOps软件,2015年被RedHat收购,是基于Python研发,融合多种运维工具的优点,实现了批量操作系统配置,批量程序部署,批量运行命令等功能。

ansible可以实现自动化APP部署、自动化管理配置项、自动化持续交付、自动化云服务管理。


自建下载ansible的rpm包,自建yum仓库,通过yum安装自动解决依赖关系。或使用一个齐全的yum源。

ansible包:http://dl.teddyou.cn/download/ansible_soft.tar.xz

注意:管理主机要求Python2.6或Python2.7


ansible_soft.tar.xz
ansible_soft.tar.xz
ansible_soft.tar.xz
download/
download/
download/
download/
ansible_soft.tar.xz

除去ansible机器,预先准备五台主机:

192.168.1.11    web1
192.168.1.12    web2
192.168.1.21    db1
192.168.1.22    db2
192.168.1.33    cache


安装:

yum -y install ansible

查看版本:

[root@ansible ~]# ansible --version
ansible 2.7.7
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]


修改默认配置文件:

vim /etc/ansible/ansible.cfg
 14 inventory      = /etc/ansible/hosts    //取消注释
 61 host_key_checking = False              //取消注释


添加集群机器:

vim /etc/ansible/hosts    //末行添加配置文件
[web]
web1
web2

[db]
db1
db2

[other]
cache

[组名]
IP或主机名 登录用户名、密码、端口

vim /etc/hosts     //添加以下主机
192.168.1.11    web1
192.168.1.12    web2
192.168.1.21    db1
192.168.1.22    db2
192.168.1.33    cache


查询集群:

 ansible [集群名,或all] --list-host


主机定义与分组:[/etc/ansible/hosts]

格式:

[组名]

IP或主机名,登录用户名、密码、端口

ansible_ssh_host主机名与配置文件不同,通过此指定真实主机名
ansible_ssh_port指定端口号
ansible_ssh_user指定登录用户
ansible_ssh_passssh登录密码
ansible_sudo_passsudo密码
ansible_sudo_exesudo命令路径
ansible_connection与主机连接的类型
ansible_ssh_private_key_filessh使用的私钥文件
ansible_shell_type目标系统的shell类型
ansible_python_interpreter目标主机的Python路径

用法举例:

[db]
db1 ansible_ssh_port="222"
db2

[web]
web1
web2

[web:vars]            //或可以直接写在集合中,直接对一个组有效
ansible_ssh_user="root"
ansible_ssh_port="222"


ansible基础命令:

ansible <host-pattern> [options]

host-pattern

主机或定义的分组

-M指定模块路径
-m使用模块,默认command
-a 或 --args模块参数
-iinventory文件路径,或可执行脚本
-k使用交互式登录密码
-e定义变量
-v详细信息
-vvvv开启debug模式

列出要执行的主机:

ansible all --list-hosts

批量检测存活主机:

ansible all -m ping

批量执行命令:

ansible all -m command -a 'id' -k

批量给所有主机部署公钥文件:

ansible all -m authorized_key -a "user=root exclusive=true manage_dir=true key='$(< /root/.ssh/id_rsa.pub)'" -k

列举部分ansible的模块:

ansible-doc模块:

模块的使用手册,ansible-doc -l 列出所有模块,ansible-doc modulename 查看帮助。

ping模块:

测试网络连通性,ping模块没有参数。

ansible all -m ping

command模块:

默认模块,远程执行命令。该模块不启用shell。

查看所有机器负载:

ansible all -m command -a 'uptime'

查看日期和时间:

ansible all -m command -a 'date +%F_%T'

注意,该模块需要参数才可直接执行,且不能含有字符 < > | &

shell模块:

shell通过/bin/sh进行执行命令,可以执行任意命令。

-a参数可直接使用任意命令。

raw模块:

用法和shell一样,可以执行任意命令。

区别是没有chdir、creates、removes参数。

script模块:

需要执行的命令非常复杂可通过此模块在本地写好脚本文件,然后通过此模块在远程机器上批量执行脚本命令。

脚本文件和正常的脚本写法一样。

注意,此脚本包含并不限于shell脚本,需要在脚本文件内指定解释器。

ansible all -m script -a 'a.sh'

copy模块:

用于复制文件到远程主机。

src:【本地文件路径】,复制远程主机文件到本地,路径为目录时会递归复制,若以‘/’结尾,则只复制文件夹下的文件,若不以‘/’结尾,则复制包含目录在内的整个内容。

dest:【远程主机路径】,必选项,远程主机的绝对路径,如果源文件是一个目录,那么该路径必须是一个目录。

backup:覆盖前先备份的原文件,备份文件包含时间信息,有两个选项yes,no。

force:若目标主机包含该文件,但内容不同,如果设为yes,则强制覆盖,设为no,则只有当目标主机的目标位置不存在该文件时才复制。默认为yes

ansible all -m copy -a 'src=/etc/resolv.conf dest=/etc/resolv.conf'
ansible all -m copy -a 'src=/etc/resolv.conf dest=/etc/resolv.conf'
ansible all -m copy -a 'src=/etc/resolv.conf dest=/etc/resolv.conf'

lineinfile模块:

类似于sed的一种行编辑替换模块。用于整行替换。

path 指定需要修改的文件。

regexp 正则表达式,匹配内容。

line 替换后的结果。

ansible all -m lineinfile -a 'path="/etc/selinux/config" regexp=^SELINUX=" line="SELINUX=disabled"'

replace模块:

与lineinfile模块非常相似,但不是整行匹配替换,是可以在行内修改的模块。

path 指定需要修改的文件。

regexp 正则表达式,匹配内容。

replace 替换后的结果。

ansible all -m replace -a 'path="/etc/selinux/config" regexp="^(SELINUX=).*" replace="\1disabled"'

yum模块:

使用yum包管理器来管理软件包。

config_file :yum的配置文件

disable_gpg_check :关闭gpg_check

disablerepo :不启用某个源

enablerepo :启用某个源

name :要进行操作的软件包名,也可以传递一个url或一个本地的rpm包的路径。

state :动作,installed , removed

安装软件包:

ansible all -m yum -a 'name=vsftpd state=installed'

卸载软件包:

ansible all -m yum -a 'name=vsftpd state=removed'

service模块:

name :服务名称

enabled :是否开机启动 yes , no

sleep :执行restarted会在stop和start之间沉睡几秒。

state :对当前服务执行启动(started)、停止(stoped)、重启(restarted)、重新加载(reloaded)等操作。

ansible db -m service -a 'name=mariadb enabled=yes state=started'

setup模块:

主要用于获取主机信息,playbooks里经常会用的另一个参数gather_facts与该模块相关,setup模块下经常用的是filer参数。

filer过滤所需信息。

ansible all -m setup -a 'filer=ansible_distribution'


以上模块可以在yml文件中,直接执行进行批量执行。示例如下:

[root@nginx ~]# vim httpd.yml
---
- hosts: web
  remote_user: root
  tasks:
  - yum:
      name: httpd
      state: installed
  - service:
      name: httpd
      enabled: yes
      state: started
      
[root@nginx ~]# ansible-playbook httpd.yml


已有1位网友发表了看法:

1L访客 2019-07-17 01:12:08 回复
屠龙宝刀,点击就送!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。