01. 编写剧本的重要功能介绍
 a 在剧本中设置变量信息
 b 在剧本中设置注册信息 执行剧本时,可以显示输出命令结果信息
 b 在剧本中设置判断信息
 c 在剧本中设置循环信息
 d 在剧本中设置错误忽略
 e 在剧本中设置标签信息
 f 在剧本中设置触发信息
 g 在剧本中进行剧本整合

02. 在剧本中设置变量信息

    方式一:直接在剧本文件编写  
    vars:
      dir01: data01
      dir02: data02
 
    方式二:在命令行中进行指定
    ansible-playbook --extra-vars=dir01=data01

    方式三:在主机清单文件编写
    [oldboy]
    dir01=data01
    dir02=data02

    三种变量设置方式都配置了,三种方式的优先级
    最优先: 命令行变量设置
    次优先: 剧本中变量设置
    最后:   主机清单变量设置
如何全局设置变量: roles 剧本整合
- hosts: cl
  vars:
    dir01: /data01
  tasks:
    - name: test create dir
      file: path={{ dir01 }} state=directory

03. 在剧本中设置注册信息

03. 在剧本中设置注册信息
    - hosts: oldboy
      tasks:
        - name: check server port
          shell: netstat -lntup  
          register: get_server_port- name: display port info
          debug: msg={{ get_server_port.stdout_lines }}
    显示进程信息,表示服务已经正常启动

04. 在剧本中设置判断信息

如何指定判断条件:
    (ansible_hostname == "nfs01")
    (ansible_hostname == "web01")
    setup模块中显示被管理主机系统的详细信息

    - hosts: cl
      remote_user: root
      tasks:
        - name: Check File
          file: path=/tmp/this_is_{{ ansible_hostname }}_file state=touch
          when: (ansible_hostname == "nfs") or (ansible_hostname == "backup")    
    
        - name: install httpd
          yum: name=httpd state=installed
          when: (系统情况 == "CentOS")
          
        - name: install httpd2
          yum: name=httpd2 state=installed
          when: (系统情况 == "ubuntu") 

    获取内置变量方法:
    ansible oldboy -m setup -a "filter=ansible_hostname"
    常见主机信息:
    ansible_all_ipv4_addresses:                仅显示ipv4的信息。
    ansible_devices:                            仅显示磁盘设备信息。
    ansible_distribution:                        显示是什么系统,例:centos,suse等。
    ansible_distribution_major_version:        显示是系统主版本。
    ansible_distribution_version:                仅显示系统版本。
    ansible_machine:                            显示系统类型,例:32位,还是64位。
    ansible_eth0:                                仅显示eth0的信息。
    ansible_hostname:                            仅显示主机名。
    ansible_kernel:                            仅显示内核版本。
    ansible_lvm:                                显示lvm相关信息。
    ansible_memtotal_mb:                        显示系统总内存。
    ansible_memfree_mb:                        显示可用系统内存。
    ansible_memory_mb:                            详细显示内存情况。
    ansible_swaptotal_mb:                        显示总的swap内存。
    ansible_swapfree_mb:                        显示swap内存的可用内存。
    ansible_mounts:                            显示系统磁盘挂载情况。
    ansible_processor:                            显示cpu个数(具体显示每个cpu的型号)。
    ansible_processor_vcpus:                    显示cpu个数(只显示总的个数)。
    
    获取子信息方法:
    ansible_eth0[ipv4]
- hosts: cl
  remote_user: root
  tasks:
    - name: Check File
      file: path=/tmp/this_is_{{ ansible_hostname }}_file state=touch
      when: (ansible_hostname == "client") or (ansible_hostname == "ansible")

    - name: install htop
      yum: name=htop state=installed
      when: (ansible_distribution == "CentOS")

    - name: install htop
      yum: name=htop  state=installed
      when: (ansible_distribution == "ubuntu")

04. 在剧本中设置循环信息

- hosts: cl
  remote_user: root
  tasks:
    - name: Add Users
      user: name={{ item.name }} groups={{ item.groups }} state=present
      with_items: 
        - { name: 'testuser1', groups: 'userr01' }
        - { name: 'testuser2', groups: 'root' }

    - name: Install Pkg one  
      yum: 
        name: [ 'wget', 'tree', 'net-tools' ]    ----方式一
        state: installed  
    
    - name: Install Pkg two
      yum: name= {{ item }} state=installed 
      with_items:                                ----官方建议
        - wget
        - tree
        - net-tools

05. 在剧本中设置忽略错误

    默认playbook会检查命令和模块的返回状态,如遇到错误就中断playbook的执行
    可以加入ignore_errors: yes忽略错误
- hosts: all remote_user: root tasks: - name: Ignore False file: path=/tmp/data.txt groups=user100 --user100不存在 ignore_errors: yes ----忽略错误 - name: touch new file file: path=/tmp/oldboy_ignore state=touch

06 在剧本中设置标签功能

- hosts: cl 
  ignore_errors: yes
  remote_user: root
  tasks:
    - name: Check File tag1
      file: path=/tmp/this_is_{{ ansible_hostname }}_file state=touch
      when: (ansible_hostname == "client") or (ansible_hostname == "ansible")
      tags: t1

    - name: bad thing tag2
      command: echo 123
      tags: t2

    - name: install htop  tag3
      yum: name=httpd state=installed
      when: (ansible_all_ipv4_addresses == ["172.16.1.110","10.0.0.110"])
      tags: t3

    - name: install htop  tag4
      yum: name=httpd2 state=installed
      when: (ansible_distribution == "Centos")
      tags: t4    

    指定执行哪个标签任务: ansible-playbook --tags=t2 tags.yaml
                ansible-playbook -t=t2 tags.yaml
    跳过指定标签任务: ansible-playbook --skip-tags=t2 tags.yaml

07. 在剧本中设置触发功能

- hosts: cl
  remote_user: root
  tasks:
    - name: 01-Install nfs
      yum: name=nfs-utils state=installed
    - name: 02-write conf file
      shell: /usr/bin/echo "/data 10.0.0.110(rw,sync)" >/etc/exports   ---修改完配置文件后需要重启,触发notify
      notify: restart nfs server
    - name: mount /data ->/mnt
      mount: src=10.0.0.110:/data path=/mnt fstype=nfs state=mounted

  handlers:
    - name: restart nfs server
      service: name=nfs state=restarted

08. 将多个剧本进行整合

 方式一:include_tasks: f1.yml
vim main.yml
- hosts: all gather_factes: no ------不收集主机信息 remote_user: root tasks: - include_tasks: f1.yml - include_tasks: f2.yml 方式二:include: f1.yml
vim mian.yml
- include:f1.yml - include:f2.yml 方式三:- import_playbook: **** [root@m01 ansible-playbook]# cat main.yml - import_playbook: base.yml - import_playbook: rsync.yml - import_playbook: nfs.yml - import_playbook: oxxx.yml - import_playbook: rsync.yml - import_playbook: nfs.yml

09 . ansible程序roles --- 规范

  剧本编写完问题:
  1. 目录结构不够规范 OK
  2. 编写好的任务如何重复调用
  3. 服务端配置文件改动,客户端参数信息也自动变化
  4. 汇总剧本中没有显示主机角色信息
  5. 一个剧本内容信息过多,不容易进行阅读,如何进行拆分 

    第一个历程: 规范目录结构
    cd /etc/ansible/rolesmkdir nfs/{vars,tasks,templates,handlers,files} -p  --- 创建角色目录下面的子目录
    [root@m01 roles]# tree 
    .
    ├── nfs
        ├── files       --- 保存需要分发文件目录 
        ├── handlers    --- 保存触发器配置文件信息
        ├── tasks       --- 保存要执行的动作信息文件  
        ├── templates   --- 保存需要分发模板文件 模板文件中可以设置变量信息
        └── vars        --- 保存变量信息文件

   第二个历程: 在roles目录中创建相关文件
   编写文件流程图:

    1) 编写tasks目录中的main.yml文件,也可以一个main.yml放在一起

    #nfs/tasks/main.yml

    - include_tasks: install_pkg.yml
    - include_tasks: copy_conf.yml
    - include_tasks: create_dir.yml
    - include_tasks: boot_server.yml

     vim install_pkg.yml   

       - name: Install Pkg
      yum: name= {{ item }} state=installed
         with_items:
           - nfs-utils
           - rpcbind

       vim copy_conf.yml   

       - name: write conf file
         copy: src=exports dest=/etc
         notify: restart nfs server

       vim create_dir.yml     

       - name: create nfs dir
         file: path={{ dir }} state=directory owner=nfsnobody group=nfsnobody

       vim boot_server.yml

       - name: restart nfs server
         service: name=nfs state=restarted enabled=yes

       2) 编写vars目录中的main.yml文件  

        dir: /data01
        ip: 10.0.0.110

       3) 编写files目录中的文件,可以是templates里面的模板文件

        vim exports
        {{ dir }}  {{ ip }}(rw,sync)

       4) 编写handlers目录中的main.yml文件
        vim main.yml
        - name: restart nfs server
          service: name=nfs state=restarted

      第三个历程: 编写一个主剧本文件 

        vim ./roles/master.yml   

        - hosts: cl
          roles:
            - nfs
       补充:templat        - name: copy conf file

          template:
            src: test.conf      
[root@ansible roles]# tree 

 

posted on 2021-07-07 18:09  宇小白  阅读(350)  评论(0编辑  收藏  举报