自动化运维之---Ansible基础介绍

Ansible常用语法详解

  Ansible命令执行方式有Ad-Hoc、Ansible-plabook两种方式,Ad-Hoc主要用于临时命令的执行,Ansible-playbook可以理解为Ad-Hoc的集合,通过一定的规则编排在一起。

  Ansile的通信默认基于SSH,因此我们需要对主机先进行认证。Ansible认证方式有密码和公私钥认证两种方式,其实完全等同于SSH的认证

  为了避免Ansible下发指令时输入目标主机密码,通过证书签名达到SSH无密码是一个好的方案,推荐使用ssh-keygen和ssh-copy-id来实现快速证书的生成以及公钥下发,其中ssh-keygen生成一个秘钥对,使用ssh-copy-id来下发生成的公钥,具体生成秘钥对命令如下:

1 #随机生成公私钥对,ssh-keygen是Linux下认证秘钥生成、管理和转换工具,详细用法可参考man文档
2 ssh-keygen -N "" -b 4096 -t rsa -C "stanley@magedu.com" -f /root/.ssh/stanley.rsa
3 #为本机添加秘钥认证
4 ssh-copy-id -i /root/.ssh/stanley.rsa root@localhost

   Ansible与Saltstack最大的区别是Ansible无需在被控主机部署任何客户端代理,默认直接通过SSH通道进行远程命令执行或下发配置,相同的都具备功能强大、灵活的系统管理、状态配置,都使用YAML格式来描述配置,两者都提供丰富的模板及API,对云计算平台、大数据都由很好的支持。

Inventory定义主机与组规则

  Ansible通过定义好的主机与组规则(Inventory)对匹配的目标主机进行远程操作,配置规则文件默认/etc/ansible/hosts.

  定义主机与组

  

 

    定义主机变量

  主机可以指定变量,以便后面供palybook配置使用,比如定义host1及host2上Apache参数http_port及maxRequestsChild,目的是让两台主机产生Apache配置文件httpd.conf差异化,定义格式如下:

  

 

  定义组变量

  组变量的作用域是覆盖所有成员,通过定义一个新块,块名由组名+“:vars”组成,定义格式如下:

  

 

   同事Ansible支持组嵌套,通过定义一个新块,块名有组名+“:children”组成,格式如下:

  

 

   分离主机与组特定数据

  为了更好规范定义的主机与组变量,Ansible支持将/etc/ansible/hosts定义的主机名与组变量单独剥离出来存放到指定的文件中,将采用YAML格式存放,存放位置规定:“/etc/ansible/group_vars/+组名”和“/etc/ansible/host_vars/+主机名”分别存放指定组名或主机名定义的变量,例如:

  例如/etc/ansible/group_vars/dbservers配置文件

  

 

   匹配目标

  已经完成主机与组定义,将讲解如何进行目标(pattern)匹配,格式为ansible  <pattern_here> -m <module_name> -a <arguments>。规则方法:

  

  定义别名

  

Ansible常用模块及API

  远程命令模块

  功能:模块包括command、script、shell,都可以实现远程shell命令运行。command作为Ansible的默认模块,可以运行远程权限范围所有的shell命令;script功能是在远程主机执行主控端存储的shell脚本文件,相当于scp+shell组合;shell功能是执行远程主机的shell脚本文件或命令。

  copy模块

  功能:实现主控端向目标主机拷贝文件,类似于scp的功能。

  示例:将/home/test.sh文件拷贝至webserver组目标主机/tmp目录下,并更新文件属主及权限

   1 ansible webservers -m copy -a "src=/home/test.sh dest=/tmp owner=root group=root mode=0755" 

  stat模块

  功能:获取远程文件状态信息,包括atime、ctime、mtime、md5、uid、gid等信息。

  例子:

   1 ansible webservers -m stat -a "path=/etc/sysctl.con" 

  get_url模块

  功能:实现远程主机下载指定URL到本地,支持sha256sum文件校验。

  yum模块

  功能: Linux平台软件包管理操作,常见有yum、apt管理方式。

  例子:

1 ansible webservers -m apt -a "pkg=curl state=latest" 
2 ansible webservers -m yum -a "name=curl state=latest"

     cron模块

  功能:远程主机crontab配置

  例子:

1 ansible webservers -m cron -a "name='check dir' hour='5,2' job='ls -alh > /dev/null'"

  mount模块

  功能:远程主机分区挂载

  例子:

1 ansible webservers -m mount -a "name=/mnt/data src=/dev/sd0 fstype=ext3 opts=ro state=present"

  service模块

  功能:远程主机系统服务管理

  例子:

ansible webservers -m service -a "name=nginx state=stopped"
ansible webservers -m service -a "name=nginx state=restarted"
ansible webservers -m service -a "name=nginx state=reloaded"

  sysctl包管理模块

  功能:远程Linux主机sysctl配置

  例子:

1 sysctl: name=kernel.panic value=3 sysctl_file=/etc/sysctl.conf checks=before reload=yessalt '*' pkg.upgrade

  user服务模块

  功能:远程主机系统用户管理

  例子:

1 #添加用户johnd
2 ansible webservers -m user -a "name=johnd comment='John Doe'"
3 #删除用户johnd
4 ansible webservers -m user -a "name=johnd state=absent remove=yes"

 

posted @ 2022-07-26 09:27  摩天居士-谢烟客  阅读(218)  评论(0编辑  收藏  举报