playbook

作者: WhatGui_c607 | 来源:发表于2019-04-25 20:44 被阅读0次

                             day40

    playbook

    什么是playbook?

    把所有操作按照ansible编程语法,放在文件里执行就是playbook。

    ansible剧本编写格式说明

    ansible剧本遵循PYyaml语法规则进行编写,yaml文件基本编写规则如下说明:

    规则一:缩进

    yaml使用一个固定的缩进风格表示数据层结构关系,需要每个缩进级别由两个空格组成。切记一定不能使用tab键进行缩进。

    规则二:冒号

    每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)

    规则三:短横线

    想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分

    1.YAML介绍

    YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001年在首次发表了这种语言,另外Ingy dt Net与Oren Ben-Kiki也是这语言的共同设计者。

    YAML Ain't Markup Language,即YAML不是XML。不过,在开发的这种语言时,YAML的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。其特性:

    YAML的可读性好

    YAML和脚本语言的交互性好

    YAML使用实现语言的数据类型

    YAML有一个一致的信息模型

    YAML易于实现

    YAML可以基于流来处理

    YAML表达能力强,扩展性好

    更多的内容及规范参见http://www.yaml.org。

    12.8.3 playbook替代方案

    playbook替代方案1:不同样

    [root@m01 ~]# cat ansible.sh #判断 循环,可以脚本实现。

    ansible oldboy -m file -a "dest=/tmp/oldboy_file state=touch"

    ansible oldboy -m file -a "dest=/tmp/oldboy_file state=touch owner=oldboy group=oldboy mode=ugo=rwx"

    ansible oldboy -m yum -a "name=nginx state=installed"

    ansible oldboy -m service -a "name=crond state=started enabled=yes"

    ansible oldboy -m cron -a "name='sync time' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'"

    playbook替代方案2:通用***********************************

    [root@m01 ~]# cat ~/set.sh

    touch /tmp/oldboy_file

    chown oldboy.oldboy /tmp/oldboy_file

    yum install nginx -y

    /etc/init.d/crond start

    chkconfig cornd on

    echo '#sync time oldboy' >>/var/spool/cron/root

    echo '00 00 * * *  /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root

    执行:

    ansible oldboy -m script -a "~/set.sh"

    实践:

    ansible oldboy -m shell -a "echo oldboy linux. >/tmp/oldboy.log"

    把这行命令写成剧本:

    准备:

    mkdir -p /etc/ansible/yaml

    cd  /etc/ansible/yaml

    vim p1.yml

    开始编写:

    [root@m01 /etc/ansible/yaml]# cat /etc/ansible/yaml/p1.yml

    - hosts: oldboy

      tasks:

        - name: Create a log file

          shell: echo oldboy linux. >/tmp/oldboy.log

    [root@m01 /etc/ansible/yaml]# cat p2.yml

    - hosts: oldboy

      tasks:

        - shell: echo oldboy linux. >/tmp/oldboy.log

    [root@m01 /etc/ansible/yaml]# ansible-playbook -C /etc/ansible/yaml/p1.yml

    说明:利用ansibl-playbook命令执行剧本,-C参数表示测试剧本任务执行,类似话剧的彩排一样。

    PLAY [oldboy] ***********************************************************************************************************

    TASK [Gathering Facts] **************************************************************************************************

    ok: [172.16.1.41]

    ok: [172.16.1.31]

    TASK [Create a log file] ************************************************************************************************

    skipping: [172.16.1.41]

    skipping: [172.16.1.31]

    PLAY RECAP **************************************************************************************************************

    172.16.1.31                : ok=1    changed=0    unreachable=0    failed=0 

    172.16.1.41                : ok=1    changed=0    unreachable=0    failed=0 

    执行:

    [root@m01 /etc/ansible/yaml]# ansible-playbook /etc/ansible/yaml/p1.yml

    PLAY [oldboy] ***********************************************************************************************************

    TASK [Gathering Facts] **************************************************************************************************

    ok: [172.16.1.31]

    ok: [172.16.1.41]

    TASK [Create a log file] ************************************************************************************************

    changed: [172.16.1.31]

    changed: [172.16.1.41]

    PLAY RECAP **************************************************************************************************************

    172.16.1.31                : ok=2    changed=1    unreachable=0    failed=0 

    172.16.1.41                : ok=2    changed=1    unreachable=0    failed=0 

    ansible oldboy -m file -a "dest=/tmp/oldboy1 state=touch"

    编写剧本:

    [root@m01 /etc/ansible/yaml]# cat p3.yml

    - hosts: oldboy

      remote_user: root

      tasks:

        - name: Create New File

          file: name=/tmp/oldboy1 state=touch

    定时任务:

    ansible oldboy -m cron -a "name='sync time' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'"

    #crond-id-001:time sync by oldboy

    */5 * * * * /usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1

    编写剧本:

    [root@m01 /etc/ansible/yaml]# cat p4.yml

    - hosts: oldboy

      tasks:

        - name: Cron time sync

          cron: name='sync time' minute=*/10 job='/usr/sbin/ntpdate ntp3.aliyun.com >/dev/null 2>&1'

    练习题:每周一1-5 上午8:30 /server/scripts/class.sh

    编写剧本:

    [root@m01 /etc/ansible/yaml]# cat p5.yml

    - hosts: oldboy

      tasks:

        - name: Cron 每周1-5,8:30 老男孩脱产上课

          cron: name='oldboy class' minute=30 hour=08 weekday=1-5  job='/bin/sh /server/scripts/class.sh>/dev/null 2>&1'

    结果:

    [root@nfs01 ~]# crontab -l|tail -2

    #Ansible: oldboy class

    30 08 * * 1-5 /bin/sh /server/scripts/class.sh>/dev/null 2>&1

    ansible oldboy -m copy -a "src=/etc/rsyncd.conf dest=/etc/rsyncd.conf backup=yes"

    ansible oldboy -m copy -a "content='rsync_backup:oldboy' dest=/etc/rsync.password backup=yes mode=0600"

    编写剧本:

    [root@m01 /etc/ansible/yaml]# cat p6.yml

    - hosts: backup

      tasks:

        - name: copy rsyncd.conf

          copy: src=/data/rsyncd.conf.template dest=/etc/rsyncd.conf mode=0600 backup=yes

        - name: create rsync.password

          copy: content='rsync_backup:oldboy' dest=/etc/rsync.password mode=0600

    3个步骤

    1、Linux命令行操作

    #3)创建用户和备份目录

    useradd rsync

    id rsync

    mkdir -p /backup

    chown -R rsync.rsync /backup/

    ls -ld /backup/

    #4)启动和检查

    systemctl start rsyncd

    systemctl enable rsyncd

    systemctl status rsyncd

    2、ansible命令

    ansible oldboy -m systemd -a "name=crond.service enabled=no state=stopped "

    ansible oldboy -m command -a "systemctl status crond"

    ansible oldboy -m systemd -a "name=crond.service enabled=yes state=started"

    3、编写剧本:

    [root@m01 ~]# cat /etc/ansible/yaml/p6.yml

    - hosts: backup

      tasks:

        - name: copy rsyncd.conf

          copy: src=/data/rsyncd.conf.template dest=/etc/rsyncd.conf mode=0600 backup=yes

        - name: create rsync.password

          copy: content='rsync_backup:oldboy' dest=/etc/rsync.password mode=0600

        - name: create user 用user模块 替代

          command: useradd rsync -s /sbin/nologin -M

        - name: create dir 用file模块替代

          command: mkdir -p /backup

        - name: shouquan 用file模块替代

          command: chown -R rsync.rsync /backup/

        - name:  startup rsyncd

          systemd: name='rsyncd.service' state=restarted enabled=yes

      执行三部曲:

    ansible-playbook --syntax-check /etc/ansible/yaml/p6.yml

    ansible-playbook -C /etc/ansible/yaml/p6.yml

    ansible-playbook  /etc/ansible/yaml/p6.yml

    检测结果:

    rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

    今晚25日项目实践一分钟内,一键完成三个项目的安装:

    使用playbook完成如下配置:

    1)各一键完成rsync服务端和客户端。  #完成

    2)各一键完成nfs服务端和客户端。

    3)各一键完成sersync服务端和客户端。

    一个脚本one_key.sh或者一个ansible命令。完成

    - name: This command will change the working directory to somedir/ and will only run when /path/to/database doesn't exist.

      command: /usr/bin/make_database.sh arg1 arg2

      args:

        chdir: somedir/

        creates: /path/to/database

      


        day41

    DNS,全称Domain Name System

    计算机网络诞生时候

    通过IP地址访问服务器。

    IP地址不好记:IP地址.

    1.1.1.1

    发展到后来 就用hosts,所有的访问服务器的主机hosts都加上解析记录

    大家都把解析放到hosts,发生问题。每个人都要改HOSTS

    增加网站记录,如何所有知道呢?

    发明了DNS

    上网配置了DNS服务器,只要输入域名地址,就会有DNS服务器告诉你IP是啥。

    企业上网如何让DNS知道他的域名,企业上网购买域名,默认管理平台(默认的DNS),

    解析记录记录。

    自动化解析,不需要分发hosts,不需要客户端做任何配置。

    个人客户端只要DNS地址就行。

    在早期的IP网路世界里面每台电脑都只用IP地址来表示不久人们就发现这样很难记忆於是一些UNIX的使用者就建立一个HOSTS对应表将IP和主机名字对应起来这样用户只需输入电脑名字就可以代替IP来进行沟通了。如果你安装了Linux系统在/etc下面就可以找到这个hosts档案了在NT的系统里你也可以在\winnt\system32\drivers\etc下面找到它。不过这个HOSTS档是要由管理者手工维护的最大的问题是无法适用於大型网路而且更新也是件非常头痛的事情。这就是DNS大派用场的时候了。

    DNS全解析

    https://blog.csdn.net/u012375924/article/details/76408947

    企业不会自建外网DNS,选择购买域名默认DNS,大企业花钱买DNSPOD,F5智能DNS解析。

    服务器端开源工具:bind、powerdns,bind比较流行。

    大企业的内网使用DNS,搭建bind。

    DNS、邮件服务 -----花钱买,不要搭建。

        exchange+ad  sendmail  qmail  postfix

    263邮箱,阿里免费(50人),腾讯免费(100以内)。

    HTTP协议,全称HyperText Transfer Protocol,中文名为超文本传输协议

    HTTP的重要应用之一是WWW服务

    HTTP协议的WWW服务应用的默认端口为80

    https的默认端口为443

    1、什么是HTTP请求方法

    客户端请求Web

    服务器时,告诉服务器要执行什么具体的动作。

    GET 客户端请求指定资源信息,服务器返回指定资源。

        浏览网页的过程都是GET方法。

    POST 将客户端的数据提交到服务器,例:注册用户。

        上传图片、视频,都是POST方法。

    DELETE 请求服务器删除Request-URI所标识的资源。

    MOVE 请求服务器将指定的页面移至另一个网络地址。

    HEAD 只请求响应报文中的HTTP首部。

    什么是HTTP状态码?

    HTTP状态码(HTTP Status Code)是用来表示Web服务器响应http请求状态的数字代码。

    404 没有你要的东西

    403 权限拒绝

    查看响应头

    [root@web01 ~]# curl -I www.baidu.com

    HTTP/1.1 200 OK

    Accept-Ranges: bytes

    Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform

    Connection: Keep-Alive

    Content-Length: 277

    Content-Type: text/html

    Date: Fri, 26 Apr 2019 03:48:34 GMT

    Etag: "575e1f60-115"

    Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT

    Pragma: no-cache

    Server: bfe/1.0.8.18

    [root@web01 ~]# curl -I www.baidu.com///dasdfasdfasf

    HTTP/1.1 302 Found

    Cache-Control: max-age=86400

    Connection: Keep-Alive

    Content-Type: text/html; charset=iso-8859-1

    Date: Fri, 26 Apr 2019 03:49:51 GMT

    Expires: Sat, 27 Apr 2019 03:49:51 GMT

    Location: https://www.baidu.com/search/error.html

    Server: Apache

    X-Pad: avoid browser bug

    生产环境常见HTTP状态码的博客文章见 http://oldboy.blog.51cto.com/2561410/716294

    HTTP报文  Http 消息  数据包

    HTTP报文可分为两种,

    一种是从Web客户端发往Web服务器的HTTP报文,称为请求报文(RequestMessage)。

    另外一种是从Web服务器发往Web客户端的报文,称为响应报文(Response Message)

    HTTP的请求和响应报文的格式类似。

    MIME类型

    Web服务器会把通过Web传输的每个对象都打上名为MIME 类型(MIME type) 的数据格式标签。

    MIME类型

    URL,全称Uniform Resource Location,中文翻译为统一资源定位符

    网址 就是URL

    URI,全称Uniform Resource Identifier,中文翻译为统一资源标识符

    URL是URI命名机制的一个子集

    URI标识的更多,例如还有邮箱地址

    相关文章

      网友评论

          本文标题:playbook

          本文链接:https://www.haomeiwen.com/subject/pvfcnqtx.html