ansible剧本功能实践介绍

ansible剧本功能实践介绍

  1. 知识点说明:

    1. 剧本扩展功能讲解完毕
    2. nfs服务一键化部署 使用剧本扩展功能
    3. 如何将rsync和nfs两个剧本进行整合
    4. 掌握剧本roles编写方法 标准化完善剧本的过程
  2. 知识点回顾:

    1. ansible程序的主机清单配置
      五种配置方法:
      a 分组配置管理主机信息 *****
      b 支持符号信息进行匹配
      web01.oldboy.com --> web[01:02].oldboy.com
      web02.oldboy.com
      c 主机信息加上端口配置
      172.16.1.31:52113
      web01:52113
      d 主机后面添加变量信息
      172.16.1.31 ansible_ssh_port=52113 ansible_ssh_user=root ansible_ssh_pass=123456
      e 采用嵌入信息方式配置
      1. [web01]
        xxxxx
        [web02]
        xxxx
        [web:children]
        web01
        web02
      2. [web01]
        172.16.1.7
        [web:vars]
        ansible_ssh_port=52113
        ansible_ssh_user=root
        oldboy=123
    2. 剧本扩展功能
  3. 编写剧本的重要功能介绍
    a 在剧本中设置变量信息 OK 3种方式 常用方式–剧本中设置
    b 在剧本中设置注册信息 OK 执行剧本时,可以显示输出命令结果信息 debug
    b 在剧本中设置判断信息 OK setup
    c 在剧本中设置循环信息 OK
    d 在剧本中设置错误忽略 OK
    d 在剧本中设置标签信息 OK
    e 在剧本中设置触发信息 OK
    详细的剧本扩展:
    https://docs.ansible.com/ansible/latest/user_guide/playbooks.html

    f 在剧本中进行剧本整合

  4. 在剧本中设置变量信息
    方式一:直接在剧本文件编写
    vars:
    oldboy01: data01
    oldboy02: data02

    方式二:在命令行中进行指定
    ansible-playbook --extra-vars=oldboy01=data01

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

    三种变量设置方式都配置了,三种方式的优先级???
    最优先: 命令行变量设置
    次优先: 剧本中变量设置
    最后: 主机清单变量设置

    如何全局设置变量: roles 剧本整合

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

 - 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 }}
显示进程信息,表示服务已经正常启动
PS: 设置变量不能有空格信息
  1. 在剧本中设置判断信息
    如何指定判断条件:
    (ansible_hostname == “nfs01”)
    (ansible_hostname == “web01”)
    setup模块中显示被管理主机系统的详细信息

    • hosts: oldboy
      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]

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

  vim test04.yml
    - hosts: all
      remote_user: root
      tasks:
        - name: Add Users
          user: name={{ item.name }} groups={{ item.groups }} state=present
          with_items: 
    	    - { name: 'testuser1', groups: 'bin' }
    		- { name: 'testuser2', groups: 'root' }
    
    vim test05.yml
    - hosts: all
      remote_user: root
      tasks:
        - name: Installed Pkg
          yum: name={{ item }}  state=present
          with_items:
    	    - wget
    		- tree
    		- lrzsz	
剧本执行出现错误排查思路/步骤:
1) 找到剧本中出现问题关键点
2) 将剧本中的操作转换成模块进行操作
3) 将模块的功能操作转换成linux命令
   本地管理主机上执行命令测试
   远程被管理主机上执行命令测试
   
- name: 01-install rsync
  yum:
    name: ['rsync', 'tree', 'wget']  --- saltstack
    state: installed

- name: xxx 
  yum: name=xxx state=installed      --- ansible
  1. 在剧本中设置忽略错误
    默认playbook会检查命令和模块的返回状态,如遇到错误就中断playbook的执行
    可以加入ignore_errors: yes忽略错误
    vim test06.yml

    • hosts: all
      remote_user: root
      tasks:
      • name: Ignore False
        command: /bin/false
        ignore_errors: yes
      • name: touch new file
        file: path=/tmp/oldboy_ignore state=touch
  2. 在剧本中设置标签功能

在这里插入代码片
指定执行哪个标签任务: ansible-playbook --tags=t2 test05.yml 
跳过指定标签任务:     ansible-playbook --skip-tags=t2 test05.yml 		
  1. 在剧本中设置触发功能

    • hosts: backup
      remote_user: root
      tasks:

      • name: 01 Install rsync
        yum: name=rsync state=present

      • name: 02 push config file
        copy: src=./file/{{ item.src }} dest=/etc/{{ item.dest }} mode={{ item.mode }}
        with_items:

        • { src: “rsyncd.conf”, dest: “rsyncd.conf”, mode: “0644” }
        • { src: “rsync.password”, dest: “rsync.password”, mode: “0600” }
          notify: restart rsync server

      handlers:

      • name: restart rsync server
        service: name=rsyncd state=restarted
  2. 将多个剧本进行整合
    方式一:include_tasks: f1.yml

    • hosts: all
      remote_user: root
      tasks:
      • include_tasks: f1.yml
      • include_tasks: f2.yml

    方式二:include: f1.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 编写NFS服务剧本
第一个历程: 创建几个目录
[root@m01 ansible-playbook]# tree nfs-file/
nfs-file/
├── nfs-client
└── nfs-server

第二个历程: 编写剧本信息
主机清单:
[nfs:children]
nfs_server
nfs_client
[nfs_server]
172.16.1.31
[nfs_client]
172.16.1.7
#172.16.1.8
#172.16.1.9

- hosts: nfs
  tasks:
    - name: 01-install nfs software
      yum:
        name: ['nfs-utils','rpcbind']
        state: installed

- hosts: nfs_server
  #vars:
  #  Data_dir: /data
  tasks:
    - name: 01-copy conf file
      copy: src=/etc/ansible/ansible-playbook/nfs-file/nfs-server/exports dest=/etc
      notify: restart nfs server
    - name: 02-create data dir
      file: path={{ Data_dir }} state=directory owner=nfsnobody group=nfsnobody 
       # path: ['data01','data02','data03'] 
       # state: directory 
       # owner: nfsnobody 
       # group: nfsnobody
    - name: 03-boot server
      #service: name=rpcbind state=started enabled=yes
      #service: name=nfs state=started enabled=yes
      service: name={{ item }} state=started enabled=yes
      with_items:
        - rpcbind
        - nfs     
 
  handlers:
    - name: restart nfs server
      service: name=nfs state=restarted
       
- hosts: nfs_client
  #vars:
  #  Data_dir: /data
  tasks:
    - name: 01-mount
      mount: src=172.16.1.31:{{ Data_dir }} path=/mnt fstype=nfs state=mounted
    - name: 02-check mount info
      shell: df -h|grep /data
      register: mount_info
    - name: display mount info
      debug: msg={{ mount_info.stdout_lines }}      

第三个历程: 进行剧本测试

  1. ansible程序roles — 规范
    剧本编写完问题:

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

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

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

    1. 编写tasks目录中的main.yml文件
  • name: 01-copy conf file
    copy: src=exports dest=/etc
    notify: restart nfs server
  • name: 02-create data dir
    file: path={{ Data_dir }} state=directory owner=nfsnobody group=nfsnobody

    path: [‘data01’,‘data02’,‘data03’]

    state: directory

    owner: nfsnobody

    group: nfsnobody

  • name: 03-boot server
    service: name={{ item }} state=started enabled=yes
    with_items:
    • rpcbind
    • nfs

vim main.yml

  • include_tasks: copy_info.yml
  • include_tasks: create_dir.yml
  • include_tasks: boot_server.yml

vim copy_info.yml

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

vim create_dir.yml

  • name: 02-create data dir
    file: path={{ Data_dir }} state=directory owner=nfsnobody group=nfsnobody

vim boot_server.yml

  • name: 03-boot server
    service: name={{ item }} state=started enabled=yes
    with_items:

    • rpcbind
    • nfs
    1. 编写vars目录中的main.yml文件
      [root@m01 vars]# vim main.yml
      Data_dir: /data

    2. 编写files目录中的文件
      [root@m01 files]# ll
      total 4
      -rw-r–r-- 1 root root 29 May 17 15:23 exports

    3. 编写handlers目录中的main.yml文件
      vim main.yml

    • name: restart nfs server
      service: name=nfs state=restarted

    目录中文件编写好汇总结构
    [root@m01 nfs]# tree
    .
    ├── files
    │ └── exports
    ├── handlers
    │ └── main.yml
    ├── tasks
    │ └── main.yml
    ├── templates
    └── vars
    └── main.yml

    第三个历程: 编写一个主剧本文件
    [root@m01 roles]# cat site.yml

    • hosts: nfs_server
      roles:

      • nfs-server
    • hosts: rsync_server
      roles:

      • rsync

思考:

  1. ansible剧本扩展功能进行总结

  2. (选做) 总结ansible剧本roles

  3. web服务 http协议原理 nginx(安装 配置)

  4. 一键化部署全网备份项目

  5. 一键化部署实时同步服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值