This commit is contained in:
asteam
2025-01-21 12:16:49 +03:00
parent 76ea459b3d
commit 60e23338ad
751 changed files with 17877 additions and 1908 deletions

View File

@@ -6,11 +6,11 @@ import (
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
)
func VINSDataSourceCheckPresence(ctx context.Context, vinsId uint64, c *decort.DecortClient) (*vins.RecordVINS, diag.Diagnostics) {
func VINSDataSourceCheckPresence(ctx context.Context, vinsId uint64, c *client.Client) (*vins.RecordVINS, diag.Diagnostics) {
tflog.Info(ctx, fmt.Sprintf("VINSDataSourceCheckPresence: Get info about vins with ID - %v", vinsId))
diags := diag.Diagnostics{}

View File

@@ -6,11 +6,11 @@ import (
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
)
func VINSAuditsDataSourceCheckPresence(ctx context.Context, vinsId uint64, c *decort.DecortClient) (*vins.ListAudits, diag.Diagnostics) {
func VINSAuditsDataSourceCheckPresence(ctx context.Context, vinsId uint64, c *client.Client) (*vins.ListAudits, diag.Diagnostics) {
tflog.Info(ctx, fmt.Sprintf("VINSAuditsDataSourceCheckPresence: Get info about vins audit with vins ID - %v", vinsId))
diags := diag.Diagnostics{}

View File

@@ -6,11 +6,11 @@ import (
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
)
func VINSExtNetListDataSourceCheckPresence(ctx context.Context, vinsId uint64, c *decort.DecortClient) (*vins.ListExtNets, diag.Diagnostics) {
func VINSExtNetListDataSourceCheckPresence(ctx context.Context, vinsId uint64, c *client.Client) (*vins.ListExtNets, diag.Diagnostics) {
tflog.Info(ctx, fmt.Sprintf("VINSExtNetListDataSourceCheckPresence: Get info about vins audit with vins ID - %v", vinsId))
diags := diag.Diagnostics{}

View File

@@ -6,11 +6,11 @@ import (
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
)
func VINSIPListDataSourceCheckPresence(ctx context.Context, vinsId uint64, c *decort.DecortClient) (*vins.ListIPs, diag.Diagnostics) {
func VINSIPListDataSourceCheckPresence(ctx context.Context, vinsId uint64, c *client.Client) (*vins.ListIPs, diag.Diagnostics) {
tflog.Info(ctx, fmt.Sprintf("VINSIPListDataSourceCheckPresence: Get info about vins audit with vins ID - %v", vinsId))
diags := diag.Diagnostics{}

View File

@@ -5,12 +5,12 @@ import (
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/vins/models"
)
func VINSListDataSourceCheckPresence(ctx context.Context, plan *models.DataSourceVINSListModel, c *decort.DecortClient) (*vins.ListVINS, diag.Diagnostics) {
func VINSListDataSourceCheckPresence(ctx context.Context, plan *models.DataSourceVINSListModel, c *client.Client) (*vins.ListVINS, diag.Diagnostics) {
tflog.Info(ctx, "VINSListDataSourceCheckPresence: Get info about vins list")
diags := diag.Diagnostics{}

View File

@@ -5,12 +5,12 @@ import (
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/vins/models"
)
func VINSListDeletedDataSourceCheckPresence(ctx context.Context, plan *models.DataSourceVINSListDeletedModel, c *decort.DecortClient) (*vins.ListVINS, diag.Diagnostics) {
func VINSListDeletedDataSourceCheckPresence(ctx context.Context, plan *models.DataSourceVINSListDeletedModel, c *client.Client) (*vins.ListVINS, diag.Diagnostics) {
tflog.Info(ctx, "VINSListDeletedDataSourceCheckPresence: Get info about vins list")
diags := diag.Diagnostics{}

View File

@@ -5,11 +5,11 @@ import (
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
)
func VINSNATRuleListDataSourceCheckPresence(ctx context.Context, vinsId uint64, c *decort.DecortClient) (*vins.ListNATRules, diag.Diagnostics) {
func VINSNATRuleListDataSourceCheckPresence(ctx context.Context, vinsId uint64, c *client.Client) (*vins.ListNATRules, diag.Diagnostics) {
tflog.Info(ctx, "VINSNATRuleListDataSourceCheckPresence: Get info about vins nat rule list")
diags := diag.Diagnostics{}

View File

@@ -6,11 +6,11 @@ import (
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
)
func VINSStaticRouteDataSourceCheckPresence(ctx context.Context, vinsId, routeId uint64, c *decort.DecortClient) (*vins.ItemRoutes, diag.Diagnostics) {
func VINSStaticRouteDataSourceCheckPresence(ctx context.Context, vinsId, routeId uint64, c *client.Client) (*vins.ItemRoutes, diag.Diagnostics) {
tflog.Info(ctx, "VINSStaticRouteDataSourceCheckPresence: Get info about vins static route", map[string]any{
"vins_id": vinsId,
"route_id": routeId,

View File

@@ -5,11 +5,11 @@ import (
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
)
func VINSStaticRouteListDataSourceCheckPresence(ctx context.Context, vinsId uint64, c *decort.DecortClient) (*vins.ListStaticRoutes, diag.Diagnostics) {
func VINSStaticRouteListDataSourceCheckPresence(ctx context.Context, vinsId uint64, c *client.Client) (*vins.ListStaticRoutes, diag.Diagnostics) {
tflog.Info(ctx, "VINSStaticRouteListDataSourceCheckPresence: Get info about vins static route list")
diags := diag.Diagnostics{}

View File

@@ -11,13 +11,13 @@ import (
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/hashicorp/terraform-plugin-framework/types/basetypes"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/vins/models"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/status"
)
func VINSResourceCheckPresence(ctx context.Context, vinsId uint64, c *decort.DecortClient) (*vins.RecordVINS, diag.Diagnostics) {
func VINSResourceCheckPresence(ctx context.Context, vinsId uint64, c *client.Client) (*vins.RecordVINS, diag.Diagnostics) {
tflog.Info(ctx, fmt.Sprintf("VINSResourceCheckPresence: Get info about vins with ID - %v", vinsId))
diags := diag.Diagnostics{}
@@ -35,7 +35,7 @@ func VINSResourceCheckPresence(ctx context.Context, vinsId uint64, c *decort.Dec
// CreateInRGResourceVINS creates vins in resource group based on plan.
// Returns vins_id for created vins and errors in case of failures.
func CreateInRGResourceVINS(ctx context.Context, plan *models.ResourceVINSModel, c *decort.DecortClient) (uint64, diag.Diagnostics) {
func CreateInRGResourceVINS(ctx context.Context, plan *models.ResourceVINSModel, c *client.Client) (uint64, diag.Diagnostics) {
tflog.Info(ctx, fmt.Sprintf("Start CreateInRGResourceVINS: vins_name %s", plan.Name.ValueString()))
diags := diag.Diagnostics{}
@@ -104,7 +104,7 @@ func CreateInRGResourceVINS(ctx context.Context, plan *models.ResourceVINSModel,
// CreateInAccountResourceVINS creates vins in account based on plan.
// Returns vins_id for created vins and errors in case of failures.
func CreateInAccountResourceVINS(ctx context.Context, plan *models.ResourceVINSModel, c *decort.DecortClient) (uint64, diag.Diagnostics) {
func CreateInAccountResourceVINS(ctx context.Context, plan *models.ResourceVINSModel, c *client.Client) (uint64, diag.Diagnostics) {
tflog.Info(ctx, fmt.Sprintf("Start CreateInAccountResourceVINS: vins_name %s", plan.Name.ValueString()))
diags := diag.Diagnostics{}
@@ -157,7 +157,7 @@ func CreateInAccountResourceVINS(ctx context.Context, plan *models.ResourceVINSM
// IPCreateVINS reserves ips that user specified in ip field for created resource.
// In case of failure returns warnings.
func IPCreateVINS(ctx context.Context, vinsId uint64, plan *models.ResourceVINSModel, c *decort.DecortClient) diag.Diagnostics {
func IPCreateVINS(ctx context.Context, vinsId uint64, plan *models.ResourceVINSModel, c *client.Client) diag.Diagnostics {
diags := diag.Diagnostics{}
// plan.IP is not null as it was checked before call
@@ -205,7 +205,7 @@ func IPCreateVINS(ctx context.Context, vinsId uint64, plan *models.ResourceVINSM
// IPUpdateVINS reserves/releases ips that user specified in ip field for updated resource.
// In case of failure returns errors.
func IPUpdateVINS(ctx context.Context, vinsId uint64, plan, state *models.ResourceVINSModel, c *decort.DecortClient) diag.Diagnostics {
func IPUpdateVINS(ctx context.Context, vinsId uint64, plan, state *models.ResourceVINSModel, c *client.Client) diag.Diagnostics {
tflog.Info(ctx, "Start IPUpdateVINS: new ip specified", map[string]any{"vins_id": vinsId})
diags := diag.Diagnostics{}
@@ -309,7 +309,7 @@ func IPUpdateVINS(ctx context.Context, vinsId uint64, plan, state *models.Resour
// ExtNetUpdateVINS updates ext_net_id and/or ext_net_ip that user specified in ext_net block for updated resource.
// In case of failure returns errors.
func ExtNetUpdateVINS(ctx context.Context, vinsId uint64, plan, state *models.ResourceVINSModel, c *decort.DecortClient) diag.Diagnostics {
func ExtNetUpdateVINS(ctx context.Context, vinsId uint64, plan, state *models.ResourceVINSModel, c *client.Client) diag.Diagnostics {
tflog.Info(ctx, "Start ExtNetUpdateVINS: new ext_net specified", map[string]any{
"vins_id": vinsId,
})
@@ -363,7 +363,7 @@ func ExtNetUpdateVINS(ctx context.Context, vinsId uint64, plan, state *models.Re
// NATRuleCreateVINS adds nat rules that user specified in nat_rule field for created resource.
// In case of failure returns warnings.
func NATRuleCreateVINS(ctx context.Context, vinsId uint64, plan *models.ResourceVINSModel, c *decort.DecortClient) diag.Diagnostics {
func NATRuleCreateVINS(ctx context.Context, vinsId uint64, plan *models.ResourceVINSModel, c *client.Client) diag.Diagnostics {
diags := diag.Diagnostics{}
// plan.NatRule is not null as it was checked before call
@@ -410,7 +410,7 @@ func NATRuleCreateVINS(ctx context.Context, vinsId uint64, plan *models.Resource
// NATRuleUpdateVINS adds/deleted nat rules that user specified in nat_rule field for updated resource.
// In case of failure returns errors.
func NATRuleUpdateVINS(ctx context.Context, vinsId uint64, plan, state *models.ResourceVINSModel, c *decort.DecortClient) diag.Diagnostics {
func NATRuleUpdateVINS(ctx context.Context, vinsId uint64, plan, state *models.ResourceVINSModel, c *client.Client) diag.Diagnostics {
tflog.Info(ctx, "Start NATRuleUpdateVINS: new natRule specified", map[string]any{"vins_id": vinsId})
diags := diag.Diagnostics{}
@@ -511,7 +511,7 @@ func NATRuleUpdateVINS(ctx context.Context, vinsId uint64, plan, state *models.R
// VINSReadStatus loads vins resource by ids id, gets it current status. Performs restore and enable if needed for
// Deleted status.
// In case of failure returns errors.
func VINSReadStatus(ctx context.Context, state *models.ResourceVINSModel, c *decort.DecortClient) diag.Diagnostics {
func VINSReadStatus(ctx context.Context, state *models.ResourceVINSModel, c *client.Client) diag.Diagnostics {
tflog.Info(ctx, "VINSReadStatus: Read status vins with ID", map[string]any{"vins_id": state.Id.ValueString()})
diags := diag.Diagnostics{}
@@ -599,7 +599,7 @@ func VINSReadStatus(ctx context.Context, state *models.ResourceVINSModel, c *dec
// RestoreVINS performs vins Restore request.
// Returns error in case of failures.
func RestoreVINS(ctx context.Context, vinsId uint64, c *decort.DecortClient) diag.Diagnostics {
func RestoreVINS(ctx context.Context, vinsId uint64, c *client.Client) diag.Diagnostics {
diags := diag.Diagnostics{}
tflog.Info(ctx, "RestoreVINS: before calling CloudAPI().VINS().Restore", map[string]any{"vinsId": vinsId, "req": vins.RestoreRequest{VINSID: vinsId}})
@@ -619,7 +619,7 @@ func RestoreVINS(ctx context.Context, vinsId uint64, c *decort.DecortClient) dia
// DisableVINS performs vins Disable request.
// Returns error in case of failures.
func DisableVINS(ctx context.Context, vinsId uint64, c *decort.DecortClient) diag.Diagnostics {
func DisableVINS(ctx context.Context, vinsId uint64, c *client.Client) diag.Diagnostics {
diags := diag.Diagnostics{}
tflog.Info(ctx, "DisableVINS: before calling CloudAPI().VINS().Disable", map[string]any{"vinsId": vinsId})
@@ -639,7 +639,7 @@ func DisableVINS(ctx context.Context, vinsId uint64, c *decort.DecortClient) dia
// EnableVINS performs vins Enable request.
// Returns error in case of failures.
func EnableVINS(ctx context.Context, vinsId uint64, c *decort.DecortClient) diag.Diagnostics {
func EnableVINS(ctx context.Context, vinsId uint64, c *client.Client) diag.Diagnostics {
diags := diag.Diagnostics{}
tflog.Info(ctx, "EnableVINS: before calling CloudAPI().VINS().Enable", map[string]any{"vinsId": vinsId})
@@ -659,7 +659,7 @@ func EnableVINS(ctx context.Context, vinsId uint64, c *decort.DecortClient) diag
// EnableDisableUpdateVINS performs vins Enable/disable request.
// Returns errors in case of failures.
func EnableDisableUpdateVINS(ctx context.Context, vinsId uint64, plan *models.ResourceVINSModel, c *decort.DecortClient) diag.Diagnostics {
func EnableDisableUpdateVINS(ctx context.Context, vinsId uint64, plan *models.ResourceVINSModel, c *client.Client) diag.Diagnostics {
diags := diag.Diagnostics{}
enable := plan.Enable.ValueBool()
tflog.Info(ctx, "Start EnableDisableUpdateVINS", map[string]any{"vinsId": vinsId, "enable": enable})
@@ -679,7 +679,7 @@ func EnableDisableUpdateVINS(ctx context.Context, vinsId uint64, plan *models.Re
// VnfdevRestartUpdateVINS restarts vnf_dev for vins.
// Returns error in case of failures.
func VnfdevRestartUpdateVINS(ctx context.Context, vinsId uint64, c *decort.DecortClient) diag.Diagnostics {
func VnfdevRestartUpdateVINS(ctx context.Context, vinsId uint64, c *client.Client) diag.Diagnostics {
diags := diag.Diagnostics{}
tflog.Info(ctx, "VnfdevRestartUpdateVINS: before calling CloudAPI().VINS().VNFDevRestart", map[string]any{"vinsId": vinsId})
@@ -699,7 +699,7 @@ func VnfdevRestartUpdateVINS(ctx context.Context, vinsId uint64, c *decort.Decor
// VnfdevRedeployUpdateVINS redeploys vnf_dev for vins.
// Returns error in case of failures.
func VnfdevRedeployUpdateVINS(ctx context.Context, vinsId uint64, c *decort.DecortClient) diag.Diagnostics {
func VnfdevRedeployUpdateVINS(ctx context.Context, vinsId uint64, c *client.Client) diag.Diagnostics {
diags := diag.Diagnostics{}
tflog.Info(ctx, "VnfdevRedeployUpdateVINS: before calling CloudAPI().VINS().VNFDevRedeploy", map[string]any{"vinsId": vinsId})
@@ -719,7 +719,7 @@ func VnfdevRedeployUpdateVINS(ctx context.Context, vinsId uint64, c *decort.Deco
// UpdateDNSlistVINS apply new DNS list in VINS
// Returns error in case of failures.
func UpdateDNSlistVINS(ctx context.Context, vinsId uint64, plan *models.ResourceVINSModel, c *decort.DecortClient) diag.Diagnostics {
func UpdateDNSlistVINS(ctx context.Context, vinsId uint64, plan *models.ResourceVINSModel, c *client.Client) diag.Diagnostics {
diags := diag.Diagnostics{}
req := vins.DNSApplyRequest{

View File

@@ -8,12 +8,12 @@ import (
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-log/tflog"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/client"
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/vins/models"
)
func VINSStaticRouteResourceCheckPresence(ctx context.Context, vinsId, routeId uint64, c *decort.DecortClient) (*vins.ItemRoutes, diag.Diagnostics) {
func VINSStaticRouteResourceCheckPresence(ctx context.Context, vinsId, routeId uint64, c *client.Client) (*vins.ItemRoutes, diag.Diagnostics) {
tflog.Info(ctx, "VINSStaticRouteResourceCheckPresence: Get info about vins static route")
diags := diag.Diagnostics{}
@@ -79,7 +79,7 @@ func GetVinsIDAndRouteID(ctx context.Context, plan *models.ResourceVINSStaticRou
return vinsId, routeId, nil
}
func GetStaticRouteID(ctx context.Context, plan *models.ResourceVINSStaticRouteModel, c *decort.DecortClient) (uint64, diag.Diagnostics) {
func GetStaticRouteID(ctx context.Context, plan *models.ResourceVINSStaticRouteModel, c *client.Client) (uint64, diag.Diagnostics) {
tflog.Info(ctx, "Start GetStaticRouteID")
diags := diag.Diagnostics{}
@@ -115,75 +115,6 @@ func GetStaticRouteID(ctx context.Context, plan *models.ResourceVINSStaticRouteM
return 0, diags
}
func UpdateComputeIDsVINSStaticRoute(ctx context.Context, plan, state *models.ResourceVINSStaticRouteModel, c *decort.DecortClient) diag.Diagnostics {
tflog.Info(ctx, "Start UpdateComputeIDsVINSStaticRoute", map[string]any{"id": plan.Id.ValueString()})
vinsId, routeId, diags := GetVinsIDAndRouteID(ctx, plan)
if diags.HasError() {
return diags
}
computesPlan := make([]uint64, 0, len(plan.ComputeIDs.Elements()))
diags = plan.ComputeIDs.ElementsAs(ctx, &computesPlan, false)
if diags.HasError() {
tflog.Error(ctx, "UpdateComputeIDsVINSStaticRoute: cannot populate computes with plan.ComputeIDs List elements")
return diags
}
computesState := make([]uint64, 0, len(state.ComputeIDs.Elements()))
diags = state.ComputeIDs.ElementsAs(ctx, &computesState, false)
if diags.HasError() {
tflog.Error(ctx, "UpdateComputeIDsVINSStaticRoute: cannot populate computes with state.ComputeIDs List elements")
return diags
}
var deletedComputes []uint64
for _, comp := range computesState {
if !contains(comp, computesPlan) {
deletedComputes = append(deletedComputes, comp)
}
}
if len(deletedComputes) != 0 {
revokeReq := vins.StaticRouteAccessRevokeRequest{
VINSID: vinsId,
RouteId: routeId,
ComputeIds: deletedComputes,
}
tflog.Info(ctx, "UpdateComputeIDsVINSStaticRoute: before call to CloudAPI().VINS().StaticRouteAccessRevoke", map[string]any{"revokeReq": revokeReq})
_, err := c.CloudAPI().VINS().StaticRouteAccessRevoke(ctx, revokeReq)
if err != nil {
diags.AddError(
fmt.Sprintf("UpdateComputeIDsVINSStaticRoute: Cannot revoke static routes for vins with id %v", vinsId),
err.Error())
}
}
var addedComputes []uint64
for _, comp := range computesPlan {
if !contains(comp, computesState) {
addedComputes = append(addedComputes, comp)
}
}
if len(addedComputes) != 0 {
grantReq := vins.StaticRouteAccessGrantRequest{
VINSID: vinsId,
RouteId: routeId,
ComputeIds: addedComputes,
}
tflog.Info(ctx, "UpdateComputeIDsVINSStaticRoute: before call to CloudAPI().VINS().StaticRouteAccessGrant", map[string]any{"grantReq": grantReq})
_, err := c.CloudAPI().VINS().StaticRouteAccessGrant(ctx, grantReq)
if err != nil {
diags.AddError(
fmt.Sprintf("UpdateComputeIDsVINSStaticRoute: Cannot grant static routes for vins with id %v", vinsId),
err.Error())
}
}
return diags
}
// contains returns true if slice contains element. Otherwise it returns false.
func contains(element uint64, slice []uint64) bool {
for _, s := range slice {