Ansible 入门篇

Ansible (is Simple IT Automation) ,是一款自动化运维工具,基于强大的模块功能通过SSH协议推送到被管理端,可以实现的批量系统部署,批量程序部署,批量执行命令等

特性

  • 不需要安装客户端,基于ssh连接管理
  • 不需要配置服务,安装Ansible工具,可以执行命令就可以
  • 拥有大量的模块
  • 支持YAML语法
  • 安装配置简单(门槛低)
  • 被管理机器支持Windows

组成部分

  • Ansible 核心
  • Inventory Ansible管理主机的清单
  • Modules 包括Ansible自带的核心模块和自定义模块
  • Plugins 完成模块功能的补充,包括连接插件、邮件插件等
  • Playbooks 编排文件,定义Ansible多任务配置文件,实现Ansible自动执行

安装ansible软件

需要主机有python环境,这个安装没啥说的,一键搞定,so easy!

1
yum -y install ansible

配置管理主机清单

默认的主机清单文件是/etc/ansible/hosts

  1. 可以修改/etc/ansible/ansible.cfg文件中[defaults]下的#inventory参数来修改,
  2. 可以在执行命令时候使用-i参数来指定hosts文件

最简单的配置主机和组

配置成主机名的时候,要确保主机名可以被解析(hosts或dns)

1
2
3
4
5
6
[web]
vm01
vm02
[db]
192.168.6.100
192.168.6.101

自定义参数

ansible_ssh_user 用于指定管理远程主机的账号
ansible_ssh_pass 用于指定管理远程主机的密码
ansible_ssh_host 用于指定被管理的主机
ansible_ssh_port 用于指定ssh的端口
ansible_sudo_pass 用于sudo连接用户时的密码
ansible_sudo_exec 如果sudo命令不在默认路径,需要指定sudo命令路径
ansible_shell_type 目标系统的shell的类型,默认sh
ansible_ssh_private_key_file 指定key文件

1
2
3
4
[webservers]
192.168.10.12 ansible_ssh_pass=123456 ansible_ssh_user=root
192.168.10.13 ansible_ssh_pass=123456 ansible_ssh_user=root ansible_ssh_port=3055
vm03 ansible_ssh_pass=123567 ansible_ssh_user=root

指定主机范围

01:20 表示192.168.6.1到192.168.6.20共20台主机
a:f 表示dba.islocal.cc 到dbf.islocal.cc共6台主机

1
2
3
[db]
192.168.6.[01:20]
db[a:f].islocal.cc

主机组嵌套,

使用children关键字

1
2
3
4
5
6
7
8
9
10
[mfs:children]
mfs_a
mfs_b
mfs_c
[mfs_a]
vm01
[mfs_b]
vm02
[mfs_c]
vm03

测试一下

1
2
ansible mfs -m ping
ansible mfs_c -m ping

调用匹配主机或主机组

匹配所有

all 或者 *

1
ansible all -m ping

匹配组

直接写组名就ok

1
ansible test -m ping

逻辑非

目标主机在nsxq组不在test组中,逻辑非使用!

1
ansible nsxq:!test -m ping

逻辑与

目标主机在nsxq组并在test中,逻辑与使用&

1
ansible nsxq:&test -m ping

支持正则匹配

匹配一web或者db开头.islocal.cc 的主机

1
ansible ~(web|db).*\.islocal\.cc -m ping

设置主机互信,配置SSH免密码登录

由于ansible是基于ssh来远程管理,执行操作命令的,每次输入密码的话会很繁琐,配置ssh免密码就显得很方便

  1. -k 命令会提示输入密码
  2. 修改配置文件/etc/ansible/ansible.cfg
    host_key_checking=False #当第一次连接远程主机时,会提示输入yes/no,跳过此环节

配置ssh免密码登录,可以参考我之前的另一篇文章SSH免密码验证

模块

查看模块

1
ansible-doc -l

查看模块参数用法

1
2
ansible-doc -s module
ansible-doc help module

setup 模块

查看主机参数配置

1
ansible all -m setup

ping 模块

测试主机连通性

1
ansible all -m ping

file 模块

1
2
3
4
5
[root@vm00 ~]# ansible nsxq -m file -a 'src=/etc/hosts dest=/tmp/hosts'
[root@vm00 ~]# ansible nsxq -a 'ls -lh /tmp/hosts'
[root@vm00 ~]# ansible nsxq -m file -"path=/tmp/file1 state=touch"
[root@vm00 ~]# ansible nsxq -m file -a "dest=/tmp/hosts mode=600 owner=airmodel group=airmodel"
[root@vm00 ~]# ansible nsxq -m file -a "dest=/opt/test mode=755 owner=airmodel group=airmodel state=directory"

copy模块

1
ansible nsxq -m copy -a "src=/etc/hosts dest=/tmp/hosts"

command 模块【默认模块】

1
2
ansible all -m command -a "/bin/echo 'hello,sir.'"
ansible all -a 'chdir=/usr/local/src/ tar -cvzf test.tgz file'

shell 模块

和command一样;支持管道

raw 模块

和command一样

service 模块

1
ansible nsxq -m service -a 'name=nginx state=started enabled=yes'

cron 模块

1
2
ansible nsxq -m cron -a 'name="update ntp time" hour=2 user=root job="/usr/sbin/ntpdate cn.ntp.org.cn"'
ansible nsxq -m cron -a 'name="update ntp time" state=absent'

filesystem 模块

yum 模块

1
2
ansible nsxq -m yum a 'name=httpd state=installed'
ansible nsxq -m yum a 'name="@Development Tools" state=present'

user 模块

1
ansible nsxq -m user -a 'createhome=yes home=/home/user1 password="ffffff" name=user1 state=present shell=/bin/bash'

synchronize 模块

目录后边跟/表示同步目录下内容,不加/把目录同步过去

1
ansible nsxq -m synchronize -a 'src=/etc/hosts dest=/opt/'

filesystem 模块

1
ansible test -m filesystem -a 'dev=/disk.img fstype=ext4 opts=-F'

mount 模块

1
ansible test -m mount -a 'fstype=ext4 name=/aaa src=/dev/loop0 state=mounted'

独学无友,孤陋寡闻;学习记录,欢迎拍砖!