func resourceSecurityRoleRead()

in internal/elasticsearch/security/role.go [468:545]


func resourceSecurityRoleRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
	client, diags := clients.NewApiClientFromSDKResource(d, meta)
	if diags.HasError() {
		return diags
	}
	compId, diags := clients.CompositeIdFromStr(d.Id())
	if diags.HasError() {
		return diags
	}
	roleId := compId.ResourceId

	role, diags := elasticsearch.GetRole(ctx, client, roleId)
	if role == nil && diags == nil {
		tflog.Warn(ctx, fmt.Sprintf(`Role "%s" not found, removing from state`, roleId))
		d.SetId("")
		return diags
	}
	if diags.HasError() {
		return diags
	}

	// set the fields
	if err := d.Set("name", roleId); err != nil {
		return diag.FromErr(err)
	}

	// Set the description if it exists
	if role.Description != nil {
		if err := d.Set("description", *role.Description); err != nil {
			return diag.FromErr(err)
		}
	}

	apps := role.Applications
	applications := flattenApplicationsData(&apps)
	if err := d.Set("applications", applications); err != nil {
		return diag.FromErr(err)
	}

	if err := d.Set("cluster", role.Cluster); err != nil {
		return diag.FromErr(err)
	}

	if role.Global != nil {
		global, err := json.Marshal(role.Global)
		if err != nil {
			return diag.FromErr(err)
		}
		if err := d.Set("global", string(global)); err != nil {
			return diag.FromErr(err)
		}
	}

	indices := flattenIndicesData(role.Indices)
	if err := d.Set("indices", indices); err != nil {
		return diag.FromErr(err)
	}
	remoteIndices := flattenRemoteIndicesData(role.RemoteIndices)
	if err := d.Set("remote_indices", remoteIndices); err != nil {
		return diag.FromErr(err)
	}

	if role.Metadata != nil {
		metadata, err := json.Marshal(role.Metadata)
		if err != nil {
			return diag.FromErr(err)
		}
		if err := d.Set("metadata", string(metadata)); err != nil {
			return diag.FromErr(err)
		}
	}

	if err := d.Set("run_as", role.RusAs); err != nil {
		return diag.FromErr(err)
	}

	return diags
}