• 自动化运维之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"
  • 相关阅读:
    GO 爬虫图片相关
    GO 爬虫链接
    Redis使用
    HTTP请求
    lris框架基础案例
    UDP通信功能
    C++随机
    matplotlib显示指数部分的负号
    使用opencv-python读取中文路径图片
    pytorch模型可视化,torchviz,tensorboardX,文本方式
  • 原文地址:https://www.cnblogs.com/weidongliu/p/16519661.html
Copyright © 2020-2023  润新知