/
CommonAzureFunc.go
108 lines (94 loc) · 3.72 KB
/
CommonAzureFunc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package resources
import (
"crypto/md5"
"fmt"
idrv "github.com/cloud-barista/cb-spider/cloud-control-manager/cloud-driver/interfaces"
irs "github.com/cloud-barista/cb-spider/cloud-control-manager/cloud-driver/interfaces/resources"
"io"
"io/ioutil"
"os"
"strconv"
"strings"
)
const (
CBResourceGroupName = "CB-GROUP"
CBVirutalNetworkName = "CB-VNet"
CBVnetDefaultCidr = "130.0.0.0/16"
CBVMUser = "cb-user"
//CBKeyPairPath = "/cloud-control-manager/cloud-driver/driver-libs/.ssh-azure/"
// by powerkim, 2019.10.30
CBKeyPairPath = "/cloud-driver-libs/.ssh-azure/"
)
// 서브넷 CIDR 생성 (CIDR C class 기준 생성)
func CreateSubnetCIDR(subnetList []*irs.VNetworkInfo) (*string, error) {
// CIDR C class 최대값 찾기
maxClassNum := 0
for _, subnet := range subnetList {
addressArr := strings.Split(subnet.AddressPrefix, ".")
if curClassNum, err := strconv.Atoi(addressArr[2]); err != nil {
return nil, err
} else {
if curClassNum > maxClassNum {
maxClassNum = curClassNum
}
}
}
if len(subnetList) == 0 {
maxClassNum = 0
} else {
maxClassNum = maxClassNum + 1
}
// 서브넷 CIDR 할당
vNetIP := strings.Split(CBVnetDefaultCidr, "/")
vNetIPClass := strings.Split(vNetIP[0], ".")
subnetCIDR := fmt.Sprintf("%s.%s.%d.0/24", vNetIPClass[0], vNetIPClass[1], maxClassNum)
return &subnetCIDR, nil
}
// KeyPair 해시 생성 함수
func CreateHashString(credentialInfo idrv.CredentialInfo) (string, error) {
keyString := credentialInfo.ClientId + credentialInfo.ClientSecret + credentialInfo.TenantId + credentialInfo.SubscriptionId
hasher := md5.New()
_, err := io.WriteString(hasher, keyString)
if err != nil {
return "", err
}
return fmt.Sprintf("%x", hasher.Sum(nil)), nil
}
// Public KeyPair 정보 가져오기
func GetPublicKey(credentialInfo idrv.CredentialInfo, keyPairName string) (string, error) {
keyPairPath := os.Getenv("CBSPIDER_ROOT") + CBKeyPairPath
hashString, err := CreateHashString(credentialInfo)
if err != nil {
return "", err
}
publicKeyPath := keyPairPath + hashString + "--" + keyPairName + ".pub"
publicKeyBytes, err := ioutil.ReadFile(publicKeyPath)
if err != nil {
return "", err
}
return string(publicKeyBytes), nil
}
// Private KeyPair 정보 가져오기
/*func GetPrivateKey(credentialInfo idrv.CredentialInfo, keyPairName string) (string, error) {
keyPairPath := os.Getenv("CBSPIDER_ROOT") + CBKeyPairPath
hashString, err := CreateHashString(credentialInfo)
if err != nil {
return "", err
}
privateKeyPath := keyPairPath + hashString + "--" + keyPairName + ".ppk"
privateKeyBytes, err := ioutil.ReadFile(privateKeyPath)
if err != nil {
return "", err
}
return string(privateKeyBytes), nil
}*/
func GetVNicIdByName(credentialInfo idrv.CredentialInfo, regionInfo idrv.RegionInfo, vNicName string) string {
return fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/networkInterfaces/%s", credentialInfo.SubscriptionId, regionInfo.ResourceGroup, vNicName)
}
func GetPublicIPIdByName(credentialInfo idrv.CredentialInfo, regionInfo idrv.RegionInfo, publicIPName string) string {
return fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/publicIPAddresses/%s", credentialInfo.SubscriptionId, regionInfo.ResourceGroup, publicIPName)
}
func GetSecGroupIdByName(credentialInfo idrv.CredentialInfo, regionInfo idrv.RegionInfo, secGroupName string) string {
// "SecurityGroupIds": ["/subscriptions/cb592624-b77b-4a8f-bb13-0e5a48cae40f/resourceGroups/CB-GROUP/providers/Microsoft.Network/networkSecurityGroups/CB-SecGroup"],
return fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/networkSecurityGroups/%s", credentialInfo.SubscriptionId, regionInfo.ResourceGroup, secGroupName)
}