问题

这边开始用rubrik来替换vdp做虚拟机备份。

其实我个人觉得vdp也挺好用的,但是场景就是vdp的备份限于本地存储,而rubrik可以备份到Azure和GCP上面去。相当于跨到云上去了,增加了一点可靠性。

介于rubrik在选择虚拟机到时候比较的麻烦,所以利用它提供的API调用后,直接将要备份的虚拟机加入到指定的备份组里面去,应用备份策略。

解决

  1. 这里用了rubrik提供的go语言接口
  2. 可以在这里看看 “github.com/rubrikinc/rubrik-sdk-for-go/rubrikcdm”

我的代码结构:

rubrik的代码结构

其中rubrik-functions.go是一些功能函数包,包括写的添加vm到SLA策略的函数,列出受保护的虚拟机的函数,检查虚拟机名是否正确的函数。

template是为了提供web界面,做的rubrik.html的页面。

main.go就是主文件了。下面给出比较结构性的部分。

就是验证,验证完了就是操作,操作好了,给个提示。

就是这样,打完收工。

package main

import (
	"fmt"
	"html/template"
	"log"
	"net/http" 

	Md "./rubrikmd"  //这样的结构便于引用
	"gopkg.in/gomail.v2" //发邮件的模块,用于提醒加入成功
	auth "gopkg.in/korylprince/go-ad-auth.v2" //验证模块,用于验证操作人是否有权限
)

const (
	host = "0.0.0.0"
	port = "8084"
)


// Webshow 用于增加vm到受保护的策略中
func Webshow(w http.ResponseWriter, r *http.Request) {
	r.ParseForm()
	if r.Method == "GET" {
		t, _ := template.ParseFiles("./templates/rubik.html")
		t.Execute(w, nil)
	} else if r.Method == "POST" {
		vmname := r.Form.Get("vmname")
		netid := r.Form.Get("account")
		password := r.Form.Get("password")
		if len(netid) == 0 {
			fmt.Fprintf(w, "You must fill your netid correctly!")
		}
		if len(password) == 0 {
			fmt.Fprint(w, "Check your password,please!")
		}

		config := &auth.Config{
			Server:   "dc01.test.local",
			Port:     389,
			BaseDN:   "OU=example,OU=USERS,OU=ACCTS,dc=test,dc=local",
			Security: auth.SecurityNone,
		}

		status, err := auth.Authenticate(config, netid, password)
		if err != nil {
			fmt.Fprint(w, "login failed! You should check your network first!")
		} else {
			if !status {
				fmt.Fprintf(w, "login failed! please double check your account and password!")
			} else {
				if Md.Detect(vmname) != nil {
					fmt.Fprintf(w, "the VM cannot found! please double check and try again!")
				} else {
					Md.AddVMintoProtect(vmname, "ProtectPolies30days")
					fmt.Fprint(w, "Your request is accepted!")

| 访问量:
Table of Contents