1{ 2 "version": 2, 3 "waiters": { 4 "InstanceExists": { 5 "delay": 5, 6 "maxAttempts": 40, 7 "operation": "DescribeInstances", 8 "acceptors": [ 9 { 10 "matcher": "path", 11 "expected": true, 12 "argument": "length(Reservations[]) > `0`", 13 "state": "success" 14 }, 15 { 16 "matcher": "error", 17 "expected": "InvalidInstanceID.NotFound", 18 "state": "retry" 19 } 20 ] 21 }, 22 "BundleTaskComplete": { 23 "delay": 15, 24 "operation": "DescribeBundleTasks", 25 "maxAttempts": 40, 26 "acceptors": [ 27 { 28 "expected": "complete", 29 "matcher": "pathAll", 30 "state": "success", 31 "argument": "BundleTasks[].State" 32 }, 33 { 34 "expected": "failed", 35 "matcher": "pathAny", 36 "state": "failure", 37 "argument": "BundleTasks[].State" 38 } 39 ] 40 }, 41 "ConversionTaskCancelled": { 42 "delay": 15, 43 "operation": "DescribeConversionTasks", 44 "maxAttempts": 40, 45 "acceptors": [ 46 { 47 "expected": "cancelled", 48 "matcher": "pathAll", 49 "state": "success", 50 "argument": "ConversionTasks[].State" 51 } 52 ] 53 }, 54 "ConversionTaskCompleted": { 55 "delay": 15, 56 "operation": "DescribeConversionTasks", 57 "maxAttempts": 40, 58 "acceptors": [ 59 { 60 "expected": "completed", 61 "matcher": "pathAll", 62 "state": "success", 63 "argument": "ConversionTasks[].State" 64 }, 65 { 66 "expected": "cancelled", 67 "matcher": "pathAny", 68 "state": "failure", 69 "argument": "ConversionTasks[].State" 70 }, 71 { 72 "expected": "cancelling", 73 "matcher": "pathAny", 74 "state": "failure", 75 "argument": "ConversionTasks[].State" 76 } 77 ] 78 }, 79 "ConversionTaskDeleted": { 80 "delay": 15, 81 "operation": "DescribeConversionTasks", 82 "maxAttempts": 40, 83 "acceptors": [ 84 { 85 "expected": "deleted", 86 "matcher": "pathAll", 87 "state": "success", 88 "argument": "ConversionTasks[].State" 89 } 90 ] 91 }, 92 "CustomerGatewayAvailable": { 93 "delay": 15, 94 "operation": "DescribeCustomerGateways", 95 "maxAttempts": 40, 96 "acceptors": [ 97 { 98 "expected": "available", 99 "matcher": "pathAll", 100 "state": "success", 101 "argument": "CustomerGateways[].State" 102 }, 103 { 104 "expected": "deleted", 105 "matcher": "pathAny", 106 "state": "failure", 107 "argument": "CustomerGateways[].State" 108 }, 109 { 110 "expected": "deleting", 111 "matcher": "pathAny", 112 "state": "failure", 113 "argument": "CustomerGateways[].State" 114 } 115 ] 116 }, 117 "ExportTaskCancelled": { 118 "delay": 15, 119 "operation": "DescribeExportTasks", 120 "maxAttempts": 40, 121 "acceptors": [ 122 { 123 "expected": "cancelled", 124 "matcher": "pathAll", 125 "state": "success", 126 "argument": "ExportTasks[].State" 127 } 128 ] 129 }, 130 "ExportTaskCompleted": { 131 "delay": 15, 132 "operation": "DescribeExportTasks", 133 "maxAttempts": 40, 134 "acceptors": [ 135 { 136 "expected": "completed", 137 "matcher": "pathAll", 138 "state": "success", 139 "argument": "ExportTasks[].State" 140 } 141 ] 142 }, 143 "ImageExists": { 144 "operation": "DescribeImages", 145 "maxAttempts": 40, 146 "delay": 15, 147 "acceptors": [ 148 { 149 "matcher": "path", 150 "expected": true, 151 "argument": "length(Images[]) > `0`", 152 "state": "success" 153 }, 154 { 155 "matcher": "error", 156 "expected": "InvalidAMIID.NotFound", 157 "state": "retry" 158 } 159 ] 160 }, 161 "ImageAvailable": { 162 "operation": "DescribeImages", 163 "maxAttempts": 40, 164 "delay": 15, 165 "acceptors": [ 166 { 167 "state": "success", 168 "matcher": "pathAll", 169 "argument": "Images[].State", 170 "expected": "available" 171 }, 172 { 173 "state": "failure", 174 "matcher": "pathAny", 175 "argument": "Images[].State", 176 "expected": "failed" 177 } 178 ] 179 }, 180 "InstanceRunning": { 181 "delay": 15, 182 "operation": "DescribeInstances", 183 "maxAttempts": 40, 184 "acceptors": [ 185 { 186 "expected": "running", 187 "matcher": "pathAll", 188 "state": "success", 189 "argument": "Reservations[].Instances[].State.Name" 190 }, 191 { 192 "expected": "shutting-down", 193 "matcher": "pathAny", 194 "state": "failure", 195 "argument": "Reservations[].Instances[].State.Name" 196 }, 197 { 198 "expected": "terminated", 199 "matcher": "pathAny", 200 "state": "failure", 201 "argument": "Reservations[].Instances[].State.Name" 202 }, 203 { 204 "expected": "stopping", 205 "matcher": "pathAny", 206 "state": "failure", 207 "argument": "Reservations[].Instances[].State.Name" 208 }, 209 { 210 "matcher": "error", 211 "expected": "InvalidInstanceID.NotFound", 212 "state": "retry" 213 } 214 ] 215 }, 216 "InstanceStatusOk": { 217 "operation": "DescribeInstanceStatus", 218 "maxAttempts": 40, 219 "delay": 15, 220 "acceptors": [ 221 { 222 "state": "success", 223 "matcher": "pathAll", 224 "argument": "InstanceStatuses[].InstanceStatus.Status", 225 "expected": "ok" 226 }, 227 { 228 "matcher": "error", 229 "expected": "InvalidInstanceID.NotFound", 230 "state": "retry" 231 } 232 ] 233 }, 234 "InstanceStopped": { 235 "delay": 15, 236 "operation": "DescribeInstances", 237 "maxAttempts": 40, 238 "acceptors": [ 239 { 240 "expected": "stopped", 241 "matcher": "pathAll", 242 "state": "success", 243 "argument": "Reservations[].Instances[].State.Name" 244 }, 245 { 246 "expected": "pending", 247 "matcher": "pathAny", 248 "state": "failure", 249 "argument": "Reservations[].Instances[].State.Name" 250 }, 251 { 252 "expected": "terminated", 253 "matcher": "pathAny", 254 "state": "failure", 255 "argument": "Reservations[].Instances[].State.Name" 256 } 257 ] 258 }, 259 "InstanceTerminated": { 260 "delay": 15, 261 "operation": "DescribeInstances", 262 "maxAttempts": 40, 263 "acceptors": [ 264 { 265 "expected": "terminated", 266 "matcher": "pathAll", 267 "state": "success", 268 "argument": "Reservations[].Instances[].State.Name" 269 }, 270 { 271 "expected": "pending", 272 "matcher": "pathAny", 273 "state": "failure", 274 "argument": "Reservations[].Instances[].State.Name" 275 }, 276 { 277 "expected": "stopping", 278 "matcher": "pathAny", 279 "state": "failure", 280 "argument": "Reservations[].Instances[].State.Name" 281 } 282 ] 283 }, 284 "KeyPairExists": { 285 "operation": "DescribeKeyPairs", 286 "delay": 5, 287 "maxAttempts": 6, 288 "acceptors": [ 289 { 290 "expected": true, 291 "matcher": "path", 292 "state": "success", 293 "argument": "length(KeyPairs[].KeyName) > `0`" 294 }, 295 { 296 "expected": "InvalidKeyPair.NotFound", 297 "matcher": "error", 298 "state": "retry" 299 } 300 ] 301 }, 302 "NatGatewayAvailable": { 303 "operation": "DescribeNatGateways", 304 "delay": 15, 305 "maxAttempts": 40, 306 "acceptors": [ 307 { 308 "state": "success", 309 "matcher": "pathAll", 310 "argument": "NatGateways[].State", 311 "expected": "available" 312 }, 313 { 314 "state": "failure", 315 "matcher": "pathAny", 316 "argument": "NatGateways[].State", 317 "expected": "failed" 318 }, 319 { 320 "state": "failure", 321 "matcher": "pathAny", 322 "argument": "NatGateways[].State", 323 "expected": "deleting" 324 }, 325 { 326 "state": "failure", 327 "matcher": "pathAny", 328 "argument": "NatGateways[].State", 329 "expected": "deleted" 330 }, 331 { 332 "state": "retry", 333 "matcher": "error", 334 "expected": "NatGatewayNotFound" 335 } 336 ] 337 }, 338 "NetworkInterfaceAvailable": { 339 "operation": "DescribeNetworkInterfaces", 340 "delay": 20, 341 "maxAttempts": 10, 342 "acceptors": [ 343 { 344 "expected": "available", 345 "matcher": "pathAll", 346 "state": "success", 347 "argument": "NetworkInterfaces[].Status" 348 }, 349 { 350 "expected": "InvalidNetworkInterfaceID.NotFound", 351 "matcher": "error", 352 "state": "failure" 353 } 354 ] 355 }, 356 "PasswordDataAvailable": { 357 "operation": "GetPasswordData", 358 "maxAttempts": 40, 359 "delay": 15, 360 "acceptors": [ 361 { 362 "state": "success", 363 "matcher": "path", 364 "argument": "length(PasswordData) > `0`", 365 "expected": true 366 } 367 ] 368 }, 369 "SnapshotCompleted": { 370 "delay": 15, 371 "operation": "DescribeSnapshots", 372 "maxAttempts": 40, 373 "acceptors": [ 374 { 375 "expected": "completed", 376 "matcher": "pathAll", 377 "state": "success", 378 "argument": "Snapshots[].State" 379 } 380 ] 381 }, 382 "SecurityGroupExists": { 383 "operation": "DescribeSecurityGroups", 384 "delay": 5, 385 "maxAttempts": 6, 386 "acceptors": [ 387 { 388 "expected": true, 389 "matcher": "path", 390 "state": "success", 391 "argument": "length(SecurityGroups[].GroupId) > `0`" 392 }, 393 { 394 "expected": "InvalidGroupNotFound", 395 "matcher": "error", 396 "state": "retry" 397 } 398 ] 399 }, 400 "SpotInstanceRequestFulfilled": { 401 "operation": "DescribeSpotInstanceRequests", 402 "maxAttempts": 40, 403 "delay": 15, 404 "acceptors": [ 405 { 406 "state": "success", 407 "matcher": "pathAll", 408 "argument": "SpotInstanceRequests[].Status.Code", 409 "expected": "fulfilled" 410 }, 411 { 412 "state": "success", 413 "matcher": "pathAll", 414 "argument": "SpotInstanceRequests[].Status.Code", 415 "expected": "request-canceled-and-instance-running" 416 }, 417 { 418 "state": "failure", 419 "matcher": "pathAny", 420 "argument": "SpotInstanceRequests[].Status.Code", 421 "expected": "schedule-expired" 422 }, 423 { 424 "state": "failure", 425 "matcher": "pathAny", 426 "argument": "SpotInstanceRequests[].Status.Code", 427 "expected": "canceled-before-fulfillment" 428 }, 429 { 430 "state": "failure", 431 "matcher": "pathAny", 432 "argument": "SpotInstanceRequests[].Status.Code", 433 "expected": "bad-parameters" 434 }, 435 { 436 "state": "failure", 437 "matcher": "pathAny", 438 "argument": "SpotInstanceRequests[].Status.Code", 439 "expected": "system-error" 440 }, 441 { 442 "state": "retry", 443 "matcher": "error", 444 "expected": "InvalidSpotInstanceRequestID.NotFound" 445 } 446 ] 447 }, 448 "SubnetAvailable": { 449 "delay": 15, 450 "operation": "DescribeSubnets", 451 "maxAttempts": 40, 452 "acceptors": [ 453 { 454 "expected": "available", 455 "matcher": "pathAll", 456 "state": "success", 457 "argument": "Subnets[].State" 458 } 459 ] 460 }, 461 "SystemStatusOk": { 462 "operation": "DescribeInstanceStatus", 463 "maxAttempts": 40, 464 "delay": 15, 465 "acceptors": [ 466 { 467 "state": "success", 468 "matcher": "pathAll", 469 "argument": "InstanceStatuses[].SystemStatus.Status", 470 "expected": "ok" 471 } 472 ] 473 }, 474 "VolumeAvailable": { 475 "delay": 15, 476 "operation": "DescribeVolumes", 477 "maxAttempts": 40, 478 "acceptors": [ 479 { 480 "expected": "available", 481 "matcher": "pathAll", 482 "state": "success", 483 "argument": "Volumes[].State" 484 }, 485 { 486 "expected": "deleted", 487 "matcher": "pathAny", 488 "state": "failure", 489 "argument": "Volumes[].State" 490 } 491 ] 492 }, 493 "VolumeDeleted": { 494 "delay": 15, 495 "operation": "DescribeVolumes", 496 "maxAttempts": 40, 497 "acceptors": [ 498 { 499 "expected": "deleted", 500 "matcher": "pathAll", 501 "state": "success", 502 "argument": "Volumes[].State" 503 }, 504 { 505 "matcher": "error", 506 "expected": "InvalidVolume.NotFound", 507 "state": "success" 508 } 509 ] 510 }, 511 "VolumeInUse": { 512 "delay": 15, 513 "operation": "DescribeVolumes", 514 "maxAttempts": 40, 515 "acceptors": [ 516 { 517 "expected": "in-use", 518 "matcher": "pathAll", 519 "state": "success", 520 "argument": "Volumes[].State" 521 }, 522 { 523 "expected": "deleted", 524 "matcher": "pathAny", 525 "state": "failure", 526 "argument": "Volumes[].State" 527 } 528 ] 529 }, 530 "VpcAvailable": { 531 "delay": 15, 532 "operation": "DescribeVpcs", 533 "maxAttempts": 40, 534 "acceptors": [ 535 { 536 "expected": "available", 537 "matcher": "pathAll", 538 "state": "success", 539 "argument": "Vpcs[].State" 540 } 541 ] 542 }, 543 "VpcExists": { 544 "operation": "DescribeVpcs", 545 "delay": 1, 546 "maxAttempts": 5, 547 "acceptors": [ 548 { 549 "matcher": "status", 550 "expected": 200, 551 "state": "success" 552 }, 553 { 554 "matcher": "error", 555 "expected": "InvalidVpcID.NotFound", 556 "state": "retry" 557 } 558 ] 559 }, 560 "VpnConnectionAvailable": { 561 "delay": 15, 562 "operation": "DescribeVpnConnections", 563 "maxAttempts": 40, 564 "acceptors": [ 565 { 566 "expected": "available", 567 "matcher": "pathAll", 568 "state": "success", 569 "argument": "VpnConnections[].State" 570 }, 571 { 572 "expected": "deleting", 573 "matcher": "pathAny", 574 "state": "failure", 575 "argument": "VpnConnections[].State" 576 }, 577 { 578 "expected": "deleted", 579 "matcher": "pathAny", 580 "state": "failure", 581 "argument": "VpnConnections[].State" 582 } 583 ] 584 }, 585 "VpnConnectionDeleted": { 586 "delay": 15, 587 "operation": "DescribeVpnConnections", 588 "maxAttempts": 40, 589 "acceptors": [ 590 { 591 "expected": "deleted", 592 "matcher": "pathAll", 593 "state": "success", 594 "argument": "VpnConnections[].State" 595 }, 596 { 597 "expected": "pending", 598 "matcher": "pathAny", 599 "state": "failure", 600 "argument": "VpnConnections[].State" 601 } 602 ] 603 }, 604 "VpcPeeringConnectionExists": { 605 "delay": 15, 606 "operation": "DescribeVpcPeeringConnections", 607 "maxAttempts": 40, 608 "acceptors": [ 609 { 610 "matcher": "status", 611 "expected": 200, 612 "state": "success" 613 }, 614 { 615 "matcher": "error", 616 "expected": "InvalidVpcPeeringConnectionID.NotFound", 617 "state": "retry" 618 } 619 ] 620 }, 621 "VpcPeeringConnectionDeleted": { 622 "delay": 15, 623 "operation": "DescribeVpcPeeringConnections", 624 "maxAttempts": 40, 625 "acceptors": [ 626 { 627 "expected": "deleted", 628 "matcher": "pathAll", 629 "state": "success", 630 "argument": "VpcPeeringConnections[].Status.Code" 631 }, 632 { 633 "matcher": "error", 634 "expected": "InvalidVpcPeeringConnectionID.NotFound", 635 "state": "success" 636 } 637 ] 638 } 639 } 640} 641