awscli 1.40.17__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 (401) 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 +57 -10
  8. awscli/compat.py +11 -0
  9. awscli/customizations/argrename.py +1 -3
  10. awscli/customizations/cliinputjson.py +4 -0
  11. awscli/customizations/cloudformation/deploy.py +23 -6
  12. awscli/customizations/cloudformation/deployer.py +2 -2
  13. awscli/customizations/cloudformation/package.py +3 -2
  14. awscli/customizations/cloudfront.py +3 -1
  15. awscli/customizations/cloudtrail/subscribe.py +5 -5
  16. awscli/customizations/cloudtrail/validation.py +32 -11
  17. awscli/customizations/codecommit.py +2 -3
  18. awscli/customizations/codedeploy/deregister.py +5 -2
  19. awscli/customizations/codedeploy/push.py +7 -6
  20. awscli/customizations/codedeploy/register.py +5 -2
  21. awscli/customizations/codedeploy/systems.py +3 -1
  22. awscli/customizations/commands.py +2 -1
  23. awscli/customizations/configservice/getstatus.py +3 -3
  24. awscli/customizations/datapipeline/__init__.py +7 -4
  25. awscli/customizations/datapipeline/createdefaultroles.py +4 -2
  26. awscli/customizations/dlm/createdefaultrole.py +4 -2
  27. awscli/customizations/ec2/bundleinstance.py +2 -1
  28. awscli/customizations/eks/get_token.py +6 -4
  29. awscli/customizations/eks/update_kubeconfig.py +15 -3
  30. awscli/customizations/emr/argumentschema.py +355 -344
  31. awscli/customizations/emr/createcluster.py +520 -282
  32. awscli/customizations/emr/emrutils.py +83 -50
  33. awscli/customizations/emr/helptext.py +132 -74
  34. awscli/customizations/emr/steputils.py +92 -52
  35. awscli/customizations/gamelift/getlog.py +3 -2
  36. awscli/customizations/gamelift/uploadbuild.py +30 -15
  37. awscli/customizations/globalargs.py +169 -0
  38. awscli/customizations/logs/startlivetail.py +3 -3
  39. awscli/customizations/paginate.py +66 -1
  40. awscli/customizations/rds.py +3 -1
  41. awscli/customizations/removals.py +4 -0
  42. awscli/customizations/s3/filegenerator.py +7 -1
  43. awscli/customizations/s3/fileinfo.py +5 -1
  44. awscli/customizations/s3/fileinfobuilder.py +7 -0
  45. awscli/customizations/s3/s3handler.py +11 -0
  46. awscli/customizations/s3/subcommands.py +147 -6
  47. awscli/customizations/s3/syncstrategy/base.py +9 -0
  48. awscli/customizations/s3/syncstrategy/caseconflict.py +96 -0
  49. awscli/customizations/s3/utils.py +25 -0
  50. awscli/customizations/s3uploader.py +18 -8
  51. awscli/customizations/scalarparse.py +48 -9
  52. awscli/customizations/utils.py +2 -1
  53. awscli/customizations/waiters.py +3 -2
  54. awscli/data/cli.json +5 -0
  55. awscli/examples/apigateway/update-vpc-link.rst +47 -0
  56. awscli/examples/apigatewayv2/create-routing-rule.rst +52 -0
  57. awscli/examples/apigatewayv2/delete-routing-rule.rst +11 -0
  58. awscli/examples/apigatewayv2/get-routing-rule.rst +35 -0
  59. awscli/examples/apigatewayv2/list-routing-rules.rst +38 -0
  60. awscli/examples/apigatewayv2/put-routing-rule.rst +52 -0
  61. awscli/examples/application-signals/batch-get-service-level-objective-budget-report.rst +99 -0
  62. awscli/examples/application-signals/create-service-level-objective.rst +88 -0
  63. awscli/examples/application-signals/delete-service-level-objective.rst +10 -0
  64. awscli/examples/application-signals/get-service-level-objective.rst +53 -0
  65. awscli/examples/application-signals/get-service.rst +72 -0
  66. awscli/examples/application-signals/list-service-dependencies.rst +96 -0
  67. awscli/examples/application-signals/list-service-dependents.rst +36 -0
  68. awscli/examples/application-signals/list-service-level-objectives.rst +17 -0
  69. awscli/examples/application-signals/list-service-operations.rst +63 -0
  70. awscli/examples/application-signals/list-services.rst +61 -0
  71. awscli/examples/application-signals/list-tags-for-resource.rst +17 -0
  72. awscli/examples/application-signals/start-discovery.rst +9 -0
  73. awscli/examples/application-signals/tag-resource.rst +11 -0
  74. awscli/examples/application-signals/untag-resource.rst +11 -0
  75. awscli/examples/application-signals/update-service-level-objective.rst +69 -0
  76. awscli/examples/cloudformation/_package_description.rst +4 -4
  77. awscli/examples/cloudformation/create-generated-template.rst +50 -0
  78. awscli/examples/cloudformation/create-stack-refactor.rst +16 -0
  79. awscli/examples/cloudformation/delete-generated-template.rst +10 -0
  80. awscli/examples/cloudformation/describe-generated-template.rst +62 -0
  81. awscli/examples/cloudformation/describe-resource-scan.rst +38 -0
  82. awscli/examples/cloudformation/describe-stack-refactor.rst +20 -0
  83. awscli/examples/cloudformation/execute-stack-refactor.rst +10 -0
  84. awscli/examples/cloudformation/list-generated-templates.rst +41 -0
  85. awscli/examples/cloudformation/list-resource-scan-related-resources.rst +47 -0
  86. awscli/examples/cloudformation/list-resource-scan-resources.rst +30 -0
  87. awscli/examples/cloudformation/list-stack-refactor-actions.rst +71 -0
  88. awscli/examples/cloudformation/start-resource-scan.rst +14 -0
  89. awscli/examples/cloudfront/associate-distribution-tenant-web-acl.rst +18 -0
  90. awscli/examples/cloudfront/associate-distribution-web-acl.rst +18 -0
  91. awscli/examples/cloudfront/create-connection-group.rst +39 -0
  92. awscli/examples/cloudfront/create-distribution-tenant.rst +275 -0
  93. awscli/examples/cloudfront/create-distribution.rst +625 -235
  94. awscli/examples/cloudfront/create-invalidation-for-distribution-tenant.rst +29 -0
  95. awscli/examples/cloudfront/delete-connection-group.rst +11 -0
  96. awscli/examples/cloudfront/delete-distribution-tenant.rst +11 -0
  97. awscli/examples/cloudfront/disassociate-distribution-tenant-web-acl.rst +16 -0
  98. awscli/examples/cloudfront/disassociate-distribution-web-acl.rst +16 -0
  99. awscli/examples/cloudfront/get-connection-group-by-routing-endpoint.rst +26 -0
  100. awscli/examples/cloudfront/get-connection-group.rst +26 -0
  101. awscli/examples/cloudfront/get-distribution-tenant-by-domain.rst +37 -0
  102. awscli/examples/cloudfront/get-distribution-tenant.rst +31 -0
  103. awscli/examples/cloudfront/get-invalidation-for-distribution-tenant.rst +29 -0
  104. awscli/examples/cloudfront/get-managed-certificate-details.rst +25 -0
  105. awscli/examples/cloudfront/list-connection-groups.rst +38 -0
  106. awscli/examples/cloudfront/list-distribution-tenants-by-customization.rst +45 -0
  107. awscli/examples/cloudfront/list-distribution-tenants.rst +90 -0
  108. awscli/examples/cloudfront/list-distributions-by-connection-mode.rst +115 -0
  109. awscli/examples/cloudfront/list-domain-conflicts.rst +22 -0
  110. awscli/examples/cloudfront/list-invalidations-for-distribution-tenant.rst +22 -0
  111. awscli/examples/cloudfront/update-connection-group.rst +29 -0
  112. awscli/examples/cloudfront/update-distribution-tenant.rst +76 -0
  113. awscli/examples/cloudfront/update-domain-association.rst +18 -0
  114. awscli/examples/cloudfront/verify-dns-configuration.rst +20 -0
  115. awscli/examples/ec2/associate-ipam-resource-discovery.rst +1 -1
  116. awscli/examples/ec2/authorize-security-group-ingress.rst +1 -1
  117. awscli/examples/ec2/create-ipam-resource-discovery.rst +1 -1
  118. awscli/examples/ec2/delete-ipam-pool.rst +1 -1
  119. awscli/examples/ec2/describe-addresses-attribute.rst +1 -1
  120. awscli/examples/ec2/get-ipam-discovered-public-addresses.rst +1 -1
  121. awscli/examples/ec2/modify-ipam-resource-discovery.rst +1 -1
  122. awscli/examples/ec2/modify-ipam-scope.rst +1 -1
  123. awscli/examples/ec2/release-ipam-pool-allocation.rst +3 -3
  124. awscli/examples/eks/associate-access-policy.rst +29 -0
  125. awscli/examples/eks/create-access-entry.rst +54 -0
  126. awscli/examples/eks/create-pod-identity-association.rst +59 -0
  127. awscli/examples/eks/delete-access-entry.rst +11 -0
  128. awscli/examples/eks/delete-pod-identity-association.rst +28 -0
  129. awscli/examples/eks/describe-access-entry.rst +25 -0
  130. awscli/examples/eks/describe-insight.rst +36 -0
  131. awscli/examples/eks/describe-pod-identity-association.rst +28 -0
  132. awscli/examples/eks/disassociate-access-policy.rst +12 -0
  133. awscli/examples/eks/list-access-entries.rst +19 -0
  134. awscli/examples/eks/list-access-policies.rst +90 -0
  135. awscli/examples/eks/list-associated-access-policies.rst +27 -0
  136. awscli/examples/eks/list-insights.rst +67 -0
  137. awscli/examples/eks/list-pod-identity-associations.rst +61 -0
  138. awscli/examples/eks/update-access-entry.rst +28 -0
  139. awscli/examples/eks/update-pod-identity-association.rst +29 -0
  140. awscli/examples/elbv2/modify-listener.rst +95 -86
  141. awscli/examples/emr/create-cluster-synopsis.txt +1 -0
  142. awscli/examples/global_options.rst +4 -0
  143. awscli/examples/global_synopsis.rst +1 -0
  144. awscli/examples/guardduty/update-detector.rst +23 -0
  145. awscli/examples/ivs-realtime/create-stage.rst +6 -3
  146. awscli/examples/ivs-realtime/get-composition.rst +7 -4
  147. awscli/examples/ivs-realtime/get-participant.rst +99 -31
  148. awscli/examples/ivs-realtime/get-stage.rst +3 -2
  149. awscli/examples/ivs-realtime/list-participant-events.rst +54 -2
  150. awscli/examples/ivs-realtime/list-participant-replicas.rst +24 -0
  151. awscli/examples/ivs-realtime/list-participants.rst +61 -3
  152. awscli/examples/ivs-realtime/start-composition.rst +88 -3
  153. awscli/examples/ivs-realtime/start-participant-replication.rst +24 -0
  154. awscli/examples/ivs-realtime/stop-participant-replication.rst +24 -0
  155. awscli/examples/ivs-realtime/update-stage.rst +51 -3
  156. awscli/examples/kms/create-key.rst +42 -7
  157. awscli/examples/kms/delete-imported-key-material.rst +8 -2
  158. awscli/examples/kms/describe-key.rst +2 -0
  159. awscli/examples/kms/disable-key.rst +1 -1
  160. awscli/examples/kms/generate-data-key-pair-without-plaintext.rst +1 -0
  161. awscli/examples/kms/generate-data-key-pair.rst +1 -0
  162. awscli/examples/kms/generate-data-key-without-plaintext.rst +2 -1
  163. awscli/examples/kms/generate-data-key.rst +5 -4
  164. awscli/examples/kms/generate-mac.rst +45 -0
  165. awscli/examples/kms/generate-random.rst +1 -1
  166. awscli/examples/kms/get-public-key.rst +2 -3
  167. awscli/examples/kms/import-key-material.rst +6 -1
  168. awscli/examples/kms/re-encrypt.rst +3 -3
  169. awscli/examples/kms/sign.rst +1 -1
  170. awscli/examples/kms/verify-mac.rst +27 -0
  171. awscli/examples/kms/verify.rst +5 -1
  172. awscli/examples/lambda/create-function.rst +4 -4
  173. awscli/examples/lambda/get-function.rst +3 -3
  174. awscli/examples/lambda/list-functions.rst +6 -6
  175. awscli/examples/medical-imaging/create-datastore.rst +19 -2
  176. awscli/examples/medical-imaging/get-datastore.rst +24 -1
  177. awscli/examples/networkmanager/get-vpc-attachment.rst +1 -1
  178. awscli/examples/omics/cancel-run.rst +1 -1
  179. awscli/examples/omics/create-run-group.rst +4 -2
  180. awscli/examples/omics/create-workflow.rst +1 -1
  181. awscli/examples/omics/delete-run-group.rst +1 -1
  182. awscli/examples/omics/delete-run.rst +1 -1
  183. awscli/examples/omics/delete-workflow.rst +1 -1
  184. awscli/examples/omics/get-run-group.rst +1 -1
  185. awscli/examples/omics/get-run-task.rst +1 -1
  186. awscli/examples/omics/get-run.rst +1 -1
  187. awscli/examples/omics/get-workflow.rst +1 -1
  188. awscli/examples/omics/list-run-groups.rst +1 -1
  189. awscli/examples/omics/list-run-tasks.rst +1 -1
  190. awscli/examples/omics/list-runs.rst +1 -1
  191. awscli/examples/omics/list-workflows.rst +1 -1
  192. awscli/examples/omics/start-run.rst +1 -2
  193. awscli/examples/omics/update-workflow.rst +1 -1
  194. awscli/examples/pi/create-performance-analysis-report.rst +17 -0
  195. awscli/examples/pi/delete-performance-analysis-report.rst +12 -0
  196. awscli/examples/pi/describe-dimension-keys.rst +33 -1
  197. awscli/examples/pi/get-dimension-key-details.rst +25 -0
  198. awscli/examples/pi/get-performance-analysis-report.rst +27 -0
  199. awscli/examples/pi/get-resource-metadata.rst +20 -0
  200. awscli/examples/pi/list-available-resource-dimensions.rst +48 -0
  201. awscli/examples/pi/list-available-resource-metrics.rst +29 -0
  202. awscli/examples/pi/list-performance-analysis-reports.rst +44 -0
  203. awscli/examples/pi/list-tags-for-resource.rst +20 -0
  204. awscli/examples/pi/tag-resource.rst +12 -0
  205. awscli/examples/pi/untag-resource.rst +12 -0
  206. awscli/examples/route53domains/get-domain-detail.rst +3 -3
  207. awscli/examples/securityhub/describe-hub.rst +6 -4
  208. awscli/examples/servicediscovery/create-service.rst +50 -10
  209. awscli/examples/servicediscovery/delete-namespace.rst +18 -4
  210. awscli/examples/servicediscovery/delete-service-attributes.rst +15 -3
  211. awscli/examples/servicediscovery/delete-service.rst +13 -3
  212. awscli/examples/servicediscovery/deregister-instance.rst +18 -2
  213. awscli/examples/servicediscovery/discover-instances-revision.rst +18 -1
  214. awscli/examples/servicediscovery/discover-instances.rst +32 -2
  215. awscli/examples/servicediscovery/get-instance.rst +30 -4
  216. awscli/examples/servicediscovery/get-instances-health-status.rst +19 -1
  217. awscli/examples/servicediscovery/get-namespace.rst +40 -9
  218. awscli/examples/servicediscovery/get-operation.rst +32 -6
  219. awscli/examples/servicediscovery/get-service-attributes.rst +25 -3
  220. awscli/examples/servicediscovery/get-service.rst +35 -7
  221. awscli/examples/servicediscovery/list-instances.rst +38 -3
  222. awscli/examples/servicediscovery/list-namespaces.rst +45 -22
  223. awscli/examples/servicediscovery/list-services.rst +30 -2
  224. awscli/examples/servicediscovery/register-instance.rst +18 -2
  225. awscli/examples/servicediscovery/update-http-namespace.rst +22 -5
  226. awscli/examples/servicediscovery/update-instance-custom-health-status.rst +14 -1
  227. awscli/examples/servicediscovery/update-private-dns-namespace.rst +22 -5
  228. awscli/examples/servicediscovery/update-public-dns-namespace.rst +22 -5
  229. awscli/examples/servicediscovery/update-service-attributes.rst +14 -2
  230. awscli/examples/servicediscovery/update-service.rst +20 -4
  231. awscli/examples/ssm/put-parameter.rst +6 -6
  232. awscli/examples/verifiedpermissions/update-policy.rst +10 -78
  233. awscli/examples/workspaces/describe-workspace-directories.rst +1 -2
  234. awscli/examples/workspaces/register-workspace-directory.rst +2 -3
  235. awscli/handlers.py +0 -4
  236. awscli/paramfile.py +21 -4
  237. awscli/testutils.py +22 -4
  238. awscli/topics/config-vars.rst +1 -1
  239. awscli/topics/s3-case-insensitivity.rst +105 -0
  240. awscli/topics/topic-tags.json +16 -0
  241. awscli/utils.py +33 -2
  242. {awscli-1.40.17.dist-info → awscli-1.44.26.dist-info}/METADATA +18 -3
  243. {awscli-1.40.17.dist-info → awscli-1.44.26.dist-info}/RECORD +251 -308
  244. awscli/customizations/opsworks.py +0 -543
  245. awscli/customizations/opsworkscm.py +0 -21
  246. awscli/examples/elastictranscoder/cancel-job.rst +0 -8
  247. awscli/examples/elastictranscoder/create-job.rst +0 -94
  248. awscli/examples/elastictranscoder/create-pipeline.rst +0 -94
  249. awscli/examples/elastictranscoder/create-preset.rst +0 -141
  250. awscli/examples/elastictranscoder/delete-pipeline.rst +0 -13
  251. awscli/examples/elastictranscoder/delete-preset.rst +0 -8
  252. awscli/examples/elastictranscoder/list-jobs-by-pipeline.rst +0 -13
  253. awscli/examples/elastictranscoder/list-jobs-by-status.rst +0 -14
  254. awscli/examples/elastictranscoder/list-pipelines.rst +0 -84
  255. awscli/examples/elastictranscoder/list-presets.rst +0 -95
  256. awscli/examples/elastictranscoder/read-job.rst +0 -65
  257. awscli/examples/elastictranscoder/read-pipeline.rst +0 -59
  258. awscli/examples/elastictranscoder/read-preset.rst +0 -100
  259. awscli/examples/elastictranscoder/update-pipeline-notifications.rst +0 -52
  260. awscli/examples/elastictranscoder/update-pipeline-status.rst +0 -53
  261. awscli/examples/elastictranscoder/update-pipeline.rst +0 -95
  262. awscli/examples/opsworks/assign-instance.rst +0 -14
  263. awscli/examples/opsworks/assign-volume.rst +0 -17
  264. awscli/examples/opsworks/associate-elastic-ip.rst +0 -14
  265. awscli/examples/opsworks/attach-elastic-load-balancer.rst +0 -14
  266. awscli/examples/opsworks/create-app.rst +0 -64
  267. awscli/examples/opsworks/create-deployment.rst +0 -66
  268. awscli/examples/opsworks/create-instance.rst +0 -25
  269. awscli/examples/opsworks/create-layer.rst +0 -17
  270. awscli/examples/opsworks/create-server.rst +0 -43
  271. awscli/examples/opsworks/create-stack.rst +0 -25
  272. awscli/examples/opsworks/create-user-profile.rst +0 -24
  273. awscli/examples/opsworks/delete-app.rst +0 -17
  274. awscli/examples/opsworks/delete-instance.rst +0 -15
  275. awscli/examples/opsworks/delete-layer.rst +0 -17
  276. awscli/examples/opsworks/delete-stack.rst +0 -18
  277. awscli/examples/opsworks/delete-user-profile.rst +0 -17
  278. awscli/examples/opsworks/deregister-elastic-ip.rst +0 -13
  279. awscli/examples/opsworks/deregister-instance.rst +0 -14
  280. awscli/examples/opsworks/deregister-rds-db-instance.rst +0 -20
  281. awscli/examples/opsworks/deregister-volume.rst +0 -15
  282. awscli/examples/opsworks/describe-apps.rst +0 -38
  283. awscli/examples/opsworks/describe-commands.rst +0 -43
  284. awscli/examples/opsworks/describe-deployments.rst +0 -52
  285. awscli/examples/opsworks/describe-elastic-ips.rst +0 -24
  286. awscli/examples/opsworks/describe-elastic-load-balancers.rst +0 -37
  287. awscli/examples/opsworks/describe-instances.rst +0 -95
  288. awscli/examples/opsworks/describe-layers.rst +0 -171
  289. awscli/examples/opsworks/describe-load-based-auto-scaling.rst +0 -37
  290. awscli/examples/opsworks/describe-my-user-profile.rst +0 -24
  291. awscli/examples/opsworks/describe-permissions.rst +0 -26
  292. awscli/examples/opsworks/describe-raid-arrays.rst +0 -31
  293. awscli/examples/opsworks/describe-rds-db-instances.rst +0 -29
  294. awscli/examples/opsworks/describe-stack-provisioning-parameters.rst +0 -32
  295. awscli/examples/opsworks/describe-stack-summary.rst +0 -27
  296. awscli/examples/opsworks/describe-stacks.rst +0 -65
  297. awscli/examples/opsworks/describe-timebased-auto-scaling.rst +0 -39
  298. awscli/examples/opsworks/describe-user-profiles.rst +0 -32
  299. awscli/examples/opsworks/describe-volumes.rst +0 -31
  300. awscli/examples/opsworks/detach-elastic-load-balancer.rst +0 -14
  301. awscli/examples/opsworks/disassociate-elastic-ip.rst +0 -14
  302. awscli/examples/opsworks/get-hostname-suggestion.rst +0 -21
  303. awscli/examples/opsworks/reboot-instance.rst +0 -14
  304. awscli/examples/opsworks/register-elastic-ip.rst +0 -19
  305. awscli/examples/opsworks/register-rds-db-instance.rst +0 -15
  306. awscli/examples/opsworks/register-volume.rst +0 -18
  307. awscli/examples/opsworks/register.rst +0 -105
  308. awscli/examples/opsworks/set-load-based-auto-scaling.rst +0 -38
  309. awscli/examples/opsworks/set-permission.rst +0 -23
  310. awscli/examples/opsworks/set-time-based-auto-scaling.rst +0 -33
  311. awscli/examples/opsworks/start-instance.rst +0 -20
  312. awscli/examples/opsworks/start-stack.rst +0 -15
  313. awscli/examples/opsworks/stop-instance.rst +0 -20
  314. awscli/examples/opsworks/stop-stack.rst +0 -15
  315. awscli/examples/opsworks/unassign-instance.rst +0 -14
  316. awscli/examples/opsworks/unassign-volume.rst +0 -16
  317. awscli/examples/opsworks/update-app.rst +0 -14
  318. awscli/examples/opsworks/update-elastic-ip.rst +0 -14
  319. awscli/examples/opsworks/update-instance.rst +0 -14
  320. awscli/examples/opsworks/update-layer.rst +0 -14
  321. awscli/examples/opsworks/update-my-user-profile.rst +0 -16
  322. awscli/examples/opsworks/update-rds-db-instance.rst +0 -18
  323. awscli/examples/opsworks/update-volume.rst +0 -16
  324. awscli/examples/opsworkscm/associate-node.rst +0 -22
  325. awscli/examples/opsworkscm/create-backup.rst +0 -46
  326. awscli/examples/opsworkscm/create-server.rst +0 -48
  327. awscli/examples/opsworkscm/delete-backup.rst +0 -17
  328. awscli/examples/opsworkscm/delete-server.rst +0 -16
  329. awscli/examples/opsworkscm/describe-account-attributes.rst +0 -26
  330. awscli/examples/opsworkscm/describe-backups.rst +0 -44
  331. awscli/examples/opsworkscm/describe-events.rst +0 -21
  332. awscli/examples/opsworkscm/describe-node-association-status.rst +0 -20
  333. awscli/examples/opsworkscm/describe-servers.rst +0 -48
  334. awscli/examples/opsworkscm/disassociate-node.rst +0 -19
  335. awscli/examples/opsworkscm/restore-server.rst +0 -20
  336. awscli/examples/opsworkscm/start-maintenance.rst +0 -39
  337. awscli/examples/opsworkscm/update-server-engine-attributes.rst +0 -43
  338. awscli/examples/opsworkscm/update-server.rst +0 -42
  339. awscli/examples/qldb/cancel-journal-kinesis-stream.rst +0 -15
  340. awscli/examples/qldb/create-ledger.rst +0 -43
  341. awscli/examples/qldb/delete-ledger.rst +0 -10
  342. awscli/examples/qldb/describe-journal-kinesis-stream.rst +0 -29
  343. awscli/examples/qldb/describe-journal-s3-export.rst +0 -30
  344. awscli/examples/qldb/describe-ledger.rst +0 -23
  345. awscli/examples/qldb/export-journal-to-s3.rst +0 -28
  346. awscli/examples/qldb/get-block.rst +0 -55
  347. awscli/examples/qldb/get-digest.rst +0 -17
  348. awscli/examples/qldb/get-revision.rst +0 -57
  349. awscli/examples/qldb/list-journal-kinesis-streams-for-ledger.rst +0 -30
  350. awscli/examples/qldb/list-journal-s3-exports-for-ledger.rst +0 -31
  351. awscli/examples/qldb/list-journal-s3-exports.rst +0 -46
  352. awscli/examples/qldb/list-ledgers.rst +0 -24
  353. awscli/examples/qldb/list-tags-for-resource.rst +0 -17
  354. awscli/examples/qldb/stream-journal-to-kinesis.rst +0 -46
  355. awscli/examples/qldb/tag-resource.rst +0 -11
  356. awscli/examples/qldb/untag-resource.rst +0 -11
  357. awscli/examples/qldb/update-ledger-permissions-mode.rst +0 -34
  358. awscli/examples/qldb/update-ledger.rst +0 -63
  359. awscli/examples/robomaker/batch-describe-simulation-job.rst +0 -150
  360. awscli/examples/robomaker/cancel-simulation-job.rst +0 -6
  361. awscli/examples/robomaker/create-deployment-job.rst +0 -37
  362. awscli/examples/robomaker/create-fleet.rst +0 -18
  363. awscli/examples/robomaker/create-robot-application-version.rst +0 -31
  364. awscli/examples/robomaker/create-robot-application.rst +0 -29
  365. awscli/examples/robomaker/create-robot.rst +0 -20
  366. awscli/examples/robomaker/create-simulation-application-version.rst +0 -39
  367. awscli/examples/robomaker/create-simulation-application.rst +0 -38
  368. awscli/examples/robomaker/create-simulation-job.rst +0 -43
  369. awscli/examples/robomaker/delete-fleet.rst +0 -7
  370. awscli/examples/robomaker/delete-robot-application.rst +0 -7
  371. awscli/examples/robomaker/delete-robot.rst +0 -7
  372. awscli/examples/robomaker/delete-simulation-application.rst +0 -7
  373. awscli/examples/robomaker/deregister-robot.rst +0 -14
  374. awscli/examples/robomaker/describe-deployment-job.rst +0 -38
  375. awscli/examples/robomaker/describe-fleet.rst +0 -28
  376. awscli/examples/robomaker/describe-robot-application.rst +0 -29
  377. awscli/examples/robomaker/describe-robot.rst +0 -21
  378. awscli/examples/robomaker/describe-simulation-application.rst +0 -37
  379. awscli/examples/robomaker/describe-simulation-job.rst +0 -45
  380. awscli/examples/robomaker/list-deployment-jobs.rst +0 -57
  381. awscli/examples/robomaker/list-fleets.rst +0 -22
  382. awscli/examples/robomaker/list-robot-applications.rst +0 -32
  383. awscli/examples/robomaker/list-robots.rst +0 -45
  384. awscli/examples/robomaker/list-simulation-applications.rst +0 -50
  385. awscli/examples/robomaker/list-simulation-jobs.rst +0 -80
  386. awscli/examples/robomaker/list-tags-for-resource.rst +0 -16
  387. awscli/examples/robomaker/register-robot.rst +0 -14
  388. awscli/examples/robomaker/restart-simulation-job.rst +0 -7
  389. awscli/examples/robomaker/sync-deployment-job.rst +0 -30
  390. awscli/examples/robomaker/tag-resource.rst +0 -7
  391. awscli/examples/robomaker/untag-resource.rst +0 -7
  392. awscli/examples/robomaker/update-robot-application.rst +0 -28
  393. awscli/examples/robomaker/update-simulation-application.rst +0 -36
  394. {awscli-1.40.17.data → awscli-1.44.26.data}/scripts/aws +0 -0
  395. {awscli-1.40.17.data → awscli-1.44.26.data}/scripts/aws.cmd +0 -0
  396. {awscli-1.40.17.data → awscli-1.44.26.data}/scripts/aws_bash_completer +0 -0
  397. {awscli-1.40.17.data → awscli-1.44.26.data}/scripts/aws_completer +0 -0
  398. {awscli-1.40.17.data → awscli-1.44.26.data}/scripts/aws_zsh_completer.sh +0 -0
  399. {awscli-1.40.17.dist-info → awscli-1.44.26.dist-info}/LICENSE.txt +0 -0
  400. {awscli-1.40.17.dist-info → awscli-1.44.26.dist-info}/WHEEL +0 -0
  401. {awscli-1.40.17.dist-info → awscli-1.44.26.dist-info}/top_level.txt +0 -0
awscli/__init__.py CHANGED
@@ -18,7 +18,7 @@ A Universal Command Line Environment for Amazon Web Services.
18
18
 
19
19
  import os
20
20
 
21
- __version__ = '1.40.17'
21
+ __version__ = '1.44.26'
22
22
 
23
23
  #
24
24
  # Get our data path to be added to botocore's search path
awscli/alias.py CHANGED
@@ -183,7 +183,7 @@ class ServiceAliasCommand(BaseAliasCommand):
183
183
  parsed_alias_args, remaining = self._parser.parse_known_args(
184
184
  alias_args
185
185
  )
186
- self._update_parsed_globals(parsed_alias_args, parsed_globals)
186
+ self._update_parsed_globals(parsed_alias_args, parsed_globals, remaining)
187
187
  # Take any of the remaining arguments that were not parsed out and
188
188
  # prepend them to the remaining args provided to the alias.
189
189
  remaining.extend(args)
@@ -228,7 +228,7 @@ class ServiceAliasCommand(BaseAliasCommand):
228
228
  )
229
229
  return alias_args
230
230
 
231
- def _update_parsed_globals(self, parsed_alias_args, parsed_globals):
231
+ def _update_parsed_globals(self, parsed_alias_args, parsed_globals, remaining):
232
232
  global_params_to_update = self._get_global_parameters_to_update(
233
233
  parsed_alias_args
234
234
  )
@@ -237,7 +237,7 @@ class ServiceAliasCommand(BaseAliasCommand):
237
237
  # global parameters provided in the alias before updating
238
238
  # the original provided global parameter values
239
239
  # and passing those onto subsequent commands.
240
- emit_top_level_args_parsed_event(self._session, parsed_alias_args)
240
+ emit_top_level_args_parsed_event(self._session, parsed_alias_args, remaining)
241
241
  for param_name in global_params_to_update:
242
242
  updated_param_value = getattr(parsed_alias_args, param_name)
243
243
  setattr(parsed_globals, param_name, updated_param_value)
awscli/argprocess.py CHANGED
@@ -65,7 +65,7 @@ class TooComplexError(Exception):
65
65
 
66
66
 
67
67
  def unpack_argument(
68
- session, service_name, operation_name, cli_argument, value
68
+ session, service_name, operation_name, cli_argument, value, parsed_globals
69
69
  ):
70
70
  """
71
71
  Unpack an argument's value from the commandline. This is part one of a two
@@ -83,6 +83,7 @@ def unpack_argument(
83
83
  value=value,
84
84
  service_name=service_name,
85
85
  operation_name=operation_name,
86
+ parsed_globals=parsed_globals,
86
87
  )
87
88
 
88
89
  if value_override is not None:
@@ -535,7 +536,11 @@ class ParamShorthandDocGen(ParamShorthand):
535
536
 
536
537
  def _map_docs(self, argument_model, stack):
537
538
  k = argument_model.key
538
- value_docs = self._shorthand_docs(argument_model.value, stack)
539
+ stack.append(argument_model.value.name)
540
+ try:
541
+ value_docs = self._shorthand_docs(argument_model.value, stack)
542
+ finally:
543
+ stack.pop()
539
544
  start = 'KeyName1=%s,KeyName2=%s' % (value_docs, value_docs)
540
545
  if k.enum and not stack:
541
546
  start += '\n\nWhere valid key names are:\n'
awscli/arguments.py CHANGED
@@ -449,7 +449,7 @@ class CLIArgument(BaseCLIArgument):
449
449
  cli_name = self.cli_name
450
450
  parser.add_argument(
451
451
  cli_name,
452
- help=self.documentation,
452
+ help=self.documentation.replace('%', '%%'),
453
453
  type=self.cli_type,
454
454
  required=self.required,
455
455
  )
awscli/bcdoc/docevents.py CHANGED
@@ -13,6 +13,7 @@
13
13
 
14
14
 
15
15
  DOC_EVENTS = {
16
+ 'doc-meta-description': '.%s',
16
17
  'doc-breadcrumbs': '.%s',
17
18
  'doc-title': '.%s',
18
19
  'doc-description': '.%s',
@@ -39,6 +40,8 @@ def generate_events(session, help_command):
39
40
  # Now generate the documentation events
40
41
  session.emit('doc-breadcrumbs.%s' % help_command.event_class,
41
42
  help_command=help_command)
43
+ session.emit('doc-meta-description.%s' % help_command.event_class,
44
+ help_command=help_command)
42
45
  session.emit('doc-title.%s' % help_command.event_class,
43
46
  help_command=help_command)
44
47
  session.emit('doc-description.%s' % help_command.event_class,
awscli/clidocs.py CHANGED
@@ -17,7 +17,7 @@ import re
17
17
  from botocore.model import StringShape
18
18
  from botocore.utils import is_json_value_header
19
19
 
20
- from awscli import SCALAR_TYPES
20
+ from awscli import SCALAR_TYPES, __version__ as AWS_CLI_VERSION
21
21
  from awscli.argprocess import ParamShorthandDocGen
22
22
  from awscli.bcdoc.docevents import DOC_EVENTS
23
23
  from awscli.topictags import TopicTagDB
@@ -114,7 +114,8 @@ class CLIDocumentEventHandler:
114
114
  full_cmd_list.append(cmd)
115
115
  full_cmd_name = ' '.join(full_cmd_list)
116
116
  doc.write(f':ref:`{cmd} <cli:{full_cmd_name}>`')
117
- doc.write(' ]')
117
+ doc.writeln(' ]')
118
+ doc.writeln('')
118
119
 
119
120
  def doc_title(self, help_command, **kwargs):
120
121
  doc = help_command.doc
@@ -223,6 +224,9 @@ class CLIDocumentEventHandler:
223
224
  )
224
225
  doc.write('\n')
225
226
 
227
+ def doc_meta_description(self, help_command, **kwargs):
228
+ pass
229
+
226
230
  def _document_enums(self, model, doc):
227
231
  """Documents top-level parameter enums"""
228
232
  if isinstance(model, StringShape):
@@ -402,6 +406,13 @@ class ServiceDocumentEventHandler(CLIDocumentEventHandler):
402
406
  else:
403
407
  doc.style.tocitem(command_name)
404
408
 
409
+ def doc_meta_description(self, help_command, **kwargs):
410
+ doc = help_command.doc
411
+ reference = help_command.event_class.replace('.', ' ')
412
+ doc.writeln(".. meta::")
413
+ doc.writeln(f" :description: Learn about the AWS CLI {AWS_CLI_VERSION} {reference} commands.")
414
+ doc.writeln("")
415
+
405
416
 
406
417
  class OperationDocumentEventHandler(CLIDocumentEventHandler):
407
418
  AWS_DOC_BASE = 'https://docs.aws.amazon.com/goto/WebAPI'
@@ -618,6 +629,12 @@ class OperationDocumentEventHandler(CLIDocumentEventHandler):
618
629
  for member_name, member_shape in output_shape.members.items():
619
630
  self._doc_member(doc, member_name, member_shape, stack=[])
620
631
 
632
+ def doc_meta_description(self, help_command, **kwargs):
633
+ doc = help_command.doc
634
+ reference = help_command.event_class.replace('.', ' ')
635
+ doc.writeln(".. meta::")
636
+ doc.writeln(f" :description: Use the AWS CLI {AWS_CLI_VERSION} to run the {reference} command.")
637
+ doc.writeln("")
621
638
 
622
639
  class TopicListerDocumentEventHandler(CLIDocumentEventHandler):
623
640
  DESCRIPTION = (
awscli/clidriver.py CHANGED
@@ -48,7 +48,7 @@ from awscli.help import (
48
48
  ServiceHelpCommand,
49
49
  )
50
50
  from awscli.plugin import load_plugins
51
- from awscli.utils import emit_top_level_args_parsed_event, write_exception
51
+ from awscli.utils import emit_top_level_args_parsed_event, write_exception, create_nested_client, resolve_v2_debug_mode
52
52
  from botocore import __version__ as botocore_version
53
53
  from botocore import xform_name
54
54
 
@@ -225,7 +225,7 @@ class CLIDriver:
225
225
  # that exceptions can be raised, which should have the same
226
226
  # general exception handling logic as calling into the
227
227
  # command table. This is why it's in the try/except clause.
228
- self._handle_top_level_args(parsed_args)
228
+ self._handle_top_level_args(parsed_args, remaining)
229
229
  self._emit_session_event(parsed_args)
230
230
  HISTORY_RECORDER.record(
231
231
  'CLI_VERSION', self.session.user_agent(), 'CLI'
@@ -279,8 +279,8 @@ class CLIDriver:
279
279
  sys.stderr.write(msg)
280
280
  sys.stderr.write('\n')
281
281
 
282
- def _handle_top_level_args(self, args):
283
- emit_top_level_args_parsed_event(self.session, args)
282
+ def _handle_top_level_args(self, args, remaining):
283
+ emit_top_level_args_parsed_event(self.session, args, remaining)
284
284
  if args.profile:
285
285
  self.session.set_config_variable('profile', args.profile)
286
286
  if args.region:
@@ -542,9 +542,15 @@ class ServiceOperation:
542
542
  event, parsed_args=parsed_args, parsed_globals=parsed_globals
543
543
  )
544
544
  call_parameters = self._build_call_parameters(
545
- parsed_args, self.arg_table
545
+ parsed_args, self.arg_table, parsed_globals
546
546
  )
547
547
 
548
+ self._detect_binary_file_migration_change(
549
+ self._session,
550
+ parsed_args,
551
+ parsed_globals,
552
+ self.arg_table
553
+ )
548
554
  event = f'calling-command.{self._parent_name}.{self._name}'
549
555
  override = self._emit_first_non_none_response(
550
556
  event,
@@ -590,7 +596,7 @@ class ServiceOperation:
590
596
  # CLIArguments for values.
591
597
  parser.add_argument('help', nargs='?')
592
598
 
593
- def _build_call_parameters(self, args, arg_table):
599
+ def _build_call_parameters(self, args, arg_table, parsed_globals):
594
600
  # We need to convert the args specified on the command
595
601
  # line as valid **kwargs we can hand to botocore.
596
602
  service_params = {}
@@ -601,11 +607,11 @@ class ServiceOperation:
601
607
  py_name = arg_object.py_name
602
608
  if py_name in parsed_args:
603
609
  value = parsed_args[py_name]
604
- value = self._unpack_arg(arg_object, value)
610
+ value = self._unpack_arg(arg_object, value, parsed_globals)
605
611
  arg_object.add_to_params(service_params, value)
606
612
  return service_params
607
613
 
608
- def _unpack_arg(self, cli_argument, value):
614
+ def _unpack_arg(self, cli_argument, value, parsed_globals):
609
615
  # Unpacks a commandline argument into a Python value by firing the
610
616
  # load-cli-arg.service-name.operation-name event.
611
617
  session = self._session
@@ -613,7 +619,7 @@ class ServiceOperation:
613
619
  operation_name = xform_name(self._name, '-')
614
620
 
615
621
  return unpack_argument(
616
- session, service_name, operation_name, cli_argument, value
622
+ session, service_name, operation_name, cli_argument, value, parsed_globals
617
623
  )
618
624
 
619
625
  def _create_argument_table(self):
@@ -661,6 +667,46 @@ class ServiceOperation:
661
667
  parser = ArgTableArgParser(arg_table)
662
668
  return parser
663
669
 
670
+ def _detect_binary_file_migration_change(
671
+ self,
672
+ session,
673
+ parsed_args,
674
+ parsed_globals,
675
+ arg_table
676
+ ):
677
+ if (
678
+ session.get_scoped_config()
679
+ .get('cli_binary_format', None) == 'raw-in-base64-out'
680
+ ):
681
+ # if cli_binary_format is set to raw-in-base64-out, then v2 behavior will
682
+ # be the same as v1, so there is no breaking change in this case.
683
+ return
684
+ if resolve_v2_debug_mode(parsed_globals):
685
+ parsed_args_to_check = {
686
+ arg: getattr(parsed_args, arg)
687
+ for arg in vars(parsed_args) if getattr(parsed_args, arg)
688
+ }
689
+
690
+ arg_values_to_check = [
691
+ arg.py_name for arg in arg_table.values()
692
+ if arg.py_name in parsed_args_to_check
693
+ and arg.argument_model.type_name == 'blob'
694
+ ]
695
+ if arg_values_to_check:
696
+ print(
697
+ '\nAWS CLI v2 UPGRADE WARNING: When specifying a '
698
+ 'blob-type parameter, AWS CLI v2 will assume the '
699
+ 'parameter value is base64-encoded. This is different '
700
+ 'from v1 behavior, where the AWS CLI will automatically '
701
+ 'encode the value to base64. To retain v1 behavior in '
702
+ 'AWS CLI v2, set the `cli_binary_format` configuration '
703
+ 'variable to `raw-in-base64-out`. See '
704
+ 'https://docs.aws.amazon.com/cli/latest/userguide/'
705
+ 'cliv2-migration-changes.html'
706
+ '#cliv2-migration-binaryparam.\n',
707
+ file=sys.stderr
708
+ )
709
+
664
710
 
665
711
  class CLIOperationCaller:
666
712
  """Call an AWS operation and format the response."""
@@ -692,7 +738,8 @@ class CLIOperationCaller:
692
738
  value is returned.
693
739
 
694
740
  """
695
- client = self._session.create_client(
741
+ client = create_nested_client(
742
+ self._session,
696
743
  service_name,
697
744
  region_name=parsed_globals.region,
698
745
  endpoint_url=parsed_globals.endpoint_url,
awscli/compat.py CHANGED
@@ -13,6 +13,7 @@
13
13
 
14
14
  import collections.abc as collections_abc
15
15
  import contextlib
16
+ import datetime
16
17
  import io
17
18
  import locale
18
19
  import os
@@ -502,3 +503,13 @@ except ImportError:
502
503
  if _id:
503
504
  id = _id
504
505
  return distname, version, id
506
+
507
+
508
+ def get_current_datetime(remove_tzinfo=True):
509
+ # TODO: Consolidate to botocore.compat.get_current_datetime
510
+ # after it's had time to bake to avoid import errors with
511
+ # mismatched versions.
512
+ datetime_now = datetime.datetime.now(datetime.timezone.utc)
513
+ if remove_tzinfo:
514
+ datetime_now = datetime_now.replace(tzinfo=None)
515
+ return datetime_now
@@ -26,8 +26,6 @@ ARGUMENT_RENAMES = {
26
26
  'ec2.create-image.no-no-reboot': 'reboot',
27
27
  'ec2.*.no-egress': 'ingress',
28
28
  'ec2.*.no-disable-api-termination': 'enable-api-termination',
29
- 'opsworks.*.region': 'stack-region',
30
- 'elastictranscoder.*.output': 'job-output',
31
29
  'swf.register-activity-type.version': 'activity-version',
32
30
  'swf.register-workflow-type.version': 'workflow-version',
33
31
  'datapipeline.*.query': 'objects-query',
@@ -96,6 +94,7 @@ ARGUMENT_RENAMES = {
96
94
  'eks.update-cluster-version.version': 'kubernetes-version',
97
95
  'eks.create-nodegroup.version': 'kubernetes-version',
98
96
  'eks.update-nodegroup-version.version': 'kubernetes-version',
97
+ 'eks.update-cluster-components-version.version': 'kubernetes-version',
99
98
  'schemas.*.version': 'schema-version',
100
99
  'sagemaker.delete-image-version.version': 'version-number',
101
100
  'sagemaker.describe-image-version.version': 'version-number',
@@ -140,7 +139,6 @@ HIDDEN_ALIASES = {
140
139
  'importexport.get-shipping-label.street3': 'street-3',
141
140
  'lambda.publish-version.code-sha256': 'code-sha-256',
142
141
  'lightsail.import-key-pair.public-key-base64': 'public-key-base-64',
143
- 'opsworks.register-volume.ec2-volume-id': 'ec-2-volume-id',
144
142
  'mgn.*.replication-servers-security-groups-ids':
145
143
  'replication-servers-security-groups-i-ds',
146
144
  'mgn.*.source-server-ids': 'source-server-i-ds',
@@ -70,6 +70,10 @@ class CliInputJSONArgument(OverrideRequiredArgsArgument):
70
70
  try:
71
71
  # Try to load the JSON string into a python dictionary
72
72
  input_data = json.loads(retrieved_json)
73
+ self._session.register(
74
+ f"get-cli-input-json-data",
75
+ lambda **inner_kwargs: input_data
76
+ )
73
77
  except ValueError as e:
74
78
  raise ParamError(
75
79
  self.name, "Invalid JSON: %s\nJSON received: %s"
@@ -24,7 +24,8 @@ from awscli.customizations.cloudformation.yamlhelper import yaml_parse
24
24
 
25
25
  from awscli.customizations.commands import BasicCommand
26
26
  from awscli.compat import get_stdout_text_writer
27
- from awscli.utils import write_exception
27
+ from awscli.customizations.utils import uni_print
28
+ from awscli.utils import create_nested_client, write_exception, resolve_v2_debug_mode
28
29
 
29
30
  LOG = logging.getLogger(__name__)
30
31
 
@@ -267,8 +268,8 @@ class DeployCommand(BasicCommand):
267
268
 
268
269
  def _run_main(self, parsed_args, parsed_globals):
269
270
  cloudformation_client = \
270
- self._session.create_client(
271
- 'cloudformation', region_name=parsed_globals.region,
271
+ create_nested_client(
272
+ self._session, 'cloudformation', region_name=parsed_globals.region,
272
273
  endpoint_url=parsed_globals.endpoint_url,
273
274
  verify=parsed_globals.verify_ssl)
274
275
 
@@ -300,7 +301,8 @@ class DeployCommand(BasicCommand):
300
301
 
301
302
  bucket = parsed_args.s3_bucket
302
303
  if bucket:
303
- s3_client = self._session.create_client(
304
+ s3_client = create_nested_client(
305
+ self._session,
304
306
  "s3",
305
307
  config=Config(signature_version='s3v4'),
306
308
  region_name=parsed_globals.region,
@@ -315,18 +317,33 @@ class DeployCommand(BasicCommand):
315
317
  s3_uploader = None
316
318
 
317
319
  deployer = Deployer(cloudformation_client)
320
+ v2_debug = resolve_v2_debug_mode(parsed_globals)
318
321
  return self.deploy(deployer, stack_name, template_str,
319
322
  parameters, parsed_args.capabilities,
320
323
  parsed_args.execute_changeset, parsed_args.role_arn,
321
324
  parsed_args.notification_arns, s3_uploader,
322
325
  tags, parsed_args.fail_on_empty_changeset,
323
- parsed_args.disable_rollback)
326
+ parsed_args.disable_rollback, v2_debug)
324
327
 
325
328
  def deploy(self, deployer, stack_name, template_str,
326
329
  parameters, capabilities, execute_changeset, role_arn,
327
330
  notification_arns, s3_uploader, tags,
328
- fail_on_empty_changeset=True, disable_rollback=False):
331
+ fail_on_empty_changeset=True, disable_rollback=False,
332
+ v2_debug=False):
329
333
  try:
334
+ if v2_debug and fail_on_empty_changeset:
335
+ uni_print(
336
+ '\nAWS CLI v2 UPGRADE WARNING: In AWS CLI v2, deploying '
337
+ 'an AWS CloudFormation Template that results in an empty '
338
+ 'changeset will NOT result in an error by default. This '
339
+ 'is different from v1 behavior, where empty changesets '
340
+ 'result in an error by default. To migrate to v2 behavior '
341
+ 'and resolve this warning, you can add the '
342
+ '`--no-fail-on-empty-changeset` flag to the command. '
343
+ 'See https://docs.aws.amazon.com/cli/latest/userguide/'
344
+ 'cliv2-migration-changes.html#cliv2-migration-cfn.\n',
345
+ out_file=sys.stderr
346
+ )
330
347
  result = deployer.create_and_wait_for_changeset(
331
348
  stack_name=stack_name,
332
349
  cfn_template=template_str,
@@ -17,10 +17,10 @@ import logging
17
17
  import botocore
18
18
  import collections
19
19
 
20
+ from awscli.compat import get_current_datetime
20
21
  from awscli.customizations.cloudformation import exceptions
21
22
  from awscli.customizations.cloudformation.artifact_exporter import mktempfile, parse_s3_url
22
23
 
23
- from datetime import datetime
24
24
 
25
25
  LOG = logging.getLogger(__name__)
26
26
 
@@ -85,7 +85,7 @@ class Deployer(object):
85
85
  :return:
86
86
  """
87
87
 
88
- now = datetime.utcnow().isoformat()
88
+ now = get_current_datetime().isoformat()
89
89
  description = "Created by AWS CLI at {0} UTC".format(now)
90
90
 
91
91
  # Each changeset will get a unique name based on time
@@ -24,6 +24,7 @@ from awscli.customizations.cloudformation.yamlhelper import yaml_dump
24
24
  from awscli.customizations.cloudformation import exceptions
25
25
  from awscli.customizations.commands import BasicCommand
26
26
  from awscli.customizations.s3uploader import S3Uploader
27
+ from awscli.utils import create_nested_client
27
28
 
28
29
  LOG = logging.getLogger(__name__)
29
30
 
@@ -124,8 +125,8 @@ class PackageCommand(BasicCommand):
124
125
  ]
125
126
 
126
127
  def _run_main(self, parsed_args, parsed_globals):
127
- s3_client = self._session.create_client(
128
- "s3",
128
+ s3_client = create_nested_client(
129
+ self._session, "s3",
129
130
  config=Config(signature_version='s3v4'),
130
131
  region_name=parsed_globals.region,
131
132
  verify=parsed_globals.verify_ssl)
@@ -21,6 +21,7 @@ from botocore.signers import CloudFrontSigner
21
21
  from awscli.arguments import CustomArgument
22
22
  from awscli.customizations.utils import validate_mutually_exclusive_handler
23
23
  from awscli.customizations.commands import BasicCommand
24
+ from awscli.utils import create_nested_client
24
25
 
25
26
 
26
27
  def register(event_handler):
@@ -172,7 +173,8 @@ class UpdateDefaultRootObject(CreateDefaultRootObject):
172
173
 
173
174
  def add_to_params(self, parameters, value):
174
175
  if value is not None:
175
- client = self.context['session'].create_client(
176
+ client = create_nested_client(
177
+ self.context['session'],
176
178
  'cloudfront',
177
179
  region_name=self.context['parsed_args'].region,
178
180
  endpoint_url=self.context['parsed_args'].endpoint_url,
@@ -17,9 +17,9 @@ import sys
17
17
  from .utils import get_account_id
18
18
  from awscli.customizations.commands import BasicCommand
19
19
  from awscli.customizations.utils import s3_bucket_exists
20
+ from awscli.utils import create_nested_client
20
21
  from botocore.exceptions import ClientError
21
22
 
22
-
23
23
  LOG = logging.getLogger(__name__)
24
24
  S3_POLICY_TEMPLATE = 'policy/S3/AWSCloudTrail-S3BucketPolicy-2014-12-17.json'
25
25
  SNS_POLICY_TEMPLATE = 'policy/SNS/AWSCloudTrail-SnsTopicPolicy-2014-12-17.json'
@@ -80,16 +80,16 @@ class CloudTrailSubscribe(BasicCommand):
80
80
 
81
81
  # Initialize services
82
82
  LOG.debug('Initializing S3, SNS and CloudTrail...')
83
- self.sts = self._session.create_client('sts', **client_args)
84
- self.s3 = self._session.create_client('s3', **client_args)
85
- self.sns = self._session.create_client('sns', **client_args)
83
+ self.sts = create_nested_client(self._session, 'sts', **client_args)
84
+ self.s3 = create_nested_client(self._session, 's3', **client_args)
85
+ self.sns = create_nested_client(self._session, 'sns', **client_args)
86
86
  self.region_name = self.s3.meta.region_name
87
87
 
88
88
  # If the endpoint is specified, it is designated for the cloudtrail
89
89
  # service. Not all of the other services will use it.
90
90
  if parsed_globals.endpoint_url is not None:
91
91
  client_args['endpoint_url'] = parsed_globals.endpoint_url
92
- self.cloudtrail = self._session.create_client('cloudtrail', **client_args)
92
+ self.cloudtrail = create_nested_client(self._session, 'cloudtrail', **client_args)
93
93
 
94
94
  def _call(self, options, parsed_globals):
95
95
  """
@@ -19,7 +19,7 @@ import re
19
19
  import sys
20
20
  import zlib
21
21
  from zlib import error as ZLibError
22
- from datetime import datetime, timedelta
22
+ from datetime import timedelta
23
23
  from dateutil import tz, parser
24
24
 
25
25
  from pyasn1.error import PyAsn1Error
@@ -29,8 +29,9 @@ from awscli.customizations.cloudtrail.utils import get_trail_by_arn, \
29
29
  get_account_id_from_arn
30
30
  from awscli.customizations.commands import BasicCommand
31
31
  from botocore.exceptions import ClientError
32
+ from awscli.compat import get_current_datetime
32
33
  from awscli.schema import ParameterRequiredError
33
-
34
+ from awscli.utils import create_nested_client
34
35
 
35
36
  LOG = logging.getLogger(__name__)
36
37
  DATE_FORMAT = '%Y%m%dT%H%M%SZ'
@@ -193,7 +194,7 @@ class S3ClientProvider(object):
193
194
  def _create_client(self, region_name):
194
195
  """Creates an Amazon S3 client for the given region name"""
195
196
  if region_name not in self._client_cache:
196
- client = self._session.create_client('s3', region_name)
197
+ client = create_nested_client(self._session, 's3', region_name=region_name)
197
198
  # Remove the CLI error event that prevents exceptions.
198
199
  self._client_cache[region_name] = client
199
200
  return self._client_cache[region_name]
@@ -281,9 +282,10 @@ class DigestProvider(object):
281
282
  """
282
283
  digests = []
283
284
  marker = self._create_digest_key(start_date, prefix)
285
+ s3_digest_files_prefix = self._create_digest_prefix(start_date, prefix)
284
286
  client = self._client_provider.get_client(bucket)
285
287
  paginator = client.get_paginator('list_objects')
286
- page_iterator = paginator.paginate(Bucket=bucket, Marker=marker)
288
+ page_iterator = paginator.paginate(Bucket=bucket, Marker=marker, Prefix=s3_digest_files_prefix)
287
289
  key_filter = page_iterator.search('Contents[*].Key')
288
290
  # Create a target start end end date
289
291
  target_start_date = format_date(normalize_date(start_date))
@@ -293,7 +295,7 @@ class DigestProvider(object):
293
295
  # Ensure digests are from the same trail.
294
296
  digest_key_regex = re.compile(self._create_digest_key_regex(prefix))
295
297
  for key in key_filter:
296
- if digest_key_regex.match(key):
298
+ if key and digest_key_regex.match(key):
297
299
  # Use a lexicographic comparison to know when to stop.
298
300
  extracted_date = extract_digest_key_date(key)
299
301
  if extracted_date > target_end_date:
@@ -360,6 +362,25 @@ class DigestProvider(object):
360
362
  key = key_prefix + '/' + key
361
363
  return key
362
364
 
365
+ def _create_digest_prefix(self, start_date, key_prefix):
366
+ """Creates an S3 prefix to scope listing to trail's region.
367
+
368
+ :return: Returns a prefix string to limit S3 listing scope.
369
+ """
370
+ template = 'AWSLogs/'
371
+ template_params = {
372
+ 'account_id': self.account_id,
373
+ 'source_region': self.trail_source_region
374
+ }
375
+ if self.organization_id:
376
+ template += '{organization_id}/'
377
+ template_params['organization_id'] = self.organization_id
378
+ template += '{account_id}/CloudTrail-Digest/{source_region}'
379
+ prefix = template.format(**template_params)
380
+ if key_prefix:
381
+ prefix = key_prefix + '/' + prefix
382
+ return prefix
383
+
363
384
  def _create_digest_key_regex(self, key_prefix):
364
385
  """Creates a regular expression used to match against S3 keys"""
365
386
  template = 'AWSLogs/'
@@ -432,7 +453,7 @@ class DigestTraverser(object):
432
453
  :param end_date: Date to stop validating at (inclusive).
433
454
  """
434
455
  if end_date is None:
435
- end_date = datetime.utcnow()
456
+ end_date = get_current_datetime()
436
457
  end_date = normalize_date(end_date)
437
458
  start_date = normalize_date(start_date)
438
459
  bucket = self.starting_bucket
@@ -735,7 +756,7 @@ class CloudTrailValidateLogs(BasicCommand):
735
756
  if args.end_time:
736
757
  self.end_time = normalize_date(parse_date(args.end_time))
737
758
  else:
738
- self.end_time = normalize_date(datetime.utcnow())
759
+ self.end_time = normalize_date(get_current_datetime())
739
760
  if self.start_time > self.end_time:
740
761
  raise ValueError(('Invalid time range specified: start-time must '
741
762
  'occur before end-time'))
@@ -753,13 +774,13 @@ class CloudTrailValidateLogs(BasicCommand):
753
774
  self._session, self._source_region)
754
775
  client_args = {'region_name': parsed_globals.region,
755
776
  'verify': parsed_globals.verify_ssl}
756
- self.organization_client = self._session.create_client(
757
- 'organizations', **client_args)
777
+ self.organization_client = create_nested_client(
778
+ self._session, 'organizations', **client_args)
758
779
 
759
780
  if parsed_globals.endpoint_url is not None:
760
781
  client_args['endpoint_url'] = parsed_globals.endpoint_url
761
- self.cloudtrail_client = self._session.create_client(
762
- 'cloudtrail', **client_args)
782
+ self.cloudtrail_client = create_nested_client(
783
+ self._session, 'cloudtrail', **client_args)
763
784
 
764
785
  def _call(self):
765
786
  traverser = create_digest_traverser(
@@ -16,13 +16,12 @@ import re
16
16
  import sys
17
17
  import logging
18
18
  import fileinput
19
- import datetime
20
19
 
21
20
  from botocore.auth import SigV4Auth
22
21
  from botocore.awsrequest import AWSRequest
23
22
  from botocore.compat import urlsplit
24
23
  from awscli.customizations.commands import BasicCommand
25
- from awscli.compat import NonTranslatedStdout
24
+ from awscli.compat import NonTranslatedStdout, get_current_datetime
26
25
 
27
26
  logger = logging.getLogger('botocore.credentials')
28
27
 
@@ -150,7 +149,7 @@ class CodeCommitGetCommand(BasicCommand):
150
149
  request = AWSRequest()
151
150
  request.url = url_to_sign
152
151
  request.method = 'GIT'
153
- now = datetime.datetime.utcnow()
152
+ now = get_current_datetime()
154
153
  request.context['timestamp'] = now.strftime('%Y%m%dT%H%M%S')
155
154
  split = urlsplit(request.url)
156
155
  # we don't want to include the port number in the signature
@@ -18,6 +18,7 @@ from botocore.exceptions import ClientError
18
18
  from awscli.customizations.commands import BasicCommand
19
19
  from awscli.customizations.codedeploy.utils import \
20
20
  validate_region, validate_instance_name, INSTANCE_NAME_ARG
21
+ from awscli.utils import create_nested_client
21
22
 
22
23
 
23
24
  class Deregister(BasicCommand):
@@ -48,13 +49,15 @@ class Deregister(BasicCommand):
48
49
  validate_region(params, parsed_globals)
49
50
  validate_instance_name(params)
50
51
 
51
- self.codedeploy = self._session.create_client(
52
+ self.codedeploy = create_nested_client(
53
+ self._session,
52
54
  'codedeploy',
53
55
  region_name=params.region,
54
56
  endpoint_url=parsed_globals.endpoint_url,
55
57
  verify=parsed_globals.verify_ssl
56
58
  )
57
- self.iam = self._session.create_client(
59
+ self.iam = create_nested_client(
60
+ self._session,
58
61
  'iam',
59
62
  region_name=params.region
60
63
  )