运维自动化-ansible

一、ansible简介

运维工具种类众多,按其有无agent端可分为两类,agent类有puppet,func等,agentless类有ansible,fabric;agentless类无agent端,是基于ssh实现;可以说两类工具各有优缺点。
Ansible是一个强大的自动化运维管理工具,基于Python语言实现,由Jinja、Paramiko和PyYAML三个关键模块构建,可用于自动化部署应用、配置、编排task(持续交付、无宕机更新等),ansible是模块化的,调用特定的模块以完成特定的任务,支持自定义模块;同时部署简单,可主从,支持playbook,具有幂等性。
ansible架构图
运维自动化-ansible

二、ansible部署

1、ansible运行前提-公钥推送

        #ssh互免密:将管理端的公钥发送到所有被管理端
        ssh-keygen -t rsa
        ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
        ssh 192.168.92.11 ‘ifconfig’

2、安装ansible
ansible已经被收录进epel源,直接yum安装即可

yum install ansible -y

3、配置文件
ansible的配置文件主要是 /etc/ansible/ansible.cfg和/etc/ansible/hosts,ansible.cfg是ansible的配置文件,hosts是被管理的主机。
在hosts中加入被管理的主机组

[test]
192.168.92.11     

三、ansible常用模块

1、ping:测试主机连通性,回复pong表示成功

ansible all -m ping

2、user与group:创建用户与组,创建用户需在设置密码
常用参数:

home:指定用户的家目录,需要与createhome配合使用。 
groups:指定用户的属组。 
uid:指定uid。 
gid:指定gid
password:指定用户的密码。 
name:指定用户名。 
createhome:是否创建家目录 yes|no。 
system:是否为系统用户。 
remove:当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r。 
state:是创建还是删除。(present,absent) 
shell:指定用户的shell环境。 
generate_ssh_key:是否为相关用户生成SSH密钥。 这不会覆盖现有的SSH密钥。 
ssh_key_bits:可选择指定要创建的SSH密钥中的位数。 
ssh_key_passphrase:设置SSH密钥的密码。 如果没有提供密码,SSH密钥将默认没有密码。 
ssh_key_file:指定SSH密钥文件名(可选)。 如果这是一个相对的文件名,那么它将是相对于用户的主目录。 
ssh_key_type:指定要生成的SSH密钥的类型(可选)。 可用的SSH密钥类型将取决于目标主机上的实现。

例1:创建redhat用户

ansible all -m user -a 'name=redhat state=present'

例2:为创建的用户设置密码

ansible all -m shell -a 'echo redhat|passwd --stdin redhat'

例2:删除用户

ansible all -m user -a 'name=redhat state=absent'

3、cron:创建删除修改计划任务(使用name识别计划任务)
常用参数:

minute:指定计划任务中的分钟
    hour:指定计划任务中的小时
    day:指定计划任务中的天
    month:指定计划任务中的月
    weekday:指定计划任务中的周
    special_time:计划任务的时间设定格式为 @reboot 或者@hourly。@reboot 表示重启时执行,@hourly 表示每小时执行一次,相当于设置成”0 0 * * *” ,这种@开头的时间设定格式则需要使用 special_time 参数进行设置,special_time 参数的可用值有 reboot(重启后)、yearly(每年)、annually(每年,与yearly相同)、monthly(每月)、weekly(每周)、daily(每天)、hourly(每时),在未设置时间单位时special_time默认每秒执行,所以使用此参数需要设置好时间单位
    user:指定当前计划任务属于哪个用户
    job:指定计划任务需要执行的命令
    name:指定计划任务的名称,名称具有唯一性,创建删除修改操作都依靠名称来唯一标识
    state:再根据名称删除计划任务时,将state的值设置为absent
    disabled:根据名称关闭计划任务,需要指定任务的名称(name),时间(hour…)以及命令(job)
    backup:如果设置此参数为yes时,那么当修改或删除对应计划任务时,会先备份在执行相应操作,cron 模块会在远程主机的 /tmp 目录下创建备份文件,以 crontab 开头并且随机加入一些字符,具体的备份文件名称会在返回信息的 backup_file 字段中看到,推荐将此此参数设置为 yes。

例1:每隔10分钟更新下时间

ansible all -m cron -a 'name="sync time for ntpserver" minute="*/10" job="/sbin/ntpdata 192.168.0.1 &> /dev/null"'

例2:删除任务

ansible all -m cron -a 'name="sync time for ntpserver" state=absent'

4、copy:文件复制或文件推送模块
常用参数:

    src:被复制到远程主机的本地对象文件或者文件夹,可以是绝对路径,也可以是相对路径。
    dest:被复制到远程主机的本地对象文件或者文件夹
    mode:复制对象的设定权限
    backup:在文件存在的时候可以选择覆盖之前,将源文件备份.设定值:yes/no 缺省为yes
    force:是否强制覆盖.设定值:yes/no 缺省为no
    owner:修改被复制到远程主机的本地对象文件或者文件夹的属主
    group:修改被复制到远程主机的本地对象文件或者文件夹的属组

例1:复制文件到远程主机

ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab.tmp mode=600'

5、file:设置文件属性
常用参数:

    path:必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或name也可以
    src:当state设置为link或者hard时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过src参数即可指定链接源。
    force:当state设置为link,force设置为yes时,表示强制创建链接文件;有三种情况分别是:
    情况一:当要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。情况二:当要创建链接文件的目录中已经存在与链接文件同名的文件时,将force设置为yes,会将同名文件覆盖为链接文件,相当于删除同名文件,创建链接文件。情况三:当要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件。
    owner:指定被操作文件的属主,属主必须存在,否则报错
    group:指定被操作文件的属组,属组必须存在,否则报错
    mode:设定被操作文件的权限
    recurse:操作目录时,recurse设置为yes,可以递归目录中文件的属性
    state:state设置为directory时,与path结合就可以操作目录,state设置为touch时,可以操作文件,state设置为link时,可以创建软连接,将state创建为hard时,可以创建硬链接,将state创建为absent时,删除目标。

例1:创建目录

ansible all -m file -a 'path=/tmp/testdir state=directory'

例2:创建文件

ansible all -m file -a 'path=/tmp/testfile state=touch mode=600'

例3:创建软链

ansible all -m file -a 'path=/tmp/testlink state=link src=/etc/fstab'

6、service:管理远程主机的服务,想要管理远程主机中的某个服务,那么这个服务必须能被 BSD init, OpenRC, SysV, Solaris SMF, systemd, upstart 中的任意一种所管理,否则 service 模块也无法管理远程主机的对应服务。
常用参数:

    name:指定需要管理的服务
    state:state的值有started、stopped、restarted、reloaded,用于指定服务的状态
    enabled:指定是否将服务开机启动

例1:开启httpd服务并开机启动

ansible all -m service -a 'name=httpd state=started enabled=yes'

例2:关闭httpd服务并取消开机启动

ansible all -m service -a 'name=httpd state=stopped enabled=no'

7、yum:管理红帽系列远程主机的程序包,前提是远程主机配置好yum源
常用参数:

    conf_file:设定远程yum执行时所依赖的yum配置文件
    disable_gpg_check:在安装包前检查包,只会影响state参数为present或者latest的时候
    disablerepo:不启用某个源
    enablerepo:启用某个源
    name:要进行操作的软件包的名字,默认最新的程序包,指明要安装的程序包,可以带上版本号,也可以传递一个url或者一个本地的rpm包的路径 

    state:state的值有present,installed,removed,absent,latest,默认是present或installed,都表示安装;absent和removed表示卸载,latest表示安装最新版本

例1:安装nginx

ansible all -m yum -a 'name=nginx state=latest'

8、shell:在被管理主机上执行命令,与command不同的是,shell在远程主机执行命令时,会用远程主机的/bin/bash来处理
常用参数:

    free_from:指定需要在远程主机上执行的命令
    chdir:指定一个目录,在执行命令时,先cd到chdir指定的目录
    creates:当指定的文件存在时,不执行命令
    removes:指定的文件不存在时,跳过执行命令步骤
    warn:如果执行的命令报错,warn值为false时,忽略报错信息
    executable:更改用于执行命令的shell,,默认为bash,要修改必须指定绝对路径

例1:为创建的用户设置密码

ansible all -m shell -a 'echo redhat|passwd --stdin redhat'

9、script:将本地脚本传输到远程节点后运行
常用参数:

    free_from:指定需要在远程主机上执行的命令
    chdir:指定一个目录,在执行命令时,先cd到chdir指定的目录
    creates:当指定的文件存在时,不执行命令
    removes:指定的文件不存在时,跳过执行命令步骤
    executable:更改用于执行命令的shell,,默认为bash,要修改必须指定绝对路径

例1:执行脚本

ansible all -m script -a '/root/test.sh'

10、setup:从远程主机收集各类物理信息
例1:

ansible all -m setup

获取到的常用数据:

    ansible_all_ipv4_addresses:仅显示ipv4的信息
    ansible_devices:仅显示磁盘设备信息
    ansible_distribution:显示是什么系统,例:centos,suse等
    ansible_distribution_major_version:显示是系统主版本
    ansible_distribution_version:仅显示系统版本
    ansible_machine:显示系统类型,例:32位,还是64位
    ansible_eth0:仅显示eth0的信息
    ansible_hostname:仅显示主机名
    ansible_kernel:仅显示内核版本
    ansible_lvm:显示lvm相关信息
    ansible_memtotal_mb:显示系统总内存
    ansible_memfree_mb:显示可用系统内存
    ansible_memory_mb:详细显示内存情况
    ansible_swaptotal_mb:显示总的swap内存
    ansible_swapfree_mb:显示swap内存的可用内存
    ansible_mounts:显示系统磁盘挂载情况
    ansible_processor:显示cpu个数(具体显示每个cpu的型号)
    ansible_processor_vcpus:显示cpu个数(只显示总的个数)
    ansible_python_version:显示python版本

猜你喜欢

转载自blog.51cto.com/jiayimeng/2141006