Ansible-playbook roles 实战

Ansible-playbook roles 实战

Ansible-playbook roles 实战总结

目录结构展示

主要实现自动化部署客户服务器初始环境

# tree
.
├── baseenv
│   ├── files
│   ├── handlers
│   ├── tasks
│   ├── templates
│   └── vars
├── deploy
│   ├── files
│   │   ├── 504.lic
│   │   ├── 505.lic
│   │   ├── stable-2.91-1.sql
│   │   └── stable-2.91-2.sql
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   ├── base.yml
│   │   ├── main.yml
│   │   ├── mysql.yml
│   │   └── vpn.yml
│   ├── templates
│   │   ├── Initmysql.sh.j2
│   │   ├── motd.j2
│   │   └── stable_2.91.sql.j2
│   └── vars
│       └── main.yml
├── hosts
└── site.yml

files目录:存放一些常用不变的文件

handlers目录:用于一些重启服务的触发规则

tasks目录:正儿八经的任务描述

templates目录:存放一些需要包装按需求描述的文件

vars目录:全局变量描述

hosts文件:主机组 若想对单个主机实现,则可以另建host_vars、 group_vars目录,然后在目录下自定义

任务介绍

任务描述

一开始把任务写在一个main.yml 文件中,但是后来发现挺乱的。

将每个任务以模块的形式展开,在集中调用比较方面,相互之间的 耦合度也没有那么高,可扩展

$ cat deploy/tasks/base.yml # 就拷贝一些文件过去
- name: Copy motd file
  template:
    src: ./motd.j2
    dest: /etc/motd

- name: Update hostname {{ hostname }}
  shell: hostnamectl set-hostname {{ hostname }}

- name: Copy License File
  copy:
    src: "{{ item.src }}"
    dest: "{{ item.dest }}"
    backup: yes
  with_items:
    - { src: "{{ license }}", dest: "/root/license/" }
    - { src: "{{ licensetest }}", dest: "/root/license/" }
    
$ cat deploy/tasks/mysql.yml # 执行mysql脚本没有找到好的模块或者方法,就采用了脚本的形式
- name: Copy sqlfile
  template:
    src: "{{ item.src }}"
    dest: "{{ item.dest }}"
  with_items:
    - { src: "{{ stable_sql }}", dest: "{{ stable_sql_path }}" }
    - { src: "Initmysql.sh.j2" , dest: "/root/Initmysql.sh" }

- name: Copy must exec sql
  copy:
    src: "{{ item.src }}"
    dest: "{{ item.dest }}"
  with_items:
    - { src: "stable-2.91-1.sql", dest: "/root/" }
    - { src: "stable-2.91-2.sql", dest: "/root/" }

- name: Exec sql script
  shell:  sh /root/Initmysql.sh
  

$ cat deploy/tasks/vpn.yml #自动安装VPN
- name: Install Openvpn Server
  yum:
    name: openvpn
    state: present

- name: Download Vpnclient Conf {{ vpnclientfile }}
  get_url:
    url: http://10.10.10.10/yydsvpnfiles/{{ vpnclientfile }}
    dest: "/etc/openvpn/client.conf"

- name: Start Openvpn Client
  service:
    name: openvpn@client.service
    state: started
    enabled: yes

- name: Check Openvpn Client Server
  shell: ps aux | grep openvpn
  register: check_openvpn

- name: Output info
  debug:
    msg: "{{ check_openvpn.stdout_lines }}"
    
$ cat deploy/tasks/main.yml # 聚合
---
- include: base.yml
- include: vpn.yml
- include: mysql.yml

$ cat site.yml # 入口文件
---
- hosts: test
  roles:
    - deploy
    
$ ansible-playbook test site.yml -i host 

总结

  1. 这只是简简单单的拷贝文件的roles,具体的根据业务场景定制化,无非就是把一些命令行或者shell任务描述成编排的样式,最终一键部署, 但是某些场景用脚本还是脚本方便。
  2. 如果一个任务不知道用什么模块,可以先百度下,然后具体用法可以参照ansible-doc module 查询
  3. 变量需要注意使用引号,不然报错也会有提示
  4. 注意变量的完整性,能复制尽量复制粘贴


标签:暂无标签
版权属于:lingchen 所有,采用《知识署名-非商业性使用许可协议》进行许可,转载请注明文章来源。

本文链接: https://www.yfzblog.cn/devops/52.html

赞 (0)

评论区

评论一下~


10+4=?

暂无评论,要不来一发?

回到顶部