add support for log analytics in the ACI SDK
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
package aci
|
package aci
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -360,6 +363,111 @@ func TestCreateContainerGroupWithReadinessProbe(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func logAnalyticsWorkspaceFromFile(filepath string) (*LogAnalyticsWorkspace, error) {
|
||||||
|
analyticsdata, err := ioutil.ReadFile(filepath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Reading LogAnalyticsWorkspace file %q failed: %v", filepath, err)
|
||||||
|
}
|
||||||
|
// Unmarshal the log analytics file.
|
||||||
|
var law LogAnalyticsWorkspace
|
||||||
|
if err := json.Unmarshal(analyticsdata, &law); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &law, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCreateContainerGroupWithLogAnalytics(t *testing.T) {
|
||||||
|
law, err := logAnalyticsWorkspaceFromFile("../../../../loganalytics.json")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
cgname := "cgla"
|
||||||
|
cg, err := client.CreateContainerGroup(resourceGroup, cgname, ContainerGroup{
|
||||||
|
Location: location,
|
||||||
|
ContainerGroupProperties: ContainerGroupProperties{
|
||||||
|
OsType: Linux,
|
||||||
|
Containers: []Container{
|
||||||
|
{
|
||||||
|
Name: "nginx",
|
||||||
|
ContainerProperties: ContainerProperties{
|
||||||
|
Image: "nginx",
|
||||||
|
Command: []string{"nginx", "-g", "daemon off;"},
|
||||||
|
Ports: []ContainerPort{
|
||||||
|
{
|
||||||
|
Protocol: ContainerNetworkProtocolTCP,
|
||||||
|
Port: 80,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Resources: ResourceRequirements{
|
||||||
|
Requests: &ResourceRequests{
|
||||||
|
CPU: 1,
|
||||||
|
MemoryInGB: 1,
|
||||||
|
},
|
||||||
|
Limits: &ResourceLimits{
|
||||||
|
CPU: 1,
|
||||||
|
MemoryInGB: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Diagnostics: &ContainerGroupDiagnostics{
|
||||||
|
LogAnalytics: law,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if cg.Name != cgname {
|
||||||
|
t.Fatalf("resource group name is %s, expected %s", cg.Name, cgname)
|
||||||
|
}
|
||||||
|
if err := client.DeleteContainerGroup(resourceGroup, cgname); err != nil {
|
||||||
|
t.Fatalf("Delete Container Group failed: %s", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCreateContainerGroupWithInvalidLogAnalytics(t *testing.T) {
|
||||||
|
law := &LogAnalyticsWorkspace{}
|
||||||
|
_, err := client.CreateContainerGroup(resourceGroup, containerGroup, ContainerGroup{
|
||||||
|
Location: location,
|
||||||
|
ContainerGroupProperties: ContainerGroupProperties{
|
||||||
|
OsType: Linux,
|
||||||
|
Containers: []Container{
|
||||||
|
{
|
||||||
|
Name: "nginx",
|
||||||
|
ContainerProperties: ContainerProperties{
|
||||||
|
Image: "nginx",
|
||||||
|
Command: []string{"nginx", "-g", "daemon off;"},
|
||||||
|
Ports: []ContainerPort{
|
||||||
|
{
|
||||||
|
Protocol: ContainerNetworkProtocolTCP,
|
||||||
|
Port: 80,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Resources: ResourceRequirements{
|
||||||
|
Requests: &ResourceRequests{
|
||||||
|
CPU: 1,
|
||||||
|
MemoryInGB: 1,
|
||||||
|
},
|
||||||
|
Limits: &ResourceLimits{
|
||||||
|
CPU: 1,
|
||||||
|
MemoryInGB: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Diagnostics: &ContainerGroupDiagnostics{
|
||||||
|
LogAnalytics: law,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("TestCreateContainerGroupWithInvalidLogAnalytics should fail but encountered no errors")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestDeleteContainerGroup(t *testing.T) {
|
func TestDeleteContainerGroup(t *testing.T) {
|
||||||
err := client.DeleteContainerGroup(resourceGroup, containerGroup)
|
err := client.DeleteContainerGroup(resourceGroup, containerGroup)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -91,6 +91,7 @@ type ContainerGroupProperties struct {
|
|||||||
OsType OperatingSystemTypes `json:"osType,omitempty"`
|
OsType OperatingSystemTypes `json:"osType,omitempty"`
|
||||||
Volumes []Volume `json:"volumes,omitempty"`
|
Volumes []Volume `json:"volumes,omitempty"`
|
||||||
InstanceView ContainerGroupPropertiesInstanceView `json:"instanceView,omitempty"`
|
InstanceView ContainerGroupPropertiesInstanceView `json:"instanceView,omitempty"`
|
||||||
|
Diagnostics *ContainerGroupDiagnostics `json:"diagnostics,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContainerGroupPropertiesInstanceView is the instance view of the container group. Only valid in response.
|
// ContainerGroupPropertiesInstanceView is the instance view of the container group. Only valid in response.
|
||||||
@@ -320,3 +321,14 @@ type ContainerHTTPGetProbe struct {
|
|||||||
Path string `json:"path,omitempty"`
|
Path string `json:"path,omitempty"`
|
||||||
Scheme string `json:"scheme,omitempty"`
|
Scheme string `json:"scheme,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ContainerGroupDiagnostics contains an instance of LogAnalyticsWorkspace
|
||||||
|
type ContainerGroupDiagnostics struct {
|
||||||
|
LogAnalytics *LogAnalyticsWorkspace `json:"loganalytics,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// LogAnalyticsWorkspace defines details for a Log Analytics workspace
|
||||||
|
type LogAnalyticsWorkspace struct {
|
||||||
|
WorkspaceID string `json:"workspaceID,omitempty"`
|
||||||
|
WorkspaceKey string `json:"workspaceKey,omitempty"`
|
||||||
|
}
|
||||||
|
|||||||
@@ -15,6 +15,14 @@ cat <<EOF > ${outputPathCredsfile}
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
# This will build the log analytics credentials during CI
|
||||||
|
cat <<EOF > ${outputPathLogAnalyticsFile}
|
||||||
|
{
|
||||||
|
"workspaceID": "$omsworkspaceID",
|
||||||
|
"workspaceKey": "$omsworkspaceKey"
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
# This will build the kubeConfig during the CI
|
# This will build the kubeConfig during the CI
|
||||||
cat <<EOF > ${outputPathKubeConfigFile}
|
cat <<EOF > ${outputPathKubeConfigFile}
|
||||||
---
|
---
|
||||||
|
|||||||
Reference in New Issue
Block a user