一、Ansible简介

  Ansible是一种agentless(基于ssh),可实现批量配置、命令执行和控制,基于Python实现的自动化运维工具。

  其特性有:

    ①模块化:通过调用相关模块,完成指定任务,且支持任何语言编写的自定义模块

    ②playbook:剧本,可根据需要一次执行完剧本中的所有任务或某些任务

  安装方式:

    1.yum安装,在epel源中

    2.pip安装

      首先安装:

        yum -y install python-pip python-devel

      再安装ansible:

        pip install ansible

二、程序文件

  /usr/bin/ansible:命令行工具

    ansible命令通用格式:ansible <host-pattern> [options] [-m module_name] [-a args]

  /usr/bin/ansible-doc:帮助文档

  /usr/bin/ansible-playbook:剧本执行工具

  /etc/ansible/ansible.cfg:主配置文件

  /etc/ansible/hosts:管理的主机清单

  /etc/ansible/roles:角色存放处

三、基本配置

  1.SSH基于密钥方式登陆

    本次演示以三台CentOS 7 主机,一台CentOS 6 主机进行:

    其中A主机为管理端主机:192.168.1.101

      B主机:192.168.1.102

      C主机:192.168.1.103

      D主机(CentOS 6):192.168.1.105

    在A主机上创建密钥对,实现对其他三台主机实现无密码访问,执行:

      # ssh-keygen -t rsa -f ./.ssh/id_rsa.pub -P ""

      # ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.102

      # ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.103

      # ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.105

    操作完毕后可实现无密码访问

  2.A主机管理清单的配置

    # cd /etc/ansible

    # cp hosts{,.bak}

    # vim hosts

  3.简单测试,可设置是否生效:

四、常用模块

  1.command模块:在远程主机上执行的命令

    相关选项:     

      creates:一个文件名,当该文件存在,则该命令不执行

      free_form:要执行的linux指令

      chdir:在执行指令之前,先切换到该目录

      removes:一个文件名,当该文件不存在,则该选项不执行

      executable:切换shell来执行指令,该执行路径必须是一个绝对路径

/*示例*/
ansible test-hosts -m command -a "ls"

  2.setup模块:查看远程主机的相关facts变量信息

  3.shell模块:让远程主机在shell进程下执行命令,从而支持shell的特性,如管道等

/*示例*/
ansible all -m shell -a "echo "test" | passwd --stdin test1"

  3.copy模块:复制本地文件至远程主机上    

    相关选项:

      backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no

      content:用于替代“src”,可以直接设定指定文件的值

      dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

      directory_mode:递归设定目录的权限,默认为系统默认权限

      force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes

      others:所有的file模块里的选项都可以在这里使用

      src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

      owner,group,mode...

/*示例*/
ansible test-hosts -m copy -a "src=/etc/fstab dest=/root/"

  4.file模块:设置文件属性

    相关选项:

      force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

      group:定义文件/目录的属组

      mode:定义文件/目录的权限

      owner:定义文件/目录的属主

      path:必选项,定义文件/目录的路径

      recurse:递归设置文件的属性,只对目录有效

      src:被链接的源文件路径,只应用于state=link的情况

      dest:被链接到的路径,只应用于state=link的情况

      state:

        directory:如果目录不存在,就创建目录

       file:即使文件不存在,也不会被创建

       link:创建软链接

      hard:创建硬链接

      touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

       absent:删除目录、文件或者取消链接文件

/*示例*/
ansible test-hosts -m file -a "path=/root/fstab owner=root group=root mode=600"

  5.cron模块:计划任务的实现

    相关选项:

      minute=/hour=/day=/month=/weekday= 某个值不写,默认就是*

      name:必选项,任务描述信息

      job:执行的任务,要加引号

      state:present(创建)/absent(删除)

/*示例*/
ansible test-hosts -m cron -a "minute=*/1 job='/usr/bin/echo 'hello'' name=hello"

  6.yum模块:管理安装相关程序包

    相关选项:

      name:程序包名称,可带版本号

      state:present、installed、latest(安装)/absent、removed(删除)

  7.service模块:管理服务

    相关选项:

      name:服务名称

      state:started/stopped/restarted

      enabled:true/false

      runlevel:运行级别

8.group模块:管理用户组模块

    相关选项:

      name:组名称

      gid:指定GID

      state:present/absent

      system:yes/no

/*示例*/
ansible all -m group -a "name=test_grp state=present"

  9.user模块:管理用户模块

    相关选项:

      由于user模块的选项众多,这里只介绍一些常用的选项:

      name:用户名

      password:为用户设置登陆密码,此密码是明文密码加密后的密码

      update_password:always/on_create

        always:只有当密码不相同时才会更新密码(默认)

        on_create:只为新用户设置密码

      shell:用户的shell设定

      groups:用户组设定

      home:指定用户的家目录

      state:present/absent

      append:yes/no

        yes:增量添加group

        no:全量变更group,只设置groups指定的group组(默认)

      remove:配合state=absent使用,删除用户的家目录->remove=yes

      expires:设置用户的过期时间,值是一个时间戳

/*示例*/
ansible all -m user -a "name=test2 state=present groups=test2,test_grp shell=/bin/bash append=yes"   

   

五、playbook

  playbook是由一个或多个“play”组成的列表,可以让它们联同起来按事先编排的机制执行;所谓task无非是调用ansible的一个module,而在模块参数中可以使用变量;模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致;

  核心元素:hosts,tasks,variables,templates,handlers和roles(包含以上四个元素于一体的角色集合)

  role目录的层级结构:

     files/ [存放由copy或script模块等调用的文件]
    tasks/ [至少应该包含一个名为main.yaml文件,其他的文件需要在此文件中通过include进行包含]

      task配置文件示例:

    templates/ [template模块查找模块文件的目录]
    handlers/ [至少应该包含一个名为main.yaml的文件;其他的文件需要在此文件中通过include进行包含]
    vars/ [至少应该包含一个名为main.yaml的文件;其他的文件需要在此文件中通过include进行包含]
    meta/ [至少应该包含一个名为main.yaml的文件;定义当前角色的特殊设定及其依赖关系;其他的文件需要在此文件中通过include进行包含]
    default/ [设定默认变量时使用此目录中的main.yaml文件]

  调用角色的方式:

    ①直接调用

- hosts:
remote_user: root
roles:
- mysql
- nginx

    ②通过传递参数给角色调用

- hosts:
remote_user: root
roles:
- { role:mysql,username:mysqld} //键值对形式:第一个键role指明调用的角色名称;后续的键值对是用来传给角色的变量

  

  

    

  

Ansible学习笔记的更多相关文章

  1. ansible学习笔记一

    ansible学习笔记一 参考博客: ansible学习 - 51CTO博客 一.安装 1 .下载epel源 wget -O /etc/yum.repos.d/epel.repo http://mir ...

  2. Ansible 学习笔记

    最近因为需要管理很多台机器,而这些机器又需要频繁重新安装,实在受不了Puppet需要在每个客户机上都安装一遍,于是转头开始学些Ansible.根据这段时间的使用,这个确实是神器,唯一的感觉就是相见恨晚 ...

  3. ansible学习笔记三:playbook和roles

    参考博客: Ansible 系列之 Playbooks 剧本 -飞走不可(博客园) linux运维学习之ansible的playbook及roles的使用 - 51CTO博客 nginx 基于uwsg ...

  4. ansible学习笔记二

    Ad-Hoc命令: 所谓Ad-Hoc,简而言之是"临时命令",英文中作为形容词有"特别的,临时"的含义.Ad-Hoc只是官方对Ansible命令的一种称谓. 从 ...

  5. 我的Ansible学习笔记

    Ansible常见错误 http://afewbug.com/article/26官方文档 http://docs.ansible.com/ansible/安装配置 http://sofar.blog ...

  6. Ansible学习笔记(一):部署管理Windows机器遇到的一些坑

    在给国盛通上海测试环境做Ansible管理Windows服务器的时候,遇到了一些坑,Google解决掉了,特此记录,坑用红色标记. 一.环境说明 1.Ansible管理主机 操作系统:CentOS 7 ...

  7. Ansible学习记录一:Linux下部署

    0.Ansible介绍 Ansible 是一个简单的自动化运维管理工具,可以用来自动化部署应用.配置.编排 task(持续交付.无宕机更新等),采用 paramiko 协议库(fabric 也使用这个 ...

  8. ansible2.7学习笔记系列

    写在前面:ansible的资料网上很多,本人也是参考网上资料,做总结,如有错误,麻烦指出,谢谢. 所谓学习笔记,就是不断成长的过程,也许一段时间后有更深入理解了,就会继续更新笔记. 笔记定位:目前写的 ...

  9. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

随机推荐

  1. C——第一阶段结束

    C primier 刚好是八月末了,原计划到月中结束的.由于工作上的许多事,忙着学习,测试等.C primier与这周末彻底结束了.加上之前的基础,算是把C又全部重新学习了一遍. 在Linux环境下, ...

  2. mac-终端命令

    发现一个比较好点的关于mac终端下命令的解释文档,全文粘贴到这,免得丢了(原文在此): Mac终端 命令行 [一]bash 终端设置      1.环境变量设置首先要知道你使用的Mac OS X是什么 ...

  3. pointer on c

    http://blog.csdn.net/daniel_ice/article/details/6857019 http://www.cppblog.com/cuigang/archive/2008/ ...

  4. Mono Fragment之间转换

    var newFragment = new mybacklogF (); var ft = FragmentManager.BeginTransaction (); ft.Replace (Resou ...

  5. Fragment笔记整理

    前言 一直在用Fragment,但是没有系统的整理过,Google了一下相关文章,看到了几篇,将几篇还不错的文章重点整理了下,很多是直接Copy的,只为做个笔记,以后翻来看比较方便,建议大家看一下下面 ...

  6. 为什么要使用Mac系统?

    1.键盘手感,电脑外形设计轻薄,舒适,金属感比较舒服: 2.Mac炫酷方便的手势操作: 3.Mission Control的多桌面操作,方便切换工作: 4.软件安装卸载方便(相比Windows): 5 ...

  7. ios https适配(单向验证)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https是http+tls.是在http和tcp之间添加了一层ssl加密验证,ssl将http发送的信息在将要发到传输层时进行了加密,同样数据从 ...

  8. TCP/IP之大明内阁---协议的制定

    个人感言:真正的知识是深入浅出的,码农翻身" 公共号将苦涩难懂的计算机知识,用形象有趣的生活中实例呈现给我们,让我们更好地理解.感谢"码农翻身" 公共号,感谢你们的成果, ...

  9. Nginx配置location总结及rewrite规则写法

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 32.0px "Helvetica Neue"; color: #323333 } p. ...

  10. Linux终端下安装jdk

    linux 终端下安装jdk(rpm方法) 1.下载jdk对应版本rpm文件(以下称为jdk.rpm) 放在对应文件夹下 2.使用命令给定权限 #chmod +x jdk.rpm 3.解压rpm文件 ...