三种常见的数据格式:

XML:可扩展标记语言,用于数据交换和配置

JSON:对象标记法,主要用来数据交换或配置,不支持注释

YAML:不是一种标记语言,主要用来配置,大小写敏感,不支持tab

tomcat的语法格式就是xml格式,自动化脚本就是用的yaml格式。

一、特点:

playbook剧本是由一个或多个play组成的列表。

play的主要功能在于将定义的一组主机,装扮成事先通过ansible的task定义好的任务角色。task实际是调用ansilbe的一个module,将多个play组织在一个playbook中,即可以让它们联合起来,按事先编排的机制执行预定义的动作。

playbook文件采用yaml(yml)语言编写.

二、yaml语言

特性:

可读性好、和脚本语言的交互性好、使用实现语言的数据类型、有一个一致的信息模型、易于实现、可以基于流来处理、表达能力强扩展性好。

语法:

在编写时,在第一行用连续的三个"-"开始,最后用三个点...结尾。一般都省略三个点。使用#号注释。它有严格的缩进要求,不能空格和tab键混用。

三、核心组件

在一个playbook中有多个组件组成

hosts执行的远程主机列表

tasks任务集,有多个task的元素组成的列表,一个name只能包括一个task,也是组成完整代码块的最少元素。

templates模板,可替换模板文件中的变量并实现一些简单逻辑的文件。

handlers和notify结合使用,由特定条件触发的操作,满足条件执行,不满足不执行。

tags标签,指定某条任务执行,用于选择运行playbook中的部分代码。

文件以yaml后缀或yml后缀,习惯用yml。

四、playbook

可以通过yum安装的方式,需要epel源。

yum install -y epel-release.noarch

yum install -y ansible

配置文件在/etc/ansible/下。有三个文件:

[root@Node1 ansible]#:ls
ansible.cfg  hosts  roles

ansible.cfg配置文件

hosts主机

roles文件夹,角色

详细解释参考上一篇文件:Ansible自动化运维,(1)模块

在hosts中加入[web]组,有两台主机:7-2和7-3,7-1作为ansible主控端

在ansible下创建一个test.yaml文件。ping web中的两台主机。

---

- hosts: web

  remote_user: root        #默认就是root用户登录,也可以不写

  tasks:                       #任务

    - name: ping     #name就是一个描述信息。下面跟着一个执行块,ping

      ping:

检查语法:ansible-playbook --syntax-check test.yml,也可以ansible-playbook -C test.yml空跑不执行。

使用ansible-playbook执行一下测试。

格式:

格式:
- - -
hosts指定了在哪些机器上执行任务
remote_user 以谁的身份运行
tasks 任务列表,你要做哪些事情
gather_facts:no 表示不收集信息,但是使用变量时需要收集

例,创建用户:

vim add_user.yml

---

- hosts: web

  gather_facts: no


  tasks:

    - name: create user

      user:

        name: usr1

        uid: 1111

        system: yes    #系统用户

还可以写一行:user: name=usr1 uid=1111 system=yes

执行该文件:ansible-playbook add_user.yml

去远端主机查看用户文件是否创建成功了:

还可以指定shell类型,是否允许登录:shell=/sbin/nologin。是否创建家目录:create_home=no

删除用户usr1:使用state: absent

安装httpd:

剧本编写:

service是服务,开启httpd服务

执行:

name是描述信息,执行到的哪一个剧本。

验证是否安装并开启httpd:

删除httpd:

验证:发现已经被删除了httpd服务。

yum安装nginx:先安装依赖包

在主控端准备一个主配置文件nginx.conf和主页面index.html。

主配置文件是在本地yum下的epel源和nginx,把本地的nginx.conf复制到/data/下。

主页面是自己写一个。

[root@Node1 ansible]#:cat /data/index.html 
7-1

 [root@Node1 ansible]#:vim install_nginx.yml

---
- hosts: web

  tasks:
    - name: add repository
      yum_repository:                #epel源,变量
        name: epel
        description: epel yum repo
        baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
        gpgcheck: no

    - name: install nginx                #安装nginx
      yum: name=nginx state=present

    - name: config file                        #配置文件
      copy: src=/data/nginx.conf dest=/etc/nginx/nginx.conf

    - name: web page                        #主页面
      copy: src=/data/index.html dest=/usr/share/nginx/html/index.html

    - name: start nginx                        #开启nginx
      service: name=nginx state=started enabled=yes

执行这个安装文件:

[root@Node1 ansible]#:ansible-playbook install_nginx.yml

PLAY [web] *****************************************************************************************

TASK [Gathering Facts] *****************************************************************************
ok: [192.168.114.20]
ok: [192.168.114.30]

TASK [add repository] ******************************************************************************
ok: [192.168.114.30]
ok: [192.168.114.20]

TASK [install nginx] *******************************************************************************
changed: [192.168.114.20]
changed: [192.168.114.30]

TASK [config file] *********************************************************************************
changed: [192.168.114.20]
changed: [192.168.114.30]

TASK [web page] ************************************************************************************
changed: [192.168.114.20]
changed: [192.168.114.30]

TASK [start nginx] *********************************************************************************
changed: [192.168.114.30]
changed: [192.168.114.20]

PLAY RECAP *****************************************************************************************
192.168.114.20             : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.114.30             : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

执行成功:发现已启动:

使用主控端访问测试:

tags标签:

如果当某个name没有执行成功,可以在name下加入tags: page,在执行的时候可以单独执行这个name块。

例如,上面的yum安装nginx中,最后启动的那一步写错了,改回来之后,只需要执行那一个角色就好了,这时只要加入tags: page

....

    - name: start nginx                        #开启nginx

       tags: page
      service: name=nginx state=started enabled=yes

在运行的时候指定page:ansible-playbook -t page install_nginx.yml

notify和handlers:

notify监控,handlers执行,notify监控任务,如果改变了,就执行handlers,handlers是与tasks同级别的,缩进相同。

拿上面nginx举例:我们拿复制主页那一步举例:在copy下添加一个notify

    - name: web page                        #主页面
      copy: src=/data/index.html dest=/usr/share/nginx/html/index.html

      notify:

        - restart nginx


  handlers:

    - name: restart nginx

      service: name=nginx state=restarted

解释:由于copy具有幂等性,如果copy发生改变,也就是index.html文件发生改变,就会执行notify,- restart nginx要与handlers中的 - name: restart nginx一样。

验证:

先修改两个远端服务器的一个端口:添加一个端口8080

vim /etc/nginx/nginx.conf

此时,如果主控端不修改index.hmtl文件。是不会执行notify的。再标注一个tags:用于执行特定的任务。如图:

如果copy有改变,就会被notify监控到,进而执行handlers。重启nginx服务,就会多了个8080端口。

我们先修改index.html文件:追加的方式:echo "7-11" >> /data/index.html

执行该文件,指定特定的任务加-t

可以发现,成功执行,执行的是page块,重启了nginx。

测试是否开启了8080端口:

---end---

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部