awscli 1.42.7__py3-none-any.whl → 1.44.26__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. awscli/__init__.py +1 -1
  2. awscli/alias.py +3 -3
  3. awscli/argprocess.py +7 -2
  4. awscli/arguments.py +1 -1
  5. awscli/bcdoc/docevents.py +3 -0
  6. awscli/clidocs.py +19 -2
  7. awscli/clidriver.py +55 -9
  8. awscli/customizations/argrename.py +1 -3
  9. awscli/customizations/cliinputjson.py +4 -0
  10. awscli/customizations/cloudformation/deploy.py +19 -3
  11. awscli/customizations/cloudtrail/validation.py +22 -2
  12. awscli/customizations/commands.py +2 -1
  13. awscli/customizations/eks/update_kubeconfig.py +12 -1
  14. awscli/customizations/emr/argumentschema.py +355 -344
  15. awscli/customizations/emr/createcluster.py +12 -0
  16. awscli/customizations/emr/emrutils.py +83 -50
  17. awscli/customizations/emr/helptext.py +10 -0
  18. awscli/customizations/emr/steputils.py +92 -52
  19. awscli/customizations/gamelift/uploadbuild.py +24 -11
  20. awscli/customizations/globalargs.py +169 -0
  21. awscli/customizations/paginate.py +66 -1
  22. awscli/customizations/s3/filegenerator.py +4 -1
  23. awscli/customizations/s3/fileinfo.py +4 -1
  24. awscli/customizations/s3/fileinfobuilder.py +6 -0
  25. awscli/customizations/s3/s3handler.py +9 -0
  26. awscli/customizations/s3/subcommands.py +147 -6
  27. awscli/customizations/s3/syncstrategy/base.py +9 -0
  28. awscli/customizations/s3/syncstrategy/caseconflict.py +96 -0
  29. awscli/customizations/s3/utils.py +14 -0
  30. awscli/customizations/scalarparse.py +48 -9
  31. awscli/data/cli.json +5 -0
  32. awscli/examples/apigateway/update-vpc-link.rst +47 -0
  33. awscli/examples/application-signals/batch-get-service-level-objective-budget-report.rst +99 -0
  34. awscli/examples/application-signals/create-service-level-objective.rst +88 -0
  35. awscli/examples/application-signals/delete-service-level-objective.rst +10 -0
  36. awscli/examples/application-signals/get-service-level-objective.rst +53 -0
  37. awscli/examples/application-signals/get-service.rst +72 -0
  38. awscli/examples/application-signals/list-service-dependencies.rst +96 -0
  39. awscli/examples/application-signals/list-service-dependents.rst +36 -0
  40. awscli/examples/application-signals/list-service-level-objectives.rst +17 -0
  41. awscli/examples/application-signals/list-service-operations.rst +63 -0
  42. awscli/examples/application-signals/list-services.rst +61 -0
  43. awscli/examples/application-signals/list-tags-for-resource.rst +17 -0
  44. awscli/examples/application-signals/start-discovery.rst +9 -0
  45. awscli/examples/application-signals/tag-resource.rst +11 -0
  46. awscli/examples/application-signals/untag-resource.rst +11 -0
  47. awscli/examples/application-signals/update-service-level-objective.rst +69 -0
  48. awscli/examples/cloudformation/create-generated-template.rst +50 -0
  49. awscli/examples/cloudformation/create-stack-refactor.rst +16 -0
  50. awscli/examples/cloudformation/delete-generated-template.rst +10 -0
  51. awscli/examples/cloudformation/describe-generated-template.rst +62 -0
  52. awscli/examples/cloudformation/describe-resource-scan.rst +38 -0
  53. awscli/examples/cloudformation/describe-stack-refactor.rst +20 -0
  54. awscli/examples/cloudformation/execute-stack-refactor.rst +10 -0
  55. awscli/examples/cloudformation/list-generated-templates.rst +41 -0
  56. awscli/examples/cloudformation/list-resource-scan-related-resources.rst +47 -0
  57. awscli/examples/cloudformation/list-resource-scan-resources.rst +30 -0
  58. awscli/examples/cloudformation/list-stack-refactor-actions.rst +71 -0
  59. awscli/examples/cloudformation/start-resource-scan.rst +14 -0
  60. awscli/examples/ec2/authorize-security-group-ingress.rst +1 -1
  61. awscli/examples/global_options.rst +4 -0
  62. awscli/examples/global_synopsis.rst +1 -0
  63. awscli/examples/guardduty/update-detector.rst +23 -0
  64. awscli/examples/ivs-realtime/get-composition.rst +7 -4
  65. awscli/examples/ivs-realtime/start-composition.rst +88 -3
  66. awscli/examples/lambda/create-function.rst +4 -4
  67. awscli/examples/lambda/get-function.rst +3 -3
  68. awscli/examples/lambda/list-functions.rst +6 -6
  69. awscli/examples/medical-imaging/create-datastore.rst +19 -2
  70. awscli/examples/medical-imaging/get-datastore.rst +24 -1
  71. awscli/examples/networkmanager/get-vpc-attachment.rst +1 -1
  72. awscli/examples/securityhub/describe-hub.rst +6 -4
  73. awscli/examples/servicediscovery/create-service.rst +50 -10
  74. awscli/examples/servicediscovery/delete-namespace.rst +18 -4
  75. awscli/examples/servicediscovery/delete-service-attributes.rst +15 -3
  76. awscli/examples/servicediscovery/delete-service.rst +13 -3
  77. awscli/examples/servicediscovery/deregister-instance.rst +18 -2
  78. awscli/examples/servicediscovery/discover-instances-revision.rst +18 -1
  79. awscli/examples/servicediscovery/discover-instances.rst +32 -2
  80. awscli/examples/servicediscovery/get-instance.rst +30 -4
  81. awscli/examples/servicediscovery/get-instances-health-status.rst +19 -1
  82. awscli/examples/servicediscovery/get-namespace.rst +40 -9
  83. awscli/examples/servicediscovery/get-operation.rst +32 -6
  84. awscli/examples/servicediscovery/get-service-attributes.rst +25 -3
  85. awscli/examples/servicediscovery/get-service.rst +35 -7
  86. awscli/examples/servicediscovery/list-instances.rst +38 -3
  87. awscli/examples/servicediscovery/list-namespaces.rst +45 -22
  88. awscli/examples/servicediscovery/list-services.rst +30 -2
  89. awscli/examples/servicediscovery/register-instance.rst +18 -2
  90. awscli/examples/servicediscovery/update-http-namespace.rst +22 -5
  91. awscli/examples/servicediscovery/update-instance-custom-health-status.rst +14 -1
  92. awscli/examples/servicediscovery/update-private-dns-namespace.rst +22 -5
  93. awscli/examples/servicediscovery/update-public-dns-namespace.rst +22 -5
  94. awscli/examples/servicediscovery/update-service-attributes.rst +14 -2
  95. awscli/examples/servicediscovery/update-service.rst +20 -4
  96. awscli/handlers.py +0 -4
  97. awscli/paramfile.py +21 -4
  98. awscli/testutils.py +17 -0
  99. awscli/topics/config-vars.rst +1 -1
  100. awscli/topics/s3-case-insensitivity.rst +105 -0
  101. awscli/topics/topic-tags.json +16 -0
  102. awscli/utils.py +19 -2
  103. {awscli-1.42.7.dist-info → awscli-1.44.26.dist-info}/METADATA +16 -3
  104. {awscli-1.42.7.dist-info → awscli-1.44.26.dist-info}/RECORD +112 -231
  105. awscli/customizations/opsworks.py +0 -543
  106. awscli/customizations/opsworkscm.py +0 -21
  107. awscli/examples/elastictranscoder/cancel-job.rst +0 -8
  108. awscli/examples/elastictranscoder/create-job.rst +0 -94
  109. awscli/examples/elastictranscoder/create-pipeline.rst +0 -94
  110. awscli/examples/elastictranscoder/create-preset.rst +0 -141
  111. awscli/examples/elastictranscoder/delete-pipeline.rst +0 -13
  112. awscli/examples/elastictranscoder/delete-preset.rst +0 -8
  113. awscli/examples/elastictranscoder/list-jobs-by-pipeline.rst +0 -13
  114. awscli/examples/elastictranscoder/list-jobs-by-status.rst +0 -14
  115. awscli/examples/elastictranscoder/list-pipelines.rst +0 -84
  116. awscli/examples/elastictranscoder/list-presets.rst +0 -95
  117. awscli/examples/elastictranscoder/read-job.rst +0 -65
  118. awscli/examples/elastictranscoder/read-pipeline.rst +0 -59
  119. awscli/examples/elastictranscoder/read-preset.rst +0 -100
  120. awscli/examples/elastictranscoder/update-pipeline-notifications.rst +0 -52
  121. awscli/examples/elastictranscoder/update-pipeline-status.rst +0 -53
  122. awscli/examples/elastictranscoder/update-pipeline.rst +0 -95
  123. awscli/examples/opsworks/assign-instance.rst +0 -14
  124. awscli/examples/opsworks/assign-volume.rst +0 -17
  125. awscli/examples/opsworks/associate-elastic-ip.rst +0 -14
  126. awscli/examples/opsworks/attach-elastic-load-balancer.rst +0 -14
  127. awscli/examples/opsworks/create-app.rst +0 -64
  128. awscli/examples/opsworks/create-deployment.rst +0 -66
  129. awscli/examples/opsworks/create-instance.rst +0 -25
  130. awscli/examples/opsworks/create-layer.rst +0 -17
  131. awscli/examples/opsworks/create-server.rst +0 -43
  132. awscli/examples/opsworks/create-stack.rst +0 -25
  133. awscli/examples/opsworks/create-user-profile.rst +0 -24
  134. awscli/examples/opsworks/delete-app.rst +0 -17
  135. awscli/examples/opsworks/delete-instance.rst +0 -15
  136. awscli/examples/opsworks/delete-layer.rst +0 -17
  137. awscli/examples/opsworks/delete-stack.rst +0 -18
  138. awscli/examples/opsworks/delete-user-profile.rst +0 -17
  139. awscli/examples/opsworks/deregister-elastic-ip.rst +0 -13
  140. awscli/examples/opsworks/deregister-instance.rst +0 -14
  141. awscli/examples/opsworks/deregister-rds-db-instance.rst +0 -20
  142. awscli/examples/opsworks/deregister-volume.rst +0 -15
  143. awscli/examples/opsworks/describe-apps.rst +0 -38
  144. awscli/examples/opsworks/describe-commands.rst +0 -43
  145. awscli/examples/opsworks/describe-deployments.rst +0 -52
  146. awscli/examples/opsworks/describe-elastic-ips.rst +0 -24
  147. awscli/examples/opsworks/describe-elastic-load-balancers.rst +0 -37
  148. awscli/examples/opsworks/describe-instances.rst +0 -95
  149. awscli/examples/opsworks/describe-layers.rst +0 -171
  150. awscli/examples/opsworks/describe-load-based-auto-scaling.rst +0 -37
  151. awscli/examples/opsworks/describe-my-user-profile.rst +0 -24
  152. awscli/examples/opsworks/describe-permissions.rst +0 -26
  153. awscli/examples/opsworks/describe-raid-arrays.rst +0 -31
  154. awscli/examples/opsworks/describe-rds-db-instances.rst +0 -29
  155. awscli/examples/opsworks/describe-stack-provisioning-parameters.rst +0 -32
  156. awscli/examples/opsworks/describe-stack-summary.rst +0 -27
  157. awscli/examples/opsworks/describe-stacks.rst +0 -65
  158. awscli/examples/opsworks/describe-timebased-auto-scaling.rst +0 -39
  159. awscli/examples/opsworks/describe-user-profiles.rst +0 -32
  160. awscli/examples/opsworks/describe-volumes.rst +0 -31
  161. awscli/examples/opsworks/detach-elastic-load-balancer.rst +0 -14
  162. awscli/examples/opsworks/disassociate-elastic-ip.rst +0 -14
  163. awscli/examples/opsworks/get-hostname-suggestion.rst +0 -21
  164. awscli/examples/opsworks/reboot-instance.rst +0 -14
  165. awscli/examples/opsworks/register-elastic-ip.rst +0 -19
  166. awscli/examples/opsworks/register-rds-db-instance.rst +0 -15
  167. awscli/examples/opsworks/register-volume.rst +0 -18
  168. awscli/examples/opsworks/register.rst +0 -105
  169. awscli/examples/opsworks/set-load-based-auto-scaling.rst +0 -38
  170. awscli/examples/opsworks/set-permission.rst +0 -23
  171. awscli/examples/opsworks/set-time-based-auto-scaling.rst +0 -33
  172. awscli/examples/opsworks/start-instance.rst +0 -20
  173. awscli/examples/opsworks/start-stack.rst +0 -15
  174. awscli/examples/opsworks/stop-instance.rst +0 -20
  175. awscli/examples/opsworks/stop-stack.rst +0 -15
  176. awscli/examples/opsworks/unassign-instance.rst +0 -14
  177. awscli/examples/opsworks/unassign-volume.rst +0 -16
  178. awscli/examples/opsworks/update-app.rst +0 -14
  179. awscli/examples/opsworks/update-elastic-ip.rst +0 -14
  180. awscli/examples/opsworks/update-instance.rst +0 -14
  181. awscli/examples/opsworks/update-layer.rst +0 -14
  182. awscli/examples/opsworks/update-my-user-profile.rst +0 -16
  183. awscli/examples/opsworks/update-rds-db-instance.rst +0 -18
  184. awscli/examples/opsworks/update-volume.rst +0 -16
  185. awscli/examples/opsworkscm/associate-node.rst +0 -22
  186. awscli/examples/opsworkscm/create-backup.rst +0 -46
  187. awscli/examples/opsworkscm/create-server.rst +0 -48
  188. awscli/examples/opsworkscm/delete-backup.rst +0 -17
  189. awscli/examples/opsworkscm/delete-server.rst +0 -16
  190. awscli/examples/opsworkscm/describe-account-attributes.rst +0 -26
  191. awscli/examples/opsworkscm/describe-backups.rst +0 -44
  192. awscli/examples/opsworkscm/describe-events.rst +0 -21
  193. awscli/examples/opsworkscm/describe-node-association-status.rst +0 -20
  194. awscli/examples/opsworkscm/describe-servers.rst +0 -48
  195. awscli/examples/opsworkscm/disassociate-node.rst +0 -19
  196. awscli/examples/opsworkscm/restore-server.rst +0 -20
  197. awscli/examples/opsworkscm/start-maintenance.rst +0 -39
  198. awscli/examples/opsworkscm/update-server-engine-attributes.rst +0 -43
  199. awscli/examples/opsworkscm/update-server.rst +0 -42
  200. awscli/examples/qldb/cancel-journal-kinesis-stream.rst +0 -15
  201. awscli/examples/qldb/create-ledger.rst +0 -43
  202. awscli/examples/qldb/delete-ledger.rst +0 -10
  203. awscli/examples/qldb/describe-journal-kinesis-stream.rst +0 -29
  204. awscli/examples/qldb/describe-journal-s3-export.rst +0 -30
  205. awscli/examples/qldb/describe-ledger.rst +0 -23
  206. awscli/examples/qldb/export-journal-to-s3.rst +0 -28
  207. awscli/examples/qldb/get-block.rst +0 -55
  208. awscli/examples/qldb/get-digest.rst +0 -17
  209. awscli/examples/qldb/get-revision.rst +0 -57
  210. awscli/examples/qldb/list-journal-kinesis-streams-for-ledger.rst +0 -30
  211. awscli/examples/qldb/list-journal-s3-exports-for-ledger.rst +0 -31
  212. awscli/examples/qldb/list-journal-s3-exports.rst +0 -46
  213. awscli/examples/qldb/list-ledgers.rst +0 -24
  214. awscli/examples/qldb/list-tags-for-resource.rst +0 -17
  215. awscli/examples/qldb/stream-journal-to-kinesis.rst +0 -46
  216. awscli/examples/qldb/tag-resource.rst +0 -11
  217. awscli/examples/qldb/untag-resource.rst +0 -11
  218. awscli/examples/qldb/update-ledger-permissions-mode.rst +0 -34
  219. awscli/examples/qldb/update-ledger.rst +0 -63
  220. awscli/examples/robomaker/batch-describe-simulation-job.rst +0 -150
  221. awscli/examples/robomaker/cancel-simulation-job.rst +0 -6
  222. awscli/examples/robomaker/create-deployment-job.rst +0 -37
  223. awscli/examples/robomaker/create-fleet.rst +0 -18
  224. awscli/examples/robomaker/create-robot-application-version.rst +0 -31
  225. awscli/examples/robomaker/create-robot-application.rst +0 -29
  226. awscli/examples/robomaker/create-robot.rst +0 -20
  227. awscli/examples/robomaker/create-simulation-application-version.rst +0 -39
  228. awscli/examples/robomaker/create-simulation-application.rst +0 -38
  229. awscli/examples/robomaker/create-simulation-job.rst +0 -43
  230. awscli/examples/robomaker/delete-fleet.rst +0 -7
  231. awscli/examples/robomaker/delete-robot-application.rst +0 -7
  232. awscli/examples/robomaker/delete-robot.rst +0 -7
  233. awscli/examples/robomaker/delete-simulation-application.rst +0 -7
  234. awscli/examples/robomaker/deregister-robot.rst +0 -14
  235. awscli/examples/robomaker/describe-deployment-job.rst +0 -38
  236. awscli/examples/robomaker/describe-fleet.rst +0 -28
  237. awscli/examples/robomaker/describe-robot-application.rst +0 -29
  238. awscli/examples/robomaker/describe-robot.rst +0 -21
  239. awscli/examples/robomaker/describe-simulation-application.rst +0 -37
  240. awscli/examples/robomaker/describe-simulation-job.rst +0 -45
  241. awscli/examples/robomaker/list-deployment-jobs.rst +0 -57
  242. awscli/examples/robomaker/list-fleets.rst +0 -22
  243. awscli/examples/robomaker/list-robot-applications.rst +0 -32
  244. awscli/examples/robomaker/list-robots.rst +0 -45
  245. awscli/examples/robomaker/list-simulation-applications.rst +0 -50
  246. awscli/examples/robomaker/list-simulation-jobs.rst +0 -80
  247. awscli/examples/robomaker/list-tags-for-resource.rst +0 -16
  248. awscli/examples/robomaker/register-robot.rst +0 -14
  249. awscli/examples/robomaker/restart-simulation-job.rst +0 -7
  250. awscli/examples/robomaker/sync-deployment-job.rst +0 -30
  251. awscli/examples/robomaker/tag-resource.rst +0 -7
  252. awscli/examples/robomaker/untag-resource.rst +0 -7
  253. awscli/examples/robomaker/update-robot-application.rst +0 -28
  254. awscli/examples/robomaker/update-simulation-application.rst +0 -36
  255. {awscli-1.42.7.data → awscli-1.44.26.data}/scripts/aws +0 -0
  256. {awscli-1.42.7.data → awscli-1.44.26.data}/scripts/aws.cmd +0 -0
  257. {awscli-1.42.7.data → awscli-1.44.26.data}/scripts/aws_bash_completer +0 -0
  258. {awscli-1.42.7.data → awscli-1.44.26.data}/scripts/aws_completer +0 -0
  259. {awscli-1.42.7.data → awscli-1.44.26.data}/scripts/aws_zsh_completer.sh +0 -0
  260. {awscli-1.42.7.dist-info → awscli-1.44.26.dist-info}/LICENSE.txt +0 -0
  261. {awscli-1.42.7.dist-info → awscli-1.44.26.dist-info}/WHEEL +0 -0
  262. {awscli-1.42.7.dist-info → awscli-1.44.26.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,96 @@
1
+ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ import logging
4
+ import os
5
+ import sys
6
+
7
+ from awscli.customizations.s3.syncstrategy.base import BaseSync
8
+ from awscli.customizations.utils import uni_print
9
+
10
+ LOG = logging.getLogger(__name__)
11
+
12
+
13
+ class CaseConflictException(Exception):
14
+ pass
15
+
16
+
17
+ class CaseConflictSync(BaseSync):
18
+ DOC_URI = (
19
+ "https://docs.aws.amazon.com/cli/v1/topic/"
20
+ "s3-case-insensitivity.html"
21
+ )
22
+
23
+ def __init__(
24
+ self,
25
+ sync_type='file_not_at_dest',
26
+ on_case_conflict='ignore',
27
+ submitted=None,
28
+ ):
29
+ super().__init__(sync_type)
30
+ self._on_case_conflict = on_case_conflict
31
+ if submitted is None:
32
+ submitted = set()
33
+ self._submitted = submitted
34
+
35
+ @property
36
+ def submitted(self):
37
+ return self._submitted
38
+
39
+ def determine_should_sync(self, src_file, dest_file):
40
+ # `src_file.compare_key` and `dest_file.compare_key` are not equal.
41
+ # This could mean that they're completely different or differ
42
+ # only by case. eg, `/tmp/a` and `/tmp/b` versus `/tmp/a` and `/tmp/A`.
43
+ # If the source file's destination already exists, that means it
44
+ # differs only by case and the conflict needs to be handled.
45
+ should_sync = True
46
+ # Normalize compare key for case sensitivity.
47
+ lower_compare_key = src_file.compare_key.lower()
48
+ if lower_compare_key in self._submitted or os.path.exists(
49
+ src_file.dest
50
+ ):
51
+ handler = getattr(self, f"_handle_{self._on_case_conflict}")
52
+ should_sync = handler(src_file)
53
+ if should_sync:
54
+ LOG.debug(f"syncing: {src_file.src} -> {src_file.dest}")
55
+ self._submitted.add(lower_compare_key)
56
+ # Set properties so that a subscriber can be created
57
+ # that removes the key from the set after download finishes.
58
+ src_file.case_conflict_submitted = self._submitted
59
+ src_file.case_conflict_key = lower_compare_key
60
+ return should_sync
61
+
62
+ @staticmethod
63
+ def _handle_ignore(src_file):
64
+ return True
65
+
66
+ @staticmethod
67
+ def _handle_skip(src_file):
68
+ msg = (
69
+ f"warning: Skipping {src_file.src} -> {src_file.dest} "
70
+ "because a file whose name differs only by case either exists "
71
+ "or is being downloaded.\n"
72
+ )
73
+ uni_print(msg, sys.stderr)
74
+ return False
75
+
76
+ @staticmethod
77
+ def _handle_warn(src_file):
78
+ msg = (
79
+ f"warning: Downloading {src_file.src} -> {src_file.dest} "
80
+ "despite a file whose name differs only by case either existing "
81
+ "or being downloaded. This behavior is not defined on "
82
+ "case-insensitive filesystems and may result in overwriting "
83
+ "existing files or race conditions between concurrent downloads. "
84
+ f"For more information, see {CaseConflictSync.DOC_URI}.\n"
85
+ )
86
+ uni_print(msg, sys.stderr)
87
+ return True
88
+
89
+ @staticmethod
90
+ def _handle_error(src_file):
91
+ msg = (
92
+ f"Failed to download {src_file.src} -> {src_file.dest} "
93
+ "because a file whose name differs only by case either exists "
94
+ "or is being downloaded."
95
+ )
96
+ raise CaseConflictException(msg)
@@ -690,6 +690,20 @@ class OnDoneFilteredSubscriber(BaseSubscriber):
690
690
  pass
691
691
 
692
692
 
693
+ class CaseConflictCleanupSubscriber(BaseSubscriber):
694
+ """
695
+ A subscriber which removes object compare key from case conflict set
696
+ when download finishes.
697
+ """
698
+
699
+ def __init__(self, submitted, case_conflict_key):
700
+ self._submitted = submitted
701
+ self._key = case_conflict_key
702
+
703
+ def on_done(self, future, **kwargs):
704
+ self._submitted.discard(self._key)
705
+
706
+
693
707
  class DeleteSourceSubscriber(OnDoneFilteredSubscriber):
694
708
  """A subscriber which deletes the source of the transfer."""
695
709
  def _on_success(self, future):
@@ -27,9 +27,14 @@ There's nothing currently done for timestamps, but this will change
27
27
  in the future.
28
28
 
29
29
  """
30
+ import sys
31
+
30
32
  from botocore.utils import parse_timestamp
31
33
  from botocore.exceptions import ProfileNotFound
32
34
 
35
+ from awscli.customizations.utils import uni_print
36
+ from awscli.utils import resolve_v2_debug_mode
37
+
33
38
 
34
39
  def register_scalar_parser(event_handlers):
35
40
  event_handlers.register_first(
@@ -44,12 +49,20 @@ def iso_format(value):
44
49
  return parse_timestamp(value).isoformat()
45
50
 
46
51
 
47
- def add_timestamp_parser(session):
52
+ def add_timestamp_parser(session, v2_debug=False):
48
53
  factory = session.get_component('response_parser_factory')
54
+ print_v2_debug_warnings = v2_debug
49
55
  try:
50
56
  timestamp_format = session.get_scoped_config().get(
51
57
  'cli_timestamp_format',
52
- 'none')
58
+ None)
59
+ if timestamp_format is not None:
60
+ # We do not want to print v2 debug warnings if the user explicitly
61
+ # configured the cli_timestamp_format, they would not be
62
+ # broken in that case.
63
+ print_v2_debug_warnings = False
64
+ else:
65
+ timestamp_format = 'wire'
53
66
  except ProfileNotFound:
54
67
  # If a --profile is provided that does not exist, loading
55
68
  # a value from get_scoped_config will crash the CLI.
@@ -57,23 +70,49 @@ def add_timestamp_parser(session):
57
70
  # the session-initialized event, which happens before a
58
71
  # profile can be created, even if the command would have
59
72
  # successfully created a profile. Instead of crashing here
60
- # on a ProfileNotFound the CLI should just use 'none'.
61
- timestamp_format = 'none'
62
- if timestamp_format == 'none':
73
+ # on a ProfileNotFound the CLI should just use 'wire'.
74
+ timestamp_format = 'wire'
75
+ # We also support 'none' for backwards compatibility reasons, though we
76
+ # document 'wire' instead.
77
+ if timestamp_format == 'wire' or timestamp_format == 'none':
63
78
  # For backwards compatibility reasons, we replace botocore's timestamp
64
79
  # parser (which parses to a datetime.datetime object) with the
65
80
  # identity function which prints the date exactly the same as it comes
66
81
  # across the wire.
67
- timestamp_parser = identity
82
+ encountered_timestamp = False
83
+ def identity_with_warning(x):
84
+ # To prevent printing the same warning for each timestamp in the
85
+ # response, we utilize a reference to a nonlocal variable to track
86
+ # if we have already printed the warning.
87
+ nonlocal encountered_timestamp
88
+ if not encountered_timestamp:
89
+ encountered_timestamp = True
90
+ uni_print(
91
+ '\nAWS CLI v2 UPGRADE WARNING: In AWS CLI v2, all '
92
+ 'timestamp response values are returned in the ISO 8601 '
93
+ 'format. This is different from v1 behavior, where the '
94
+ 'timestamps are returned as they appear in the service '
95
+ 'API response. To retain AWS CLI v1 behavior in AWS CLI '
96
+ 'v2, set the configuration variable '
97
+ '`cli_timestamp_format` to `wire`. See '
98
+ 'https://docs.aws.amazon.com/cli/latest/userguide/'
99
+ 'cliv2-migration-changes.html'
100
+ '#cliv2-migration-timestamp.\n',
101
+ out_file=sys.stderr
102
+ )
103
+ return identity(x)
104
+
105
+ timestamp_parser = identity_with_warning \
106
+ if print_v2_debug_warnings else identity
68
107
  elif timestamp_format == 'iso8601':
69
108
  timestamp_parser = iso_format
70
109
  else:
71
110
  raise ValueError('Unknown cli_timestamp_format value: %s, valid values'
72
- ' are "none" or "iso8601"' % timestamp_format)
111
+ ' are "none", "wire" or "iso8601"' % timestamp_format)
73
112
  factory.set_parser_defaults(timestamp_parser=timestamp_parser)
74
113
 
75
114
 
76
- def add_scalar_parsers(session, **kwargs):
115
+ def add_scalar_parsers(session, parsed_args=None, **kwargs):
77
116
  factory = session.get_component('response_parser_factory')
78
117
  factory.set_parser_defaults(blob_parser=identity)
79
- add_timestamp_parser(session)
118
+ add_timestamp_parser(session, resolve_v2_debug_mode(parsed_args))
awscli/data/cli.json CHANGED
@@ -64,6 +64,11 @@
64
64
  "dest": "connect_timeout",
65
65
  "type": "int",
66
66
  "help": "<p>The maximum socket connect time in seconds. If the value is set to 0, the socket connect will be blocking and not timeout. The default value is 60 seconds.</p>"
67
+ },
68
+ "v2-debug": {
69
+ "action": "store_true",
70
+ "dest": "v2_debug",
71
+ "help": "<p>Enable AWS CLI v2 migration assistance. Prints warnings if the command would face a breaking change after swapping AWS CLI v1 for AWS CLI v2 in the current environment. Prints one warning for each breaking change detected.</p>"
67
72
  }
68
73
  }
69
74
  }
@@ -0,0 +1,47 @@
1
+ **Example 1: To update an existing VPC link name**
2
+
3
+ The following ``update-vpc-link`` example updates the name of the specified VPC link. ::
4
+
5
+ aws apigateway update-vpc-link \
6
+ --vpc-link-id ab3de6 \
7
+ --patch-operations op=replace,path=/name,value=my-vpc-link
8
+
9
+ Output::
10
+
11
+ {
12
+ "id": "ab3de6",
13
+ "name": "my-vpc-link",
14
+ "targetArns": [
15
+ "arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/my-lb/12a456s89aaa12345"
16
+ ],
17
+ "status": "AVAILABLE",
18
+ "statusMessage": "Your vpc link is ready for use",
19
+ "tags": {}
20
+ }
21
+
22
+ For more information, see `Updating existing VPC link <https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-vpc-link.html>`__ in the *AWS CLI Command Reference*.
23
+
24
+
25
+ **Example 2: To update an existing VPC link name and description**
26
+
27
+ The following ``update-vpc-link`` example updates name of the specified VPC link. ::
28
+
29
+ aws apigateway update-vpc-link \
30
+ --vpc-link-id ab3de6 \
31
+ --patch-operations op=replace,path=/name,value=my-vpc-link op=replace,path=/description,value="My custom description"
32
+
33
+ Output::
34
+
35
+ {
36
+ "id": "ab3de6",
37
+ "name": "my-vpc-link",
38
+ "description": "My custom description",
39
+ "targetArns": [
40
+ "arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/my-lb/12a456s89aaa12345"
41
+ ],
42
+ "status": "AVAILABLE",
43
+ "statusMessage": "Your vpc link is ready for use",
44
+ "tags": {}
45
+ }
46
+
47
+ For more information, see `Updating existing VPC link <https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-vpc-link.html>`__ in the *AWS CLI Command Reference*.
@@ -0,0 +1,99 @@
1
+ **To retrieve one or more service level objective (SLO) budget reports.**
2
+
3
+ The following ``batch-get-service-level-objective-budget-report`` example retrieves one or more service level objective (SLO) budget reports. ::
4
+
5
+ aws application-signals batch-get-service-level-objective-budget-report \
6
+ --timestamp 1735059869 \
7
+ --slo-ids "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName1" "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName2"
8
+
9
+ Output::
10
+
11
+ {
12
+ "Timestamp": "2024-12-24T22:34:29+05:30",
13
+ "Reports": [{
14
+ "Arn": "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName1",
15
+ "Name": "Your SLO Name",
16
+ "EvaluationType": "PeriodBased",
17
+ "BudgetStatus": "OK",
18
+ "Attainment": 100.0,
19
+ "TotalBudgetSeconds": 6048,
20
+ "BudgetSecondsRemaining": 6048,
21
+ "Sli": {
22
+ "SliMetric": {
23
+ "MetricDataQueries": [{
24
+ "Id": "m1",
25
+ "MetricStat": {
26
+ "Metric": {
27
+ "Namespace": "AWS/EC2",
28
+ "MetricName": "CPUUtilization",
29
+ "Dimensions": [{
30
+ "Name": "InstanceId",
31
+ "Value": "i-0e098765432522"
32
+ }]
33
+ },
34
+ "Period": 60,
35
+ "Stat": "Average"
36
+ },
37
+ "ReturnData": true
38
+ }]
39
+ },
40
+ "MetricThreshold": 200.0,
41
+ "ComparisonOperator": "LessThanOrEqualTo"
42
+ },
43
+ "Goal": {
44
+ "Interval": {
45
+ "RollingInterval": {
46
+ "DurationUnit": "DAY",
47
+ "Duration": 7
48
+ }
49
+ },
50
+ "AttainmentGoal": 99.0,
51
+ "WarningThreshold": 50.0
52
+ }
53
+ },
54
+ {
55
+ "Arn": "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName2",
56
+ "Name": "test",
57
+ "EvaluationType": "PeriodBased",
58
+ "BudgetStatus": "BREACHED",
59
+ "Attainment": 97.39583275,
60
+ "TotalBudgetSeconds": 86,
61
+ "BudgetSecondsRemaining": -2154,
62
+ "Sli": {
63
+ "SliMetric": {
64
+ "MetricDataQueries": [{
65
+ "Id": "cwMetric",
66
+ "MetricStat": {
67
+ "Metric": {
68
+ "Namespace": "AWS/EC2",
69
+ "MetricName": "CPUUtilization",
70
+ "Dimensions": [{
71
+ "Name": "InstanceId",
72
+ "Value": "i-0e12345678922"
73
+ }]
74
+ },
75
+ "Period": 300,
76
+ "Stat": "Average"
77
+ },
78
+ "ReturnData": true
79
+ }]
80
+ },
81
+ "MetricThreshold": 5.0,
82
+ "ComparisonOperator": "GreaterThan"
83
+ },
84
+ "Goal": {
85
+ "Interval": {
86
+ "RollingInterval": {
87
+ "DurationUnit": "DAY",
88
+ "Duration": 1
89
+ }
90
+ },
91
+ "AttainmentGoal": 99.9,
92
+ "WarningThreshold": 30.0
93
+ }
94
+ }
95
+ ],
96
+ "Errors": []
97
+ }
98
+
99
+ For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
@@ -0,0 +1,88 @@
1
+ **To create a service level objective (SLO)**
2
+
3
+ The following ``create-service-level-objective`` example creates a service level objective (SLO), which can help you ensure that your critical business operations are meeting customer expectations. ::
4
+
5
+ aws application-signals create-service-level-objective \
6
+ --name "SLOName" \
7
+ --description "Description of your SLO" \
8
+ --sli-config file://sli-config.json
9
+
10
+ Contents of ``sli-config.json``::
11
+
12
+ {
13
+ "SliMetricConfig": {
14
+ "MetricDataQueries": [
15
+ {
16
+ "Id": "m1",
17
+ "MetricStat": {
18
+ "Metric": {
19
+ "Namespace": "AWS/EC2",
20
+ "MetricName": "CPUUtilization",
21
+ "Dimensions": [
22
+ {
23
+ "Name": "InstanceId",
24
+ "Value": "i-0e5a1234561522"
25
+ }
26
+ ]
27
+ },
28
+ "Period": 60,
29
+ "Stat": "Average"
30
+ },
31
+ "ReturnData": true
32
+ }
33
+ ]
34
+ },
35
+ "MetricThreshold": 200,
36
+ "ComparisonOperator": "LessThanOrEqualTo"
37
+ }
38
+
39
+ Output::
40
+
41
+ {
42
+ "Slo": {
43
+ "Arn": "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName",
44
+ "Name": "SLOName",
45
+ "Description": "Description of your SLO",
46
+ "CreatedTime": "2024-12-27T08:16:09.032000+05:30",
47
+ "LastUpdatedTime": "2024-12-27T08:16:09.032000+05:30",
48
+ "Sli": {
49
+ "SliMetric": {
50
+ "MetricDataQueries": [
51
+ {
52
+ "Id": "m1",
53
+ "MetricStat": {
54
+ "Metric": {
55
+ "Namespace": "AWS/EC2",
56
+ "MetricName": "CPUUtilization",
57
+ "Dimensions": [
58
+ {
59
+ "Name": "InstanceId",
60
+ "Value": "i-0e59876543234522"
61
+ }
62
+ ]
63
+ },
64
+ "Period": 60,
65
+ "Stat": "Average"
66
+ },
67
+ "ReturnData": true
68
+ }
69
+ ]
70
+ },
71
+ "MetricThreshold": 200.0,
72
+ "ComparisonOperator": "LessThanOrEqualTo"
73
+ },
74
+ "EvaluationType": "PeriodBased",
75
+ "Goal": {
76
+ "Interval": {
77
+ "RollingInterval": {
78
+ "DurationUnit": "DAY",
79
+ "Duration": 7
80
+ }
81
+ },
82
+ "AttainmentGoal": 99.0,
83
+ "WarningThreshold": 50.0
84
+ }
85
+ }
86
+ }
87
+
88
+ For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
@@ -0,0 +1,10 @@
1
+ **To delete the specified service level objective.**
2
+
3
+ The following ``delete-service-level-objective`` example deletes the specified service level objective. ::
4
+
5
+ aws application-signals delete-service-level-objective \
6
+ --id "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName"
7
+
8
+ This command produces no output.
9
+
10
+ For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
@@ -0,0 +1,53 @@
1
+ **To return information about one SLO created in the account**
2
+
3
+ The following ``get-service-level-objective`` example returns information about one SLO created in the account. ::
4
+
5
+ aws application-signals get-service-level-objective \
6
+ --id "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName"
7
+
8
+ Output::
9
+
10
+ {
11
+ "Slo": {
12
+ "Arn": "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName",
13
+ "Name": "SLOName",
14
+ "Description": "Description of your SLO",
15
+ "CreatedTime": "2024-12-24T22:19:18.624000+05:30",
16
+ "LastUpdatedTime": "2024-12-24T22:19:55.280000+05:30",
17
+ "Sli": {
18
+ "SliMetric": {
19
+ "MetricDataQueries": [{
20
+ "Id": "m1",
21
+ "MetricStat": {
22
+ "Metric": {
23
+ "Namespace": "AWS/EC2",
24
+ "MetricName": "CPUUtilization",
25
+ "Dimensions": [{
26
+ "Name": "InstanceId",
27
+ "Value": "i-0e0987654321522"
28
+ }]
29
+ },
30
+ "Period": 60,
31
+ "Stat": "Average"
32
+ },
33
+ "ReturnData": true
34
+ }]
35
+ },
36
+ "MetricThreshold": 200.0,
37
+ "ComparisonOperator": "LessThanOrEqualTo"
38
+ },
39
+ "EvaluationType": "PeriodBased",
40
+ "Goal": {
41
+ "Interval": {
42
+ "RollingInterval": {
43
+ "DurationUnit": "DAY",
44
+ "Duration": 7
45
+ }
46
+ },
47
+ "AttainmentGoal": 99.0,
48
+ "WarningThreshold": 50.0
49
+ }
50
+ }
51
+ }
52
+
53
+ For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.
@@ -0,0 +1,72 @@
1
+ **To return information about a service discovered by Application Signals**
2
+
3
+ The following ``get-service`` example returns information about a service discovered by Application Signals. ::
4
+
5
+ aws application-signals get-service \
6
+ --start-time 1732704000 \
7
+ --end-time 1732714500 \
8
+ --key-attributes Environment=lambda:default,Name=hello-world-python,Type=Service
9
+
10
+ Output::
11
+
12
+ {
13
+ "Service": {
14
+ "KeyAttributes": {
15
+ "Environment": "lambda:default",
16
+ "Name": "hello-world-python",
17
+ "Type": "Service"
18
+ },
19
+ "AttributeMaps": [{
20
+ "Lambda.Function.Name": "hello-world-python",
21
+ "PlatformType": "AWS::Lambda"
22
+ }],
23
+ "MetricReferences": [{
24
+ "Namespace": "ApplicationSignals",
25
+ "MetricType": "LATENCY",
26
+ "Dimensions": [{
27
+ "Name": "Environment",
28
+ "Value": "lambda:default"
29
+ }, {
30
+ "Name": "Service",
31
+ "Value": "hello-world-python"
32
+ }],
33
+ "MetricName": "Latency"
34
+ }, {
35
+ "Namespace": "ApplicationSignals",
36
+ "MetricType": "FAULT",
37
+ "Dimensions": [{
38
+ "Name": "Environment",
39
+ "Value": "lambda:default"
40
+ }, {
41
+ "Name": "Service",
42
+ "Value": "hello-world-python"
43
+ }],
44
+ "MetricName": "Fault"
45
+ }, {
46
+ "Namespace": "ApplicationSignals",
47
+ "MetricType": "ERROR",
48
+ "Dimensions": [{
49
+ "Name": "Environment",
50
+ "Value": "lambda:default"
51
+ }, {
52
+ "Name": "Service",
53
+ "Value": "hello-world-python"
54
+ }],
55
+ "MetricName": "Error"
56
+ }],
57
+ "LogGroupReferences": [{
58
+ "Identifier": "/aws/lambda/hello-world-python",
59
+ "ResourceType": "AWS::Logs::LogGroup",
60
+ "Type": "AWS::Resource"
61
+ }]
62
+ },
63
+ "StartTime": "2024-11-27T10:00:00+00:00",
64
+ "EndTime": "2024-11-27T14:00:01+00:00",
65
+ "LogGroupReferences": [{
66
+ "Identifier": "/aws/lambda/hello-world-python",
67
+ "ResourceType": "AWS::Logs::LogGroup",
68
+ "Type": "AWS::Resource"
69
+ }]
70
+ }
71
+
72
+ For more information, see `Application Signals <https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html>`__ in the *Amazon CloudWatch User Guide*.