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_pass | ssh登录密码 |
ansible_sudo_pass | sudo密码 |
ansible_sudo_exe | sudo命令路径 |
ansible_connection | 与主机连接的类型 |
ansible_ssh_private_key_file | ssh使用的私钥文件 |
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 | 模块参数 |
-i | inventory文件路径,或可执行脚本 |
-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位网友发表了看法:
发表评论