zoukankan      html  css  js  c++  java
  • Ansible学习笔记

    一、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指明调用的角色名称;后续的键值对是用来传给角色的变量
                          

      

      

        

      

    转载于:https://www.cnblogs.com/trymybesttoimp/p/6223979.html

  • 相关阅读:
    Spring 事务不回滚
    Druid详细配置信息
    Servlet和JSP规范及版本对应关系
    CDN(内容分发网络)技术原理
    开发者需要了解的WebKit
    浏览器的渲染原理简介
    在浏览器中输入Google.com并且按下回车之后发生了什么?
    为什么说DOM操作很慢
    亿级Web系统搭建——单机到分布式集群
    linux下用rinetd做端口转发
  • 原文地址:https://www.cnblogs.com/twodog/p/12141466.html
Copyright © 2011-2022 走看看