一、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. spark-shell和scala错误

    运行spark-shell 或者scala命令,出现以下错误: Welcome to Scala version 2.10.6 (Java HotSpot(TM) 64-Bit Server VM, ...

  2. Erlang初学

    这篇文章主要介绍了Erlang初学:Erlang的一些特点和个人理解总结,本文总结了函数式编程.一切都是常量.轻量进程.进程端口映射及典型缺点等内容,需要的朋友可以参考下 我对 Erlang 编程理念 ...

  3. js解决IE不支持数组的indexOf()方法

    if (!Array.indexOf) {                                    Array.indexOf = function (obj) {            ...

  4. AX7: Get started developing

    This blog will show how you can start making a customization in AX 7 by showing you the steps needed ...

  5. form中的GET与POST

     form标签是强大的:如果没有form标签,Internet将变成一个枯燥文档的只读存储库.Web Forms没有完全利用form标签的强大功能(也可以说是Web Forms为实现自己的目标才管理和 ...

  6. 一、OWIN初探

    前言 OWIN在.NET Web Servers与Web Application之间定义了一套标准接口,OWIN的目标是用于解耦Web Server和Web Application.基于此标准,鼓励开 ...

  7. window.onload和window.document.readystate的探究

    在编写前端页面的时候,我们时常需要对页面加载的状态进行判断,以便进行相应的操作. 比如在移动端,时常需要在页面完全加载完成之前,先显示一个loading的图标,等待页面完成加载完成后,才显示出真正要展 ...

  8. SpringBoot Demo

    Spring Boot,微框架,确实不错,很方便. 相关网站链接: http://www.tuicool.com/articles/veUjQba https://www.gitbook.com/bo ...

  9. 使用cnpm

    官方的 npm下载速度太慢 [..................] \ normalizeTree: sill install loadCurrentTree  一直是这个问题 使用淘宝的 cpm ...

  10. 【JAVA】【Eclipse】出现This element neither has attached source nor attached Javadoc...的解决方法

    This element neither has attached source nor attached Javadoc and hence no Javadoc could be found Ec ...