zoukankan      html  css  js  c++  java
  • ansible-playbook

    一、ansible-playbook介绍:

     playbook是由一个或多个"play"组成的列表。play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来将,所谓的task无法是调用ansible的一个module。将多个paly组织在一个playbook中,即可以让他们联通起来按事先编排的机制同唱一台大戏。

    1、playbook基础组件:

    hosts

    1
    playbook中的每一个paly的目的都是为了让某个或某些以某个指定用户的身份执行任务。hosts用于指定要执行指定任务的主机,其可以是一个或多个由冒号分割主机组。

    user

    1
    remote_user则用于指定远程主机上的执行任务的用户。

    任务列表:

    1
    play的主体部分是task list. task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。

    action

    1
    任务执行过程

    handlers

    1
    用于当前关注的资源发生变化时采取一定指定的操作

    2、实例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    [root@node1 playbook]# cat web.yml
    - hosts: test  \主机组,在/etc/ansible/hosts定义
      remote_user: root  \远端执行任务的用户
      tasks: \任务
      - name: install httpd  \任务描述
        command: yum -y install httpd  \调用ansible的command模块安装httpd
      - name: provide httpd.conf \任务描述
        copy: src="/root/httpd.conf" dest="/etc/httpd/conf/httpd.conf" \调用ansible的copy模块,httpd安装完成后将事先准备好的httpd.conf文件复制到/etc/httpd/conf目录下
        tags: conf  \给此任务打标记,可单独执行标记的任务,使用 ansible-playbook -C 命令执行
        notify:  \文件内容变更通知
        - server restart  \通知到指定的任务
      - name: server start  \任务描述
        service: name=httpd state=started enabled=true \调用ansible的service模块的属性定义安装完成httpd以后httpd服务的管理
      handlers: \定义接受关注的资源变化后执行的动作
      - name: server restart  \任务描述
        service: name=httpd state=restarted   \当关注的资源发生变化后调用service模块,采取的响应的动作
    执行过程如下:
     [root@node1 playbook]# ansible-playbook web.yml 
     
    PLAY [test] ******************************************************************* 
     
    GATHERING FACTS *************************************************************** 
    ok: [172.16.2.13]
     
    TASK: [install httpd] ********************************************************* 
    changed: [172.16.2.13]
     
    TASK: [provide httpd.conf] **************************************************** 
    changed: [172.16.2.13]
     
    TASK: [server start] ********************************************************** 
    changed: [172.16.2.13]
     
    NOTIFIED: [server restart] **************************************************** 
    changed: [172.16.2.13]
     
    PLAY RECAP ******************************************************************** 
    172.16.2.13                : ok=5    changed=4    unreachable=0    failed=0

    二、ansible的roles介绍:

    ansible的roles用于层次性、结构化地组织palybook。roles能够根据层次型结构自动装载变量文件、tasks及handlers等。要使用roles只需要playbook中使用include指令即可。

    rules的组成:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    root@node1 playbook]# tree  roles/
    roles/ \ansible所有的信息都放到此目录下面对应的目录中
    └── nginx  \角色名称
        ├── default  \为当前角色设定默认变量时使用此目录,应当包含一个main.yml文件;
        ├── files  \存放有copy或script等模块调用的文件
        ├── handlers \此目录总应当包含一个main.yml文件,用于定义各角色用到的各handler
        ├── meta \应当包含一个main.yml,用于定义角色的特殊设定及其依赖关系;1.3及以后版本支持
        ├── tasks \至少包含一个名为main.yml的文件,定义了此角色的任务列表,可使用include指令
        ├── templates \template模块会自动在此目录中寻找Jinja2模板文件
        └── vars  \应当包含一个main.yml文件,用于定义此角色用到的变量

    roles介绍完了,那么我们就利用ansible的roles来配置nginx

    1、首先按照上面的要求创建要用到的目录

    1
    [root@node1 playbook]# mkdir -pv roles/nginx/{tasks,files,templates,handlers,vars,meta,default}

    2、准备nginx配置文件

    1
    2
    3
    4
    5
    6
    7
    准备nginx.conf配置文件,使用模板文件配置
    [root@node1 playbook]# cd roles/nginx/templates/
    [root@node1 ~]# ansible all -m setup | grep ansible_processor_cores
            "ansible_processor_cores": 1,  \获取ansible的要调用的相关函数
    [root@node1 playbook]# cd roles/nginx/templates/   \模板文件一定要放到此目录     
    [root@node1 templates]# vim nginx.conf 
    worker_processes {{  ansible_processor_cores }};  \调用获取到的函数
    1
    2
    3
    准备nginx的default.conf文件
    [root@node1 playbook]# ls -l roles/nginx/files/
    -rw-r--r--. 1 root root 1290 Nov 12  2014 default.conf

    3、准备nginx的rpm包

    1
    2
    3
    [root@node1 playbook]# ls -l  roles/nginx/files/
    -rw-r--r--. 1 root root   1290 Nov 12  2014 default.conf
    -rw-r--r--. 1 root root 319456 Mar 29 20:44 nginx-1.4.7-1.el6.ngx.x86_64.rpm

    4、在tasks目录中配置任务列表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [root@node1 playbook]# cd  roles/nginx/tasks/
    [root@node1 tasks]# vim  main.yml 
      - name: copy nginx.rpm
        copy: src=nginx-1.4.7-1.el6.ngx.x86_64.rpm  dest=/tmp/nginx-1.4.7-1.el6.ngx.x86_64.rpm
      - name: install nginx
        shell: yum -y  install /tmp/nginx-1.4.7-1.el6.ngx.x86_64.rpm
      - name: provides nginx.conf
        template: src=nginx.conf  dest=/etc/nginx/nginx.conf
        tags: nginxconf
        notify:
        - server restart
      - name: provides default.conf
        copy: src=default.conf dest=/etc/nginx/conf.d/default.conf 
        tags: nginxconf
      - name: server start
        service: name=nginx enabled=true state=started

    5、在handlers目录中配置定义handler信息

    1
    2
    3
    4
    [root@node1 playbook]# cd roles/nginx/handlers/
    [root@node1 handlers]# vim  main.yml 
    - name: server restart
      service: name=nginx  state=restarted

    6、在roles同一级目录中创建site.yml文件

    1
    2
    3
    4
    5
    [root@node1 playbook]# cat site.yml 
    - hosts: nginx
      remote_user: root
      roles:
      - nginx

    7、应用配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    [root@node1 playbook]# ansible-playbook site.yml 
     
    PLAY [nginx] ****************************************************************** 
     
    GATHERING FACTS *************************************************************** 
    ok: [172.16.2.13]
     
    TASK: [nginx | copy nginx.rpm] ************************************************ 
    ok: [172.16.2.13]
     
    TASK: [nginx | install nginx] ************************************************* 
    changed: [172.16.2.13]
     
    TASK: [nginx | provides nginx.conf] ******************************************* 
    changed: [172.16.2.13]
     
    TASK: [nginx | provides default.conf] ***************************************** 
    changed: [172.16.2.13]
     
    TASK: [nginx | server start] ************************************************** 
    changed: [172.16.2.13]
     
    NOTIFIED: [nginx | server restart] ******************************************** 
    changed: [172.16.2.13]
     
    PLAY RECAP ******************************************************************** 
    172.16.2.13                : ok=7    changed=5    unreachable=0    failed=0

    8、在node2主机上查看nginx是否已启动

    1
    2
    [root@node2 ~]# ss -tpln | grep 80
    LISTEN     0      128                       *:80                       *:*      users:(("nginx",8934,8),("nginx",8936,8))

    9、roles目录总体结构:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [root@node1 playbook]# tree roles/
    roles/
    └── nginx
        ├── default
        ├── files
        │  ├── default.conf
        │  └── nginx-1.4.7-1.el6.ngx.x86_64.rpm
        ├── handlers
        │  └── main.yml
        ├── meta
        ├── tasks
        │  └── main.yml
        ├── templates
        │  └── nginx.conf
        └── vars

    到此ansible常用的知识已介绍完毕,仅个人学习总结,大家有疑问的话可以一起交流。

    注:转载自:linux运维部落 » ansible-playbook

  • 相关阅读:
    计蒜客模拟赛D2T2 蒜头君的排序:区间逆序对(移动端点) + 树状数组
    计蒜客模拟赛D2T1 蒜头君的兔子:矩阵快速幂
    计蒜客模拟赛D1T2 蒜头君的树:树上节点之间最短距离和
    计蒜客模拟赛D1T1 蒜头君打地鼠:矩阵旋转+二维前缀和
    Cubieboard安装系统
    awk速查手册
    sed速查手册
    常用正则表达
    MySQL索引小记
    jQuery中attr和prop的区别
  • 原文地址:https://www.cnblogs.com/liang-wei/p/6030755.html
Copyright © 2011-2022 走看看