or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

index.mdpolicy-management.mdservice-operations.mdsubscription-creation.mdsubscription-lifecycle.mdsubscription-management.mdtenant-operations.md

subscription-creation.mddocs/

0

# Subscription Creation via Aliases

1

2

Subscription creation and alias management operations that enable programmatic subscription provisioning through Azure's alias system. These operations support enterprise-scale subscription creation workflows with long-running operation support and comprehensive alias management.

3

4

## Capabilities

5

6

### Create Subscription via Alias (Long Running Operation)

7

8

Creates a new Azure subscription using an alias. This is a long-running operation that provisions a subscription with specified billing and configuration settings.

9

10

```python { .api }

11

def begin_create(alias_name: str, body: Union[PutAliasRequest, IO], **kwargs) -> LROPoller[SubscriptionAliasResponse]:

12

"""

13

Create Alias Subscription (Long Running Operation).

14

15

Args:

16

alias_name (str): The alias name for the subscription

17

body (PutAliasRequest): Alias creation request with subscription details

18

19

Returns:

20

LROPoller[SubscriptionAliasResponse]: Long-running operation poller yielding alias response

21

"""

22

```

23

24

**Usage Example:**

25

26

```python

27

from azure.identity import DefaultAzureCredential

28

from azure.mgmt.subscription import SubscriptionClient

29

from azure.mgmt.subscription.models import (

30

PutAliasRequest,

31

PutAliasRequestProperties,

32

PutAliasRequestAdditionalProperties,

33

Workload

34

)

35

36

credential = DefaultAzureCredential()

37

client = SubscriptionClient(credential)

38

39

alias_name = "my-subscription-alias"

40

41

# Create alias properties

42

additional_properties = PutAliasRequestAdditionalProperties(

43

management_group_id="/providers/Microsoft.Management/managementGroups/my-mg",

44

tags={"Environment": "Production", "CostCenter": "12345"}

45

)

46

47

properties = PutAliasRequestProperties(

48

display_name="My New Enterprise Subscription",

49

billing_scope="/subscriptions/00000000-0000-0000-0000-000000000000/billingProfiles/ABCD-EFGH-12345678",

50

workload=Workload.PRODUCTION,

51

additional_properties=additional_properties

52

)

53

54

alias_request = PutAliasRequest(properties=properties)

55

56

try:

57

# Start the long-running operation

58

poller = client.alias.begin_create(alias_name, alias_request)

59

print(f"Subscription creation initiated with alias: {alias_name}")

60

print("Waiting for completion...")

61

62

# Wait for completion (this may take several minutes)

63

result = poller.result()

64

65

print(f"Subscription created successfully!")

66

print(f"Alias ID: {result.id}")

67

print(f"Subscription ID: {result.properties.subscription_id}")

68

print(f"Provisioning State: {result.properties.provisioning_state}")

69

70

except Exception as e:

71

print(f"Failed to create subscription: {e}")

72

```

73

74

### Get Alias Information

75

76

Retrieves information about a subscription alias, including its current status and associated subscription details.

77

78

```python { .api }

79

def get(alias_name: str, **kwargs) -> SubscriptionAliasResponse:

80

"""

81

Get Alias Subscription.

82

83

Args:

84

alias_name (str): The alias name to retrieve

85

86

Returns:

87

SubscriptionAliasResponse: Alias information and status

88

"""

89

```

90

91

**Usage Example:**

92

93

```python

94

alias_name = "my-subscription-alias"

95

96

try:

97

alias_info = client.alias.get(alias_name)

98

99

print(f"Alias Name: {alias_info.name}")

100

print(f"Alias ID: {alias_info.id}")

101

print(f"Type: {alias_info.type}")

102

103

properties = alias_info.properties

104

if properties:

105

print(f"Display Name: {properties.display_name}")

106

print(f"Subscription ID: {properties.subscription_id}")

107

print(f"Provisioning State: {properties.provisioning_state}")

108

print(f"Accept Ownership State: {properties.accept_ownership_state}")

109

print(f"Billing Scope: {properties.billing_scope}")

110

print(f"Workload: {properties.workload}")

111

112

if properties.tags:

113

print("Tags:")

114

for key, value in properties.tags.items():

115

print(f" {key}: {value}")

116

117

except Exception as e:

118

print(f"Failed to get alias information: {e}")

119

```

120

121

### Delete Alias

122

123

Deletes a subscription alias. Note that this does not delete the associated subscription, only the alias reference.

124

125

```python { .api }

126

def delete(alias_name: str, **kwargs) -> None:

127

"""

128

Delete Alias.

129

130

Args:

131

alias_name (str): The alias name to delete

132

133

Returns:

134

None

135

"""

136

```

137

138

**Usage Example:**

139

140

```python

141

alias_name = "my-subscription-alias"

142

143

try:

144

client.alias.delete(alias_name)

145

print(f"Successfully deleted alias: {alias_name}")

146

147

# Verify deletion by trying to get the alias

148

try:

149

client.alias.get(alias_name)

150

print("Warning: Alias still exists after deletion")

151

except Exception:

152

print("Alias successfully removed")

153

154

except Exception as e:

155

print(f"Failed to delete alias: {e}")

156

```

157

158

### List All Aliases

159

160

Lists all subscription aliases accessible to the authenticated user.

161

162

```python { .api }

163

def list(**kwargs) -> SubscriptionAliasListResult:

164

"""

165

List Alias Subscription.

166

167

Returns:

168

SubscriptionAliasListResult: List of all subscription aliases

169

"""

170

```

171

172

**Usage Example:**

173

174

```python

175

try:

176

aliases_result = client.alias.list()

177

aliases = aliases_result.value

178

179

print(f"Found {len(aliases)} subscription aliases:")

180

181

for alias in aliases:

182

print(f"Name: {alias.name}")

183

print(f"ID: {alias.id}")

184

185

if alias.properties:

186

print(f" Display Name: {alias.properties.display_name}")

187

print(f" Subscription ID: {alias.properties.subscription_id}")

188

print(f" State: {alias.properties.provisioning_state}")

189

print("---")

190

191

except Exception as e:

192

print(f"Failed to list aliases: {e}")

193

```

194

195

## Advanced Usage Patterns

196

197

### Monitor Subscription Creation Progress

198

199

```python

200

import time

201

from azure.core.exceptions import HttpResponseError

202

203

def monitor_subscription_creation(client, alias_name, poller):

204

"""Monitor subscription creation with periodic status updates."""

205

while not poller.done():

206

try:

207

# Check current alias status

208

alias_info = client.alias.get(alias_name)

209

properties = alias_info.properties

210

211

if properties:

212

print(f"Provisioning State: {properties.provisioning_state}")

213

print(f"Accept Ownership State: {properties.accept_ownership_state}")

214

215

if properties.subscription_id:

216

print(f"Subscription ID: {properties.subscription_id}")

217

218

# Wait before next check

219

time.sleep(30)

220

221

except HttpResponseError as e:

222

if e.status_code == 404:

223

print("Alias no longer found - may have been cleaned up")

224

break

225

else:

226

print(f"Error checking status: {e}")

227

228

except KeyboardInterrupt:

229

print("Monitoring interrupted. Creation continues in background.")

230

break

231

232

return poller.done()

233

234

# Usage

235

poller = client.alias.begin_create(alias_name, alias_request)

236

success = monitor_subscription_creation(client, alias_name, poller)

237

if success:

238

final_result = poller.result()

239

print(f"Final subscription ID: {final_result.properties.subscription_id}")

240

```

241

242

### Batch Subscription Creation

243

244

```python

245

def create_multiple_subscriptions(client, subscription_configs):

246

"""Create multiple subscriptions concurrently."""

247

pollers = []

248

249

for config in subscription_configs:

250

alias_name = config["alias_name"]

251

alias_request = config["request"]

252

253

try:

254

poller = client.alias.begin_create(alias_name, alias_request)

255

pollers.append((alias_name, poller))

256

print(f"Started creation for: {alias_name}")

257

except Exception as e:

258

print(f"Failed to start creation for {alias_name}: {e}")

259

260

# Monitor all creations

261

completed = []

262

for alias_name, poller in pollers:

263

try:

264

result = poller.result() # Wait for completion

265

completed.append({

266

"alias_name": alias_name,

267

"subscription_id": result.properties.subscription_id,

268

"status": "Success"

269

})

270

except Exception as e:

271

completed.append({

272

"alias_name": alias_name,

273

"status": f"Failed: {e}"

274

})

275

276

return completed

277

```

278

279

## Error Handling

280

281

Common errors when working with subscription aliases:

282

283

```python

284

from azure.core.exceptions import HttpResponseError

285

286

def handle_alias_errors(operation_name: str, func, *args, **kwargs):

287

"""Generic error handler for alias operations."""

288

try:

289

return func(*args, **kwargs)

290

except HttpResponseError as e:

291

if e.status_code == 409:

292

print(f"{operation_name}: Alias already exists or conflict with existing resource")

293

elif e.status_code == 400:

294

print(f"{operation_name}: Bad request - check billing scope and parameters")

295

elif e.status_code == 403:

296

print(f"{operation_name}: Insufficient permissions for subscription creation")

297

elif e.status_code == 404:

298

print(f"{operation_name}: Alias not found")

299

else:

300

print(f"{operation_name}: Error {e.status_code} - {e.message}")

301

raise

302

except Exception as e:

303

print(f"{operation_name}: Unexpected error - {e}")

304

raise

305

```

306

307

## Types

308

309

```python { .api }

310

class PutAliasRequest:

311

"""Request object for creating subscription alias."""

312

properties: PutAliasRequestProperties # Alias creation properties

313

314

class PutAliasRequestProperties:

315

"""Properties for alias creation request."""

316

display_name: str # Display name for the subscription (optional)

317

billing_scope: str # Billing scope for the subscription (optional)

318

workload: Union[str, Workload] # Workload type (optional)

319

additional_properties: PutAliasRequestAdditionalProperties # Additional settings (optional)

320

321

class PutAliasRequestAdditionalProperties:

322

"""Additional properties for alias creation."""

323

management_group_id: str # Management group to place subscription (optional)

324

subscription_tenant_id: str # Tenant ID for subscription (optional)

325

subscription_owner_id: str # Owner ID for subscription (optional)

326

tags: Dict[str, str] # Tags to apply to subscription (optional)

327

328

class SubscriptionAliasResponse:

329

"""Response from alias operations."""

330

id: str # Alias resource ID

331

name: str # Alias name

332

type: str # Resource type

333

properties: SubscriptionAliasResponseProperties # Alias properties

334

system_data: SystemData # System metadata

335

336

class SubscriptionAliasResponseProperties:

337

"""Properties of subscription alias response."""

338

subscription_id: str # Associated subscription ID

339

display_name: str # Display name of subscription

340

provisioning_state: Union[str, ProvisioningState] # Current provisioning state

341

accept_ownership_state: Union[str, AcceptOwnership] # Current ownership state

342

billing_scope: str # Billing scope used

343

workload: Union[str, Workload] # Workload type

344

management_group_id: str # Management group placement

345

subscription_owner_id: str # Subscription owner

346

tags: Dict[str, str] # Applied tags

347

created_time: str # Creation timestamp

348

349

class SubscriptionAliasListResult:

350

"""Result of listing subscription aliases."""

351

value: List[SubscriptionAliasResponse] # List of aliases

352

next_link: str # URL for next page of results (optional)

353

```

354

355

## Enums

356

357

```python { .api }

358

class Workload(str, Enum):

359

"""The workload type of the subscription."""

360

PRODUCTION = "Production"

361

DEV_TEST = "DevTest"

362

363

class ProvisioningState(str, Enum):

364

"""The provisioning state of the resource."""

365

ACCEPTED = "Accepted"

366

SUCCEEDED = "Succeeded"

367

FAILED = "Failed"

368

369

class AcceptOwnership(str, Enum):

370

"""The accept ownership state of the resource."""

371

PENDING = "Pending"

372

COMPLETED = "Completed"

373

EXPIRED = "Expired"

374

```