|
4 | 4 | "context" |
5 | 5 |
|
6 | 6 | "github.com/Azure/azure-sdk-for-go/profiles/latest/resources/mgmt/subscriptions" |
| 7 | + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription" |
7 | 8 | "github.com/turbot/steampipe-plugin-sdk/v5/grpc/proto" |
8 | 9 | "github.com/turbot/steampipe-plugin-sdk/v5/plugin" |
9 | 10 | "github.com/turbot/steampipe-plugin-sdk/v5/plugin/transform" |
@@ -62,13 +63,20 @@ func tableAzureTenant(_ context.Context) *plugin.Table { |
62 | 63 | Type: proto.ColumnType_STRING, |
63 | 64 | Description: "The list of domains for the tenant.", |
64 | 65 | }, |
65 | | - { |
66 | | - Name: "domains", |
67 | | - Type: proto.ColumnType_JSON, |
68 | | - Description: "The list of domains for the tenant.", |
69 | | - }, |
| 66 | + { |
| 67 | + Name: "domains", |
| 68 | + Type: proto.ColumnType_JSON, |
| 69 | + Description: "The list of domains for the tenant.", |
| 70 | + }, |
| 71 | + { |
| 72 | + Name: "subscription_policy", |
| 73 | + Type: proto.ColumnType_JSON, |
| 74 | + Description: "The subscription policy for the tenant, including properties like BlockSubscriptionsLeavingTenant, BlockSubscriptionsIntoTenant, and ExemptedPrincipals.", |
| 75 | + Hydrate: getTenantSubscriptionPolicy, |
| 76 | + Transform: transform.FromValue(), |
| 77 | + }, |
70 | 78 |
|
71 | | - // Steampipe standard columns |
| 79 | + // Steampipe standard columns |
72 | 80 | { |
73 | 81 | Name: "title", |
74 | 82 | Description: ColumnDescriptionTitle, |
@@ -111,6 +119,33 @@ func listTenants(ctx context.Context, d *plugin.QueryData, _ *plugin.HydrateData |
111 | 119 | return nil, nil |
112 | 120 | } |
113 | 121 |
|
| 122 | +//// HYDRATE FUNCTION |
| 123 | + |
| 124 | +func getTenantSubscriptionPolicy(ctx context.Context, d *plugin.QueryData, _ *plugin.HydrateData) (interface{}, error) { |
| 125 | + // Get the session with credentials |
| 126 | + session, err := GetNewSessionUpdated(ctx, d) |
| 127 | + if err != nil { |
| 128 | + plugin.Logger(ctx).Error("azure_tenant.getTenantSubscriptionPolicy", "session_error", err) |
| 129 | + return nil, err |
| 130 | + } |
| 131 | + |
| 132 | + // Create the policy client |
| 133 | + client, err := armsubscription.NewPolicyClient(session.Cred, session.ClientOptions) |
| 134 | + if err != nil { |
| 135 | + plugin.Logger(ctx).Error("azure_tenant.getTenantSubscriptionPolicy", "client_error", err) |
| 136 | + return nil, err |
| 137 | + } |
| 138 | + |
| 139 | + // Get the tenant policy |
| 140 | + result, err := client.GetPolicyForTenant(ctx, nil) |
| 141 | + if err != nil { |
| 142 | + plugin.Logger(ctx).Error("azure_tenant.getTenantSubscriptionPolicy", "api_error", err) |
| 143 | + return nil, err |
| 144 | + } |
| 145 | + |
| 146 | + return result.GetTenantPolicyResponse, nil |
| 147 | +} |
| 148 | + |
114 | 149 | //// TRANSFORM FUNCTION |
115 | 150 |
|
116 | 151 | func getNameOrID(ctx context.Context, d *transform.TransformData) (interface{}, error) { |
|
0 commit comments