diff --git a/sysdig/data_source_agent_access_keys.go b/sysdig/data_source_agent_access_keys.go index 3a089957..bf175409 100644 --- a/sysdig/data_source_agent_access_keys.go +++ b/sysdig/data_source_agent_access_keys.go @@ -2,6 +2,7 @@ package sysdig import ( "context" + "net/http" "strconv" "time" @@ -68,8 +69,12 @@ func dataSourceSysdigAgentAccessKeyRead(ctx context.Context, d *schema.ResourceD } agentKeyID := d.Get("id").(int) - agentAccessKey, err := client.GetAgentAccessKeyByID(ctx, strconv.Itoa(agentKeyID)) + agentAccessKey, statusCode, err := client.GetAgentAccessKeyByID(ctx, strconv.Itoa(agentKeyID)) if err != nil { + if statusCode == http.StatusNotFound { + d.SetId("") + return nil + } return diag.FromErr(err) } d.SetId(strconv.Itoa(agentAccessKey.ID)) diff --git a/sysdig/data_source_sysdig_monitor_team.go b/sysdig/data_source_sysdig_monitor_team.go index 7cfd8cf0..dfe48a4e 100644 --- a/sysdig/data_source_sysdig_monitor_team.go +++ b/sysdig/data_source_sysdig_monitor_team.go @@ -2,6 +2,7 @@ package sysdig import ( "context" + "net/http" "strconv" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" @@ -120,8 +121,12 @@ func dataSourceSysdigMonitorTeamRead(ctx context.Context, d *schema.ResourceData return diag.FromErr(err) } - team, err := client.GetTeamByID(ctx, id) + team, statusCode, err := client.GetTeamByID(ctx, id) if err != nil { + if statusCode == http.StatusNotFound { + d.SetId("") + return nil + } return diag.FromErr(err) } diff --git a/sysdig/data_source_sysdig_secure_team.go b/sysdig/data_source_sysdig_secure_team.go index e63ce9c9..91219adb 100644 --- a/sysdig/data_source_sysdig_secure_team.go +++ b/sysdig/data_source_sysdig_secure_team.go @@ -2,6 +2,7 @@ package sysdig import ( "context" + "net/http" "strconv" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" @@ -99,8 +100,12 @@ func dataSourceSysdigSecureTeamRead(ctx context.Context, d *schema.ResourceData, return diag.FromErr(err) } - team, err := client.GetTeamByID(ctx, id) + team, statusCode, err := client.GetTeamByID(ctx, id) if err != nil { + if statusCode == http.StatusNotFound { + d.SetId("") + return nil + } return diag.FromErr(err) } diff --git a/sysdig/data_source_sysdig_user.go b/sysdig/data_source_sysdig_user.go index 42a21d4d..505dd219 100644 --- a/sysdig/data_source_sysdig_user.go +++ b/sysdig/data_source_sysdig_user.go @@ -2,6 +2,7 @@ package sysdig import ( "context" + "net/http" "strconv" "time" @@ -50,9 +51,14 @@ func dataSourceSysdigUserRead(ctx context.Context, d *schema.ResourceData, meta return diag.FromErr(err) } - u, err := client.GetUserByEmail(ctx, d.Get("email").(string)) + u, statusCode, err := client.GetUserByEmail(ctx, d.Get("email").(string)) if err != nil { - return diag.FromErr(err) + if statusCode == http.StatusNotFound { + d.SetId("") + return nil + } else { + return diag.FromErr(err) + } } d.SetId(strconv.Itoa(u.ID)) diff --git a/sysdig/internal/client/v2/agentaccesskey.go b/sysdig/internal/client/v2/agentaccesskey.go index bb2926bc..197d098a 100644 --- a/sysdig/internal/client/v2/agentaccesskey.go +++ b/sysdig/internal/client/v2/agentaccesskey.go @@ -15,16 +15,16 @@ const ( type AgentAccessKeyInterface interface { Base - GetAgentAccessKeyByID(ctx context.Context, id string) (*AgentAccessKey, error) + GetAgentAccessKeyByID(ctx context.Context, id string) (*AgentAccessKey, int, error) CreateAgentAccessKey(ctx context.Context, agentAccessKey *AgentAccessKey) (*AgentAccessKey, error) DeleteAgentAccessKey(ctx context.Context, id string) error UpdateAgentAccessKey(ctx context.Context, agentAccessKey *AgentAccessKey, id string) (*AgentAccessKey, error) } -func (c *Client) GetAgentAccessKeyByID(ctx context.Context, id string) (accessKey *AgentAccessKey, err error) { +func (c *Client) GetAgentAccessKeyByID(ctx context.Context, id string) (accessKey *AgentAccessKey, statusCode int, err error) { response, err := c.requester.Request(ctx, http.MethodGet, c.getAgentAccessKeyByIDUrl(id), nil) if err != nil { - return nil, err + return nil, 0, err } defer func() { if dErr := response.Body.Close(); dErr != nil { @@ -34,10 +34,11 @@ func (c *Client) GetAgentAccessKeyByID(ctx context.Context, id string) (accessKe if response.StatusCode != http.StatusOK { err = c.ErrorFromResponse(response) - return nil, err + return nil, response.StatusCode, err } - return Unmarshal[*AgentAccessKey](response.Body) + result, err := Unmarshal[*AgentAccessKey](response.Body) + return result, response.StatusCode, err } func (c *Client) CreateAgentAccessKey(ctx context.Context, agentAccessKey *AgentAccessKey) (createdAccessKey *AgentAccessKey, err error) { diff --git a/sysdig/internal/client/v2/teams.go b/sysdig/internal/client/v2/teams.go index 4783dc4f..e91d539e 100644 --- a/sysdig/internal/client/v2/teams.go +++ b/sysdig/internal/client/v2/teams.go @@ -15,7 +15,7 @@ const ( type TeamInterface interface { Base GetUserIDByEmail(ctx context.Context, userRoles []UserRoles) ([]UserRoles, error) - GetTeamByID(ctx context.Context, id int) (t Team, err error) + GetTeamByID(ctx context.Context, id int) (t Team, statusCode int, err error) CreateTeam(ctx context.Context, tRequest Team) (t Team, err error) UpdateTeam(ctx context.Context, tRequest Team) (t Team, err error) DeleteTeam(ctx context.Context, id int) error @@ -66,10 +66,10 @@ func (c *Client) GetUserIDByEmail(ctx context.Context, userRoles []UserRoles) (m return modifiedUserRoles, nil } -func (c *Client) GetTeamByID(ctx context.Context, id int) (team Team, err error) { +func (c *Client) GetTeamByID(ctx context.Context, id int) (team Team, statusCode int, err error) { response, err := c.requester.Request(ctx, http.MethodGet, c.getTeamURL(id), nil) if err != nil { - return Team{}, err + return Team{}, 0, err } defer func() { if dErr := response.Body.Close(); dErr != nil { @@ -78,15 +78,15 @@ func (c *Client) GetTeamByID(ctx context.Context, id int) (team Team, err error) }() if response.StatusCode != http.StatusOK { - return Team{}, c.ErrorFromResponse(response) + return Team{}, response.StatusCode, c.ErrorFromResponse(response) } wrapper, err := Unmarshal[teamWrapper](response.Body) if err != nil { - return Team{}, c.ErrorFromResponse(response) + return Team{}, response.StatusCode, c.ErrorFromResponse(response) } - return wrapper.Team, err + return wrapper.Team, response.StatusCode, err } func (c *Client) CreateTeam(ctx context.Context, team Team) (createdTeam Team, err error) { diff --git a/sysdig/internal/client/v2/users.go b/sysdig/internal/client/v2/users.go index 28e349fe..778a38b3 100644 --- a/sysdig/internal/client/v2/users.go +++ b/sysdig/internal/client/v2/users.go @@ -17,19 +17,19 @@ const ( type UserInterface interface { Base - GetUserByID(ctx context.Context, id int) (*User, error) - GetUserByUsername(ctx context.Context, username string) (*User, error) - GetUserByEmail(ctx context.Context, email string) (*User, error) + GetUserByID(ctx context.Context, id int) (*User, int, error) + GetUserByUsername(ctx context.Context, username string) (*User, int, error) + GetUserByEmail(ctx context.Context, email string) (*User, int, error) CreateUser(ctx context.Context, user *User) (*User, error) UpdateUser(ctx context.Context, user *User) (*User, error) DeleteUser(ctx context.Context, id int) error GetCurrentUser(ctx context.Context) (u *User, err error) } -func (c *Client) GetUserByID(ctx context.Context, id int) (user *User, error error) { +func (c *Client) GetUserByID(ctx context.Context, id int) (user *User, statusCode int, error error) { response, err := c.requester.Request(ctx, http.MethodGet, c.getUserURL(id), nil) if err != nil { - return nil, err + return nil, 0, err } defer func() { if dErr := response.Body.Close(); dErr != nil { @@ -38,21 +38,21 @@ func (c *Client) GetUserByID(ctx context.Context, id int) (user *User, error err }() if response.StatusCode != http.StatusOK { - return nil, c.ErrorFromResponse(response) + return nil, response.StatusCode, c.ErrorFromResponse(response) } wrapper, err := Unmarshal[userWrapper](response.Body) if err != nil { - return nil, err + return nil, 0, err } - return &wrapper.User, nil + return &wrapper.User, response.StatusCode, nil } -func (c *Client) GetUserByUsername(ctx context.Context, username string) (user *User, err error) { +func (c *Client) GetUserByUsername(ctx context.Context, username string) (user *User, statusCode int, err error) { response, err := c.requester.Request(ctx, http.MethodGet, c.getUserByUsernameURL(username), nil) if err != nil { - return nil, err + return nil, 0, err } defer func() { if dErr := response.Body.Close(); dErr != nil { @@ -61,18 +61,18 @@ func (c *Client) GetUserByUsername(ctx context.Context, username string) (user * }() if response.StatusCode != http.StatusOK { - return nil, c.ErrorFromResponse(response) + return nil, response.StatusCode, c.ErrorFromResponse(response) } wrapper, err := Unmarshal[userWrapper](response.Body) if err != nil { - return nil, err + return nil, 0, err } - return &wrapper.User, nil + return &wrapper.User, response.StatusCode, nil } -func (c *Client) GetUserByEmail(ctx context.Context, email string) (*User, error) { +func (c *Client) GetUserByEmail(ctx context.Context, email string) (*User, int, error) { return c.GetUserByUsername(ctx, email) } diff --git a/sysdig/resource_sysdig_agent_access_key.go b/sysdig/resource_sysdig_agent_access_key.go index b21d3947..6faef8fe 100644 --- a/sysdig/resource_sysdig_agent_access_key.go +++ b/sysdig/resource_sysdig_agent_access_key.go @@ -3,6 +3,7 @@ package sysdig import ( "context" "fmt" + "net/http" "strconv" "time" @@ -157,8 +158,12 @@ func resourceSysdigAgentAccessKeyRead(ctx context.Context, d *schema.ResourceDat agentKeyID := d.Id() - agentAccessKey, err := client.GetAgentAccessKeyByID(ctx, agentKeyID) + agentAccessKey, statusCode, err := client.GetAgentAccessKeyByID(ctx, agentKeyID) if err != nil { + if statusCode == http.StatusNotFound { + d.SetId("") + return nil + } return diag.FromErr(err) } diff --git a/sysdig/resource_sysdig_monitor_team.go b/sysdig/resource_sysdig_monitor_team.go index e0691319..83e80cd4 100644 --- a/sysdig/resource_sysdig_monitor_team.go +++ b/sysdig/resource_sysdig_monitor_team.go @@ -2,6 +2,7 @@ package sysdig import ( "context" + "net/http" "strconv" "time" @@ -183,9 +184,12 @@ func resourceSysdigMonitorTeamRead(ctx context.Context, d *schema.ResourceData, } id, _ := strconv.Atoi(d.Id()) - t, err := client.GetTeamByID(ctx, id) + t, statusCode, err := client.GetTeamByID(ctx, id) if err != nil { - d.SetId("") + if statusCode == http.StatusNotFound { + d.SetId("") + return nil + } return diag.FromErr(err) } diff --git a/sysdig/resource_sysdig_secure_custom_policy.go b/sysdig/resource_sysdig_secure_custom_policy.go index d652deae..c750cf1b 100644 --- a/sysdig/resource_sysdig_secure_custom_policy.go +++ b/sysdig/resource_sysdig_secure_custom_policy.go @@ -193,6 +193,7 @@ func resourceSysdigCustomPolicyRead(ctx context.Context, d *schema.ResourceData, if err != nil { if statusCode == http.StatusNotFound { d.SetId("") + return nil } else { return diag.FromErr(err) } diff --git a/sysdig/resource_sysdig_secure_managed_policy.go b/sysdig/resource_sysdig_secure_managed_policy.go index 0b753798..7ee57e73 100644 --- a/sysdig/resource_sysdig_secure_managed_policy.go +++ b/sysdig/resource_sysdig_secure_managed_policy.go @@ -115,6 +115,7 @@ func resourceSysdigManagedPolicyRead(ctx context.Context, d *schema.ResourceData if err != nil { if statusCode == http.StatusNotFound { d.SetId("") + return nil } else { return diag.FromErr(err) } @@ -139,6 +140,7 @@ func resourceSysdigManagedPolicyDelete(ctx context.Context, d *schema.ResourceDa if err != nil { if statusCode == http.StatusNotFound { d.SetId("") + return nil } else { return diag.FromErr(err) } @@ -176,6 +178,7 @@ func resourceSysdigManagedPolicyUpdate(ctx context.Context, d *schema.ResourceDa if err != nil { if statusCode == http.StatusNotFound { d.SetId("") + return nil } else { return diag.FromErr(err) } diff --git a/sysdig/resource_sysdig_secure_rule_container.go b/sysdig/resource_sysdig_secure_rule_container.go index b5c33ed5..c3cccef9 100644 --- a/sysdig/resource_sysdig_secure_rule_container.go +++ b/sysdig/resource_sysdig_secure_rule_container.go @@ -86,6 +86,7 @@ func resourceSysdigRuleContainerRead(ctx context.Context, d *schema.ResourceData if err != nil { if statusCode == http.StatusNotFound { d.SetId("") + return nil } else { return diag.FromErr(err) } diff --git a/sysdig/resource_sysdig_secure_rule_falco.go b/sysdig/resource_sysdig_secure_rule_falco.go index ea6e7c63..2ae744c1 100644 --- a/sysdig/resource_sysdig_secure_rule_falco.go +++ b/sysdig/resource_sysdig_secure_rule_falco.go @@ -140,6 +140,7 @@ func resourceSysdigRuleFalcoRead(ctx context.Context, d *schema.ResourceData, me if err != nil { if statusCode == http.StatusNotFound { d.SetId("") + return nil } else { return diag.FromErr(err) } diff --git a/sysdig/resource_sysdig_secure_rule_filesystem.go b/sysdig/resource_sysdig_secure_rule_filesystem.go index 17e65ce2..2ba5810a 100644 --- a/sysdig/resource_sysdig_secure_rule_filesystem.go +++ b/sysdig/resource_sysdig_secure_rule_filesystem.go @@ -117,6 +117,7 @@ func resourceSysdigRuleFilesystemRead(ctx context.Context, d *schema.ResourceDat if err != nil { if statusCode == http.StatusNotFound { d.SetId("") + return nil } else { return diag.FromErr(err) } diff --git a/sysdig/resource_sysdig_secure_rule_network.go b/sysdig/resource_sysdig_secure_rule_network.go index 4ed87a35..8c8d95e0 100644 --- a/sysdig/resource_sysdig_secure_rule_network.go +++ b/sysdig/resource_sysdig_secure_rule_network.go @@ -125,6 +125,7 @@ func resourceSysdigRuleNetworkRead(ctx context.Context, d *schema.ResourceData, if err != nil { if statusCode == http.StatusNotFound { d.SetId("") + return nil } else { return diag.FromErr(err) } diff --git a/sysdig/resource_sysdig_secure_rule_process.go b/sysdig/resource_sysdig_secure_rule_process.go index 80c327bd..ccba057f 100644 --- a/sysdig/resource_sysdig_secure_rule_process.go +++ b/sysdig/resource_sysdig_secure_rule_process.go @@ -86,6 +86,7 @@ func resourceSysdigRuleProcessRead(ctx context.Context, d *schema.ResourceData, if err != nil { if statusCode == http.StatusNotFound { d.SetId("") + return nil } else { return diag.FromErr(err) } diff --git a/sysdig/resource_sysdig_secure_rule_syscall.go b/sysdig/resource_sysdig_secure_rule_syscall.go index 94a71831..a54e6775 100644 --- a/sysdig/resource_sysdig_secure_rule_syscall.go +++ b/sysdig/resource_sysdig_secure_rule_syscall.go @@ -85,6 +85,7 @@ func resourceSysdigRuleSyscallRead(ctx context.Context, d *schema.ResourceData, if err != nil { if statusCode == http.StatusNotFound { d.SetId("") + return nil } else { return diag.FromErr(err) } diff --git a/sysdig/resource_sysdig_secure_team.go b/sysdig/resource_sysdig_secure_team.go index 1f8a66ad..069cc2b9 100644 --- a/sysdig/resource_sysdig_secure_team.go +++ b/sysdig/resource_sysdig_secure_team.go @@ -3,6 +3,7 @@ package sysdig import ( "context" "fmt" + "net/http" "strconv" "time" @@ -178,9 +179,12 @@ func resourceSysdigSecureTeamRead(ctx context.Context, d *schema.ResourceData, m } id, _ := strconv.Atoi(d.Id()) - t, err := client.GetTeamByID(ctx, id) + t, statusCode, err := client.GetTeamByID(ctx, id) if err != nil { - d.SetId("") + if statusCode == http.StatusNotFound { + d.SetId("") + return nil + } return diag.FromErr(err) } diff --git a/sysdig/resource_sysdig_user.go b/sysdig/resource_sysdig_user.go index 768c5fdb..142b5c04 100644 --- a/sysdig/resource_sysdig_user.go +++ b/sysdig/resource_sysdig_user.go @@ -2,6 +2,7 @@ package sysdig import ( "context" + "net/http" "strconv" "time" @@ -80,10 +81,14 @@ func resourceSysdigUserRead(ctx context.Context, d *schema.ResourceData, meta an } id, _ := strconv.Atoi(d.Id()) - u, err := client.GetUserByID(ctx, id) + u, statusCode, err := client.GetUserByID(ctx, id) if err != nil { - d.SetId("") - return diag.FromErr(err) + if statusCode == http.StatusNotFound { + d.SetId("") + return nil + } else { + return diag.FromErr(err) + } } _ = d.Set("version", u.Version)