Merge pull request #13314 from prometheus/cut-2.49-rc.1

Cut 2.49 rc.1 + cherry pick Azure fix
This commit is contained in:
Bartlomiej Plotka 2023-12-20 09:22:07 +00:00 committed by GitHub
commit 1e306856a6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 75 additions and 29 deletions

View file

@ -1,5 +1,9 @@
# Changelog # Changelog
## 2.49.0-rc.1 / 2023-12-19
* [BUGFIX] SD: Fix Azure VM Scale Set NIC issue. #13283
## 2.49.0-rc.0 / 2023-12-12 ## 2.49.0-rc.0 / 2023-12-12
* [FEATURE] Promtool: Add `--run` flag promtool test rules command. #12206 * [FEATURE] Promtool: Add `--run` flag promtool test rules command. #12206

View file

@ -1 +1 @@
2.49.0-rc.0 2.49.0-rc.1

View file

@ -106,7 +106,7 @@ func CloudConfigurationFromName(name string) (cloud.Configuration, error) {
name = strings.ToUpper(name) name = strings.ToUpper(name)
env, ok := environments[name] env, ok := environments[name]
if !ok { if !ok {
return env, fmt.Errorf("There is no cloud configuration matching the name %q", name) return env, fmt.Errorf("there is no cloud configuration matching the name %q", name)
} }
return env, nil return env, nil
@ -305,6 +305,7 @@ type virtualMachine struct {
Location string Location string
OsType string OsType string
ScaleSet string ScaleSet string
InstanceID string
Tags map[string]*string Tags map[string]*string
NetworkInterfaces []string NetworkInterfaces []string
Size string Size string
@ -405,17 +406,31 @@ func (d *Discovery) refresh(ctx context.Context) ([]*targetgroup.Group, error) {
networkInterface = v networkInterface = v
cacheHitCount.Add(1) cacheHitCount.Add(1)
} else { } else {
networkInterface, err = client.getNetworkInterfaceByID(ctx, nicID) if vm.ScaleSet == "" {
if err != nil { networkInterface, err = client.getVMNetworkInterfaceByID(ctx, nicID)
if errors.Is(err, errorNotFound) { if err != nil {
level.Warn(d.logger).Log("msg", "Network interface does not exist", "name", nicID, "err", err) if errors.Is(err, errorNotFound) {
} else { level.Warn(d.logger).Log("msg", "Network interface does not exist", "name", nicID, "err", err)
ch <- target{labelSet: nil, err: err} } else {
ch <- target{labelSet: nil, err: err}
}
// Get out of this routine because we cannot continue without a network interface.
return
} }
// Get out of this routine because we cannot continue without a network interface. d.addToCache(nicID, networkInterface)
return } else {
networkInterface, err = client.getVMScaleSetVMNetworkInterfaceByID(ctx, nicID, vm.ScaleSet, vm.InstanceID)
if err != nil {
if errors.Is(err, errorNotFound) {
level.Warn(d.logger).Log("msg", "Network interface does not exist", "name", nicID, "err", err)
} else {
ch <- target{labelSet: nil, err: err}
}
// Get out of this routine because we cannot continue without a network interface.
return
}
d.addToCache(nicID, networkInterface)
} }
d.addToCache(nicID, networkInterface)
} }
if networkInterface.Properties == nil { if networkInterface.Properties == nil {
@ -623,6 +638,7 @@ func mapFromVMScaleSetVM(vm armcompute.VirtualMachineScaleSetVM, scaleSetName st
Location: *(vm.Location), Location: *(vm.Location),
OsType: osType, OsType: osType,
ScaleSet: scaleSetName, ScaleSet: scaleSetName,
InstanceID: *(vm.InstanceID),
Tags: tags, Tags: tags,
NetworkInterfaces: networkInterfaces, NetworkInterfaces: networkInterfaces,
Size: size, Size: size,
@ -631,9 +647,9 @@ func mapFromVMScaleSetVM(vm armcompute.VirtualMachineScaleSetVM, scaleSetName st
var errorNotFound = errors.New("network interface does not exist") var errorNotFound = errors.New("network interface does not exist")
// getNetworkInterfaceByID gets the network interface. // getVMNetworkInterfaceByID gets the network interface.
// If a 404 is returned from the Azure API, `errorNotFound` is returned. // If a 404 is returned from the Azure API, `errorNotFound` is returned.
func (client *azureClient) getNetworkInterfaceByID(ctx context.Context, networkInterfaceID string) (*armnetwork.Interface, error) { func (client *azureClient) getVMNetworkInterfaceByID(ctx context.Context, networkInterfaceID string) (*armnetwork.Interface, error) {
r, err := newAzureResourceFromID(networkInterfaceID, client.logger) r, err := newAzureResourceFromID(networkInterfaceID, client.logger)
if err != nil { if err != nil {
return nil, fmt.Errorf("could not parse network interface ID: %w", err) return nil, fmt.Errorf("could not parse network interface ID: %w", err)
@ -645,7 +661,27 @@ func (client *azureClient) getNetworkInterfaceByID(ctx context.Context, networkI
if errors.As(err, &responseError) && responseError.StatusCode == http.StatusNotFound { if errors.As(err, &responseError) && responseError.StatusCode == http.StatusNotFound {
return nil, errorNotFound return nil, errorNotFound
} }
return nil, fmt.Errorf("Failed to retrieve Interface %v with error: %w", networkInterfaceID, err) return nil, fmt.Errorf("failed to retrieve Interface %v with error: %w", networkInterfaceID, err)
}
return &resp.Interface, nil
}
// getVMScaleSetVMNetworkInterfaceByID gets the network interface.
// If a 404 is returned from the Azure API, `errorNotFound` is returned.
func (client *azureClient) getVMScaleSetVMNetworkInterfaceByID(ctx context.Context, networkInterfaceID, scaleSetName, instanceID string) (*armnetwork.Interface, error) {
r, err := newAzureResourceFromID(networkInterfaceID, client.logger)
if err != nil {
return nil, fmt.Errorf("could not parse network interface ID: %w", err)
}
resp, err := client.nic.GetVirtualMachineScaleSetNetworkInterface(ctx, r.ResourceGroupName, scaleSetName, instanceID, r.Name, &armnetwork.InterfacesClientGetVirtualMachineScaleSetNetworkInterfaceOptions{Expand: to.Ptr("IPConfigurations/PublicIPAddress")})
if err != nil {
var responseError *azcore.ResponseError
if errors.As(err, &responseError) && responseError.StatusCode == http.StatusNotFound {
return nil, errorNotFound
}
return nil, fmt.Errorf("failed to retrieve Interface %v with error: %w", networkInterfaceID, err)
} }
return &resp.Interface, nil return &resp.Interface, nil

View file

@ -142,6 +142,7 @@ func TestMapFromVMScaleSetVMWithEmptyTags(t *testing.T) {
vmSize := armcompute.VirtualMachineSizeTypes(size) vmSize := armcompute.VirtualMachineSizeTypes(size)
osType := armcompute.OperatingSystemTypesLinux osType := armcompute.OperatingSystemTypesLinux
vmType := "type" vmType := "type"
instanceID := "123"
location := "westeurope" location := "westeurope"
computerName := "computer_name" computerName := "computer_name"
networkProfile := armcompute.NetworkProfile{ networkProfile := armcompute.NetworkProfile{
@ -166,6 +167,7 @@ func TestMapFromVMScaleSetVMWithEmptyTags(t *testing.T) {
ID: &id, ID: &id,
Name: &name, Name: &name,
Type: &vmType, Type: &vmType,
InstanceID: &instanceID,
Location: &location, Location: &location,
Tags: nil, Tags: nil,
Properties: properties, Properties: properties,
@ -182,6 +184,7 @@ func TestMapFromVMScaleSetVMWithEmptyTags(t *testing.T) {
Tags: map[string]*string{}, Tags: map[string]*string{},
NetworkInterfaces: []string{}, NetworkInterfaces: []string{},
ScaleSet: scaleSet, ScaleSet: scaleSet,
InstanceID: instanceID,
Size: size, Size: size,
} }
@ -197,6 +200,7 @@ func TestMapFromVMScaleSetVMWithTags(t *testing.T) {
vmSize := armcompute.VirtualMachineSizeTypes(size) vmSize := armcompute.VirtualMachineSizeTypes(size)
osType := armcompute.OperatingSystemTypesLinux osType := armcompute.OperatingSystemTypesLinux
vmType := "type" vmType := "type"
instanceID := "123"
location := "westeurope" location := "westeurope"
computerName := "computer_name" computerName := "computer_name"
tags := map[string]*string{ tags := map[string]*string{
@ -224,6 +228,7 @@ func TestMapFromVMScaleSetVMWithTags(t *testing.T) {
ID: &id, ID: &id,
Name: &name, Name: &name,
Type: &vmType, Type: &vmType,
InstanceID: &instanceID,
Location: &location, Location: &location,
Tags: tags, Tags: tags,
Properties: properties, Properties: properties,
@ -240,6 +245,7 @@ func TestMapFromVMScaleSetVMWithTags(t *testing.T) {
Tags: tags, Tags: tags,
NetworkInterfaces: []string{}, NetworkInterfaces: []string{},
ScaleSet: scaleSet, ScaleSet: scaleSet,
InstanceID: instanceID,
Size: size, Size: size,
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "@prometheus-io/codemirror-promql", "name": "@prometheus-io/codemirror-promql",
"version": "0.49.0-rc.0", "version": "0.49.0-rc.1",
"description": "a CodeMirror mode for the PromQL language", "description": "a CodeMirror mode for the PromQL language",
"types": "dist/esm/index.d.ts", "types": "dist/esm/index.d.ts",
"module": "dist/esm/index.js", "module": "dist/esm/index.js",
@ -29,7 +29,7 @@
}, },
"homepage": "https://github.com/prometheus/prometheus/blob/main/web/ui/module/codemirror-promql/README.md", "homepage": "https://github.com/prometheus/prometheus/blob/main/web/ui/module/codemirror-promql/README.md",
"dependencies": { "dependencies": {
"@prometheus-io/lezer-promql": "0.49.0-rc.0", "@prometheus-io/lezer-promql": "0.49.0-rc.1",
"lru-cache": "^7.18.3" "lru-cache": "^7.18.3"
}, },
"devDependencies": { "devDependencies": {

View file

@ -1,6 +1,6 @@
{ {
"name": "@prometheus-io/lezer-promql", "name": "@prometheus-io/lezer-promql",
"version": "0.49.0-rc.0", "version": "0.49.0-rc.1",
"description": "lezer-based PromQL grammar", "description": "lezer-based PromQL grammar",
"main": "dist/index.cjs", "main": "dist/index.cjs",
"type": "module", "type": "module",

View file

@ -1,12 +1,12 @@
{ {
"name": "prometheus-io", "name": "prometheus-io",
"version": "0.49.0-rc.0", "version": "0.49.0-rc.1",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "prometheus-io", "name": "prometheus-io",
"version": "0.49.0-rc.0", "version": "0.49.0-rc.1",
"workspaces": [ "workspaces": [
"react-app", "react-app",
"module/*" "module/*"
@ -30,10 +30,10 @@
}, },
"module/codemirror-promql": { "module/codemirror-promql": {
"name": "@prometheus-io/codemirror-promql", "name": "@prometheus-io/codemirror-promql",
"version": "0.49.0-rc.0", "version": "0.49.0-rc.1",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@prometheus-io/lezer-promql": "0.49.0-rc.0", "@prometheus-io/lezer-promql": "0.49.0-rc.1",
"lru-cache": "^7.18.3" "lru-cache": "^7.18.3"
}, },
"devDependencies": { "devDependencies": {
@ -70,7 +70,7 @@
}, },
"module/lezer-promql": { "module/lezer-promql": {
"name": "@prometheus-io/lezer-promql", "name": "@prometheus-io/lezer-promql",
"version": "0.49.0-rc.0", "version": "0.49.0-rc.1",
"license": "Apache-2.0", "license": "Apache-2.0",
"devDependencies": { "devDependencies": {
"@lezer/generator": "^1.5.1", "@lezer/generator": "^1.5.1",
@ -20844,7 +20844,7 @@
}, },
"react-app": { "react-app": {
"name": "@prometheus-io/app", "name": "@prometheus-io/app",
"version": "0.49.0-rc.0", "version": "0.49.0-rc.1",
"dependencies": { "dependencies": {
"@codemirror/autocomplete": "^6.11.1", "@codemirror/autocomplete": "^6.11.1",
"@codemirror/commands": "^6.3.2", "@codemirror/commands": "^6.3.2",
@ -20862,7 +20862,7 @@
"@lezer/lr": "^1.3.14", "@lezer/lr": "^1.3.14",
"@nexucis/fuzzy": "^0.4.1", "@nexucis/fuzzy": "^0.4.1",
"@nexucis/kvsearch": "^0.8.1", "@nexucis/kvsearch": "^0.8.1",
"@prometheus-io/codemirror-promql": "0.49.0-rc.0", "@prometheus-io/codemirror-promql": "0.49.0-rc.1",
"bootstrap": "^4.6.2", "bootstrap": "^4.6.2",
"css.escape": "^1.5.1", "css.escape": "^1.5.1",
"downshift": "^7.6.2", "downshift": "^7.6.2",
@ -23551,7 +23551,7 @@
"@lezer/lr": "^1.3.14", "@lezer/lr": "^1.3.14",
"@nexucis/fuzzy": "^0.4.1", "@nexucis/fuzzy": "^0.4.1",
"@nexucis/kvsearch": "^0.8.1", "@nexucis/kvsearch": "^0.8.1",
"@prometheus-io/codemirror-promql": "0.49.0-rc.0", "@prometheus-io/codemirror-promql": "0.49.0-rc.1",
"@testing-library/react-hooks": "^7.0.2", "@testing-library/react-hooks": "^7.0.2",
"@types/enzyme": "^3.10.18", "@types/enzyme": "^3.10.18",
"@types/flot": "0.0.36", "@types/flot": "0.0.36",
@ -23602,7 +23602,7 @@
"@lezer/common": "^1.1.1", "@lezer/common": "^1.1.1",
"@lezer/highlight": "^1.2.0", "@lezer/highlight": "^1.2.0",
"@lezer/lr": "^1.3.14", "@lezer/lr": "^1.3.14",
"@prometheus-io/lezer-promql": "0.49.0-rc.0", "@prometheus-io/lezer-promql": "0.49.0-rc.1",
"isomorphic-fetch": "^3.0.0", "isomorphic-fetch": "^3.0.0",
"lru-cache": "^7.18.3", "lru-cache": "^7.18.3",
"nock": "^13.4.0" "nock": "^13.4.0"

View file

@ -28,5 +28,5 @@
"ts-jest": "^29.1.1", "ts-jest": "^29.1.1",
"typescript": "^4.9.5" "typescript": "^4.9.5"
}, },
"version": "0.49.0-rc.0" "version": "0.49.0-rc.1"
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "@prometheus-io/app", "name": "@prometheus-io/app",
"version": "0.49.0-rc.0", "version": "0.49.0-rc.1",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@codemirror/autocomplete": "^6.11.1", "@codemirror/autocomplete": "^6.11.1",
@ -19,7 +19,7 @@
"@lezer/lr": "^1.3.14", "@lezer/lr": "^1.3.14",
"@nexucis/fuzzy": "^0.4.1", "@nexucis/fuzzy": "^0.4.1",
"@nexucis/kvsearch": "^0.8.1", "@nexucis/kvsearch": "^0.8.1",
"@prometheus-io/codemirror-promql": "0.49.0-rc.0", "@prometheus-io/codemirror-promql": "0.49.0-rc.1",
"bootstrap": "^4.6.2", "bootstrap": "^4.6.2",
"css.escape": "^1.5.1", "css.escape": "^1.5.1",
"downshift": "^7.6.2", "downshift": "^7.6.2",