-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(AOM): import AOM service_discovery_rule resource (FlexibleEngine…
- Loading branch information
1 parent
4dcbbcd
commit 1f88fa6
Showing
3 changed files
with
378 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
--- | ||
subcategory: "Application Operations Management (AOM)" | ||
--- | ||
|
||
# flexibleengine_aom_service_discovery_rule | ||
|
||
Manages an AOM service discovery rule resource within FlexibleEngine. | ||
|
||
## Example Usage | ||
|
||
### Basic example | ||
|
||
```hcl | ||
resource "flexibleengine_aom_service_discovery_rule" "discovery_rule" { | ||
name = "test-rule" | ||
priority = 9999 | ||
detect_log_enabled = "true" | ||
discovery_rule_enabled = "true" | ||
is_default_rule = "false" | ||
log_file_suffix = ["log"] | ||
service_type = "Java" | ||
discovery_rules { | ||
check_content = ["java"] | ||
check_mode = "contain" | ||
check_type = "cmdLine" | ||
} | ||
log_path_rules { | ||
name_type = "cmdLineHash" | ||
args = ["java"] | ||
value = ["/tmp/log"] | ||
} | ||
name_rules { | ||
service_name_rule { | ||
name_type = "str" | ||
args = ["java"] | ||
} | ||
application_name_rule { | ||
name_type = "str" | ||
args = ["java"] | ||
} | ||
} | ||
} | ||
``` | ||
|
||
## Argument Reference | ||
|
||
The following arguments are supported: | ||
|
||
* `region` - (Optional, String, ForceNew) The region in which to create the service discovery rule resource. If omitted, | ||
the provider-level region will be used. Changing this creates a new resource. | ||
|
||
* `name` - (Required, String) Specifies the rule name, which contains 4 to 63 characters. It must start | ||
with a lowercase letter but cannot end with a hyphen (-). Only digits, lowercase letters, and hyphens are allowed. | ||
|
||
* `service_type` - (Required, String) Specifies the service type, which is used only for rule classification and UI display. | ||
You can enter any field. For example, enter Java or Python by technology stack, or enter collector or database by function. | ||
|
||
* `discovery_rules` - (Required, List) Specifies the discovery rule. If the array contains multiple conditions, only the | ||
processes that meet all the conditions will be matched. If the value of `check_type` is **cmdLine**, set the value of | ||
`check_mode` to **contain**. `check_content` is in the format of ["xxx"], indicating that the process must contain | ||
the xxx parameter. If the value of `check_type` is **env**, set the value of `check_mode` to **contain**. | ||
`check_content` is in the format of ["k1","v1"], indicating that the process must contain the environment variable | ||
whose name is k1 and value is v1. If the value of `check_type` is **scope**, set the value of `check_mode` | ||
to **equals**. `check_content` is in the format of ["hostId1","hostId2"], indicating that the rule takes effect only | ||
on specified nodes. If no nodes are specified, the rule applies to all nodes of the project. | ||
+ `check_type` - (Required, String) Specifies the match type. The values can be **cmdLine**, **env** and **scope**. | ||
+ `check_mode` - (Required, String) Specifies the match condition. The values can be **contain** and **equals**. | ||
+ `check_content` - (Required, List) Specifies the matched value. This is a list of strings. | ||
|
||
* `name_rules` - (Required, List) Specifies the naming rules for discovered services and applications. | ||
The [object](#name_rules_object) structure is documented below. | ||
|
||
* `log_file_suffix` - (Required, List) Specifies the log file suffix. This is a list of strings. | ||
The values can be: **log**, **trace**, and **out**. | ||
|
||
* `detect_log_enabled` - (Optional, Bool) Specifies whether to enable log collection. The default value is true. | ||
|
||
* `priority` - (Optional, Int) Specifies the rule priority. Value range: 1 to 9999. The default value is 9999. | ||
|
||
* `discovery_rule_enabled` - (Optional, Bool) Specifies whether the rule is enabled. The default value is true. | ||
|
||
* `is_default_rule` - (Optional, Bool) Specifies whether the rule is the default one. The default value is false. | ||
|
||
* `log_path_rules` - (Optional, List) Specifies the log path configuration rule. If cmdLineHash is a fixed string, | ||
logs in the specified log path or log file are collected. Otherwise, only the files whose names end with | ||
.log or .trace are collected. If the value of `name_type` is **cmdLineHash**, args is in the format of ["00001"] and | ||
value is in the format of ["/xxx/xx.log"], indicating that the log path is /xxx/xx.log when the startup command is 00001. | ||
+ `name_type` - (Required, String) Specifies the value type, which can be **cmdLineHash**. | ||
+ `args` - (Required, List) Specifies the command. This is a list of strings. | ||
+ `value` - (Required, List) Specifies the log path. This is a list of strings. | ||
|
||
<a name="name_rules_object"></a> | ||
The `name_rules` block supports: | ||
|
||
* `service_name_rule` - (Required, List) Specifies the service name rule. If there are multiple objects in the array, | ||
the character strings extracted from these objects constitute the service name. If the value of `name_type` is | ||
**cmdLine**, `args` is in the format of ["start", "end"], indicating that the characters between start and end | ||
in the command are extracted. If the value of `name_type` is **env**, `args` is in the format of ["aa"], | ||
indicating that the environment variable named aa is extracted. If the value of `name_type` is **str**, `args` is in the | ||
format of ["fix"], indicating that the service name is suffixed with fix. If the value of `name_type` is | ||
**cmdLineHash**, `args` is in the format of ["0001"] and `value` is in the format of ["ser"], indicating that the | ||
service name is ser when the startup command is 0001. The [object](#basic_name_rule_object) structure is | ||
documented below. | ||
|
||
* `application_name_rule` - (Required, List) Specifies the application name rule. If the value of `name_type` is | ||
**cmdLine**, `args` is in the format of ["start", "end"], indicating that the characters between start and end in | ||
the command are extracted. If the value of `name_type` is **env**, `args` is in the format of ["aa"], indicating that | ||
the environment variable named aa is extracted. If the value of `name_type` is **str**, `args` is in the format of | ||
["fix"], indicating that the application name is suffixed with fix. If the value of `name_type` is **cmdLineHash**, | ||
`args` is in the format of ["0001"] and `value` is in the format of ["ser"], indicating that the application name is | ||
ser when the startup command is 0001. The [object](#basic_name_rule_object) structure is documented below. | ||
|
||
<a name="basic_name_rule_object"></a> | ||
The `service_name_rule` block and `application_name_rule` block support: | ||
|
||
* `name_type` - (Required, String) Specifies the value type. The value can be **cmdLineHash**, **cmdLine**, **env** | ||
and **str**. | ||
* `args` - (Required, List) Specifies the input value. | ||
* `value` - (Optional, List) Specifies the application name, which is mandatory only when the value of | ||
`name_type` is **cmdLineHash**. | ||
|
||
## Attribute Reference | ||
|
||
In addition to all arguments above, the following attributes are exported: | ||
|
||
* `id` - Indicates the resource ID of the service discovery rule. The value is the rule name. | ||
|
||
* `rule_id` - The rule ID in uuid format. | ||
|
||
## Timeouts | ||
|
||
This resource provides the following timeouts configuration options: | ||
|
||
* `create` - Default is 5 minutes. | ||
* `update` - Default is 5 minutes. | ||
* `delete` - Default is 5 minutes. | ||
|
||
## Import | ||
|
||
AOM service discovery rules can be imported using the `name`, e.g. | ||
|
||
```shell | ||
terraform import flexibleengine_aom_service_discovery_rule.alarm_rule rule_name | ||
``` |
228 changes: 228 additions & 0 deletions
228
flexibleengine/acceptance/resource_flexibleengine_aom_service_discovery_rule_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,228 @@ | ||
package acceptance | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
"time" | ||
|
||
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/services/acceptance" | ||
aomservice "github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/services/aom" | ||
|
||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform" | ||
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/config" | ||
|
||
aom "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/aom/v2/model" | ||
) | ||
|
||
func getServiceDiscoveryRuleResourceFunc(conf *config.Config, state *terraform.ResourceState) (interface{}, error) { | ||
c, err := conf.HcAomV2Client(OS_REGION_NAME) | ||
if err != nil { | ||
return nil, fmt.Errorf("error creating AOM client: %s", err) | ||
} | ||
|
||
// wait 30 seconds before listing the rule, to avoid error | ||
// lintignore:R018 | ||
time.Sleep(30 * time.Second) | ||
|
||
response, err := c.ListServiceDiscoveryRules(&aom.ListServiceDiscoveryRulesRequest{}) | ||
if err != nil { | ||
return nil, fmt.Errorf("error retrieving AOM service discovery rule: %s", state.Primary.ID) | ||
} | ||
|
||
allRules := *response.AppRules | ||
|
||
return aomservice.FilterRules(allRules, state.Primary.ID) | ||
} | ||
|
||
func TestAccAOMServiceDiscoveryRule_basic(t *testing.T) { | ||
var ar aom.QueryAlarmResult | ||
rName := acceptance.RandomAccResourceNameWithDash() | ||
rNameUpdate := rName + "-update" | ||
resourceName := "flexibleengine_aom_service_discovery_rule.test" | ||
|
||
rc := acceptance.InitResourceCheck( | ||
resourceName, | ||
&ar, | ||
getServiceDiscoveryRuleResourceFunc, | ||
) | ||
|
||
resource.ParallelTest(t, resource.TestCase{ | ||
PreCheck: func() { testAccPreCheck(t) }, | ||
ProviderFactories: TestAccProviderFactories, | ||
CheckDestroy: rc.CheckResourceDestroy(), | ||
Steps: []resource.TestStep{ | ||
{ | ||
Config: testAOMServiceDiscoveryRule_basic(rName), | ||
Check: resource.ComposeTestCheckFunc( | ||
rc.CheckResourceExists(), | ||
resource.TestCheckResourceAttr(resourceName, "name", rName), | ||
resource.TestCheckResourceAttr(resourceName, "priority", "9999"), | ||
resource.TestCheckResourceAttr(resourceName, "detect_log_enabled", "true"), | ||
resource.TestCheckResourceAttr(resourceName, "discovery_rule_enabled", "true"), | ||
resource.TestCheckResourceAttr(resourceName, "is_default_rule", "true"), | ||
resource.TestCheckResourceAttr(resourceName, "log_file_suffix.0", "log"), | ||
resource.TestCheckResourceAttr(resourceName, "service_type", "Python"), | ||
resource.TestCheckResourceAttr(resourceName, "discovery_rules.0.check_content.0", "python"), | ||
resource.TestCheckResourceAttr(resourceName, "log_path_rules.0.args.0", "python"), | ||
resource.TestCheckResourceAttr( | ||
resourceName, "name_rules.0.service_name_rule.0.args.0", "python"), | ||
resource.TestCheckResourceAttr( | ||
resourceName, "name_rules.0.application_name_rule.0.args.0", "python"), | ||
), | ||
}, | ||
{ | ||
ResourceName: resourceName, | ||
ImportState: true, | ||
ImportStateVerify: true, | ||
}, | ||
{ | ||
Config: testAOMServiceDiscoveryRule_update(rNameUpdate), | ||
Check: resource.ComposeTestCheckFunc( | ||
resource.TestCheckResourceAttr(resourceName, "name", rNameUpdate), | ||
resource.TestCheckResourceAttr(resourceName, "priority", "9998"), | ||
resource.TestCheckResourceAttr(resourceName, "detect_log_enabled", "false"), | ||
resource.TestCheckResourceAttr(resourceName, "discovery_rule_enabled", "false"), | ||
resource.TestCheckResourceAttr(resourceName, "is_default_rule", "false"), | ||
resource.TestCheckResourceAttr(resourceName, "log_file_suffix.0", "trace"), | ||
resource.TestCheckResourceAttr(resourceName, "service_type", "Java"), | ||
resource.TestCheckResourceAttr(resourceName, "discovery_rules.0.check_content.0", "java"), | ||
resource.TestCheckResourceAttr(resourceName, "log_path_rules.0.args.0", "java"), | ||
resource.TestCheckResourceAttr( | ||
resourceName, "name_rules.0.service_name_rule.0.args.0", "java"), | ||
resource.TestCheckResourceAttr( | ||
resourceName, "name_rules.0.application_name_rule.0.args.0", "java"), | ||
), | ||
}, | ||
{ | ||
Config: testAOMServiceDiscoveryRule_update2(rNameUpdate), | ||
Check: resource.ComposeTestCheckFunc( | ||
resource.TestCheckResourceAttr(resourceName, "name", rNameUpdate), | ||
resource.TestCheckResourceAttr(resourceName, "priority", "9998"), | ||
resource.TestCheckResourceAttr(resourceName, "detect_log_enabled", "false"), | ||
resource.TestCheckResourceAttr(resourceName, "discovery_rule_enabled", "false"), | ||
resource.TestCheckResourceAttr(resourceName, "is_default_rule", "false"), | ||
resource.TestCheckResourceAttr(resourceName, "log_file_suffix.0", "out"), | ||
resource.TestCheckResourceAttr(resourceName, "service_type", "Java"), | ||
resource.TestCheckResourceAttr(resourceName, "discovery_rules.0.check_content.0", "java"), | ||
resource.TestCheckResourceAttr(resourceName, "log_path_rules.0.args.0", "java"), | ||
resource.TestCheckResourceAttr( | ||
resourceName, "name_rules.0.service_name_rule.0.args.0", "java"), | ||
resource.TestCheckResourceAttr( | ||
resourceName, "name_rules.0.application_name_rule.0.args.0", "java"), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func testAOMServiceDiscoveryRule_basic(rName string) string { | ||
return fmt.Sprintf(` | ||
resource "flexibleengine_aom_service_discovery_rule" "test" { | ||
name = "%s" | ||
priority = 9999 | ||
detect_log_enabled = true | ||
discovery_rule_enabled = true | ||
is_default_rule = true | ||
log_file_suffix = ["log"] | ||
service_type = "Python" | ||
discovery_rules { | ||
check_content = ["python"] | ||
check_mode = "contain" | ||
check_type = "cmdLine" | ||
} | ||
log_path_rules { | ||
name_type = "cmdLineHash" | ||
args = ["python"] | ||
value = ["/tmp/log"] | ||
} | ||
name_rules { | ||
service_name_rule { | ||
name_type = "str" | ||
args = ["python"] | ||
} | ||
application_name_rule { | ||
name_type = "str" | ||
args = ["python"] | ||
} | ||
} | ||
} | ||
`, rName) | ||
} | ||
|
||
func testAOMServiceDiscoveryRule_update(rName string) string { | ||
return fmt.Sprintf(` | ||
resource "flexibleengine_aom_service_discovery_rule" "test" { | ||
name = "%s" | ||
priority = 9998 | ||
detect_log_enabled = false | ||
discovery_rule_enabled = false | ||
is_default_rule = false | ||
log_file_suffix = ["trace"] | ||
service_type = "Java" | ||
discovery_rules { | ||
check_content = ["java"] | ||
check_mode = "contain" | ||
check_type = "cmdLine" | ||
} | ||
log_path_rules { | ||
name_type = "cmdLineHash" | ||
args = ["java"] | ||
value = ["/tmp/log"] | ||
} | ||
name_rules { | ||
service_name_rule { | ||
name_type = "str" | ||
args = ["java"] | ||
} | ||
application_name_rule { | ||
name_type = "str" | ||
args = ["java"] | ||
} | ||
} | ||
} | ||
`, rName) | ||
} | ||
|
||
func testAOMServiceDiscoveryRule_update2(rName string) string { | ||
return fmt.Sprintf(` | ||
resource "flexibleengine_aom_service_discovery_rule" "test" { | ||
name = "%s" | ||
priority = 9998 | ||
detect_log_enabled = false | ||
discovery_rule_enabled = false | ||
is_default_rule = false | ||
log_file_suffix = ["out"] | ||
service_type = "Java" | ||
discovery_rules { | ||
check_content = ["java"] | ||
check_mode = "contain" | ||
check_type = "cmdLine" | ||
} | ||
log_path_rules { | ||
name_type = "cmdLineHash" | ||
args = ["java"] | ||
value = ["/tmp/log"] | ||
} | ||
name_rules { | ||
service_name_rule { | ||
name_type = "str" | ||
args = ["java"] | ||
} | ||
application_name_rule { | ||
name_type = "str" | ||
args = ["java"] | ||
} | ||
} | ||
} | ||
`, rName) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters