magic-pocket-cli 0.19.0__tar.gz → 0.20.0__tar.gz

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 (73) hide show
  1. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/PKG-INFO +2 -2
  2. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/dsql.py +52 -0
  3. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pyproject.toml +2 -2
  4. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/.gitignore +0 -0
  5. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/__init__.py +0 -0
  6. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/__init__.py +0 -0
  7. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/aws_auth.py +0 -0
  8. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/awscontainer_cli.py +0 -0
  9. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/cloudfront_cli.py +0 -0
  10. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/cloudfront_keys_cli.py +0 -0
  11. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/cloudfront_waf_cli.py +0 -0
  12. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/deploy_cli.py +0 -0
  13. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/destroy_cli.py +0 -0
  14. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/dsql_cli.py +0 -0
  15. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/image_cli.py +0 -0
  16. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/main_cli.py +0 -0
  17. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/migrate_cli.py +0 -0
  18. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/neon_cli.py +0 -0
  19. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/permissions_cli.py +0 -0
  20. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/rds_cli.py +0 -0
  21. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/resource_helper.py +0 -0
  22. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/runtime_config_cli.py +0 -0
  23. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/s3_cli.py +0 -0
  24. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/status_cli.py +0 -0
  25. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/store_url_helper.py +0 -0
  26. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/tidb_cli.py +0 -0
  27. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/upstash_cli.py +0 -0
  28. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/url_helper.py +0 -0
  29. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/vpc_cli.py +0 -0
  30. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/cli/waf_cli.py +0 -0
  31. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/django_cli.py +0 -0
  32. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/mediator.py +0 -0
  33. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/__init__.py +0 -0
  34. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/__init__.py +0 -0
  35. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/builders/__init__.py +0 -0
  36. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/builders/codebuild.py +0 -0
  37. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/builders/depot.py +0 -0
  38. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/builders/docker.py +0 -0
  39. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/builders/dockerignore.py +0 -0
  40. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/cloudformation.py +0 -0
  41. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/ecr.py +0 -0
  42. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/efs.py +0 -0
  43. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/lambdahandler.py +0 -0
  44. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/poll.py +0 -0
  45. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/s3_utils.py +0 -0
  46. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/stack_backed.py +0 -0
  47. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/aws/state.py +0 -0
  48. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/awscontainer.py +0 -0
  49. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/cloudfront.py +0 -0
  50. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/cloudfront_acm.py +0 -0
  51. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/cloudfront_keys.py +0 -0
  52. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/cloudfront_waf.py +0 -0
  53. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/neon.py +0 -0
  54. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/rds.py +0 -0
  55. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/s3.py +0 -0
  56. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/tidb.py +0 -0
  57. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/upstash.py +0 -0
  58. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/resources/vpc.py +0 -0
  59. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/cloudformation/awscontainer.yaml +0 -0
  60. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/cloudformation/cf_function_api_host.js +0 -0
  61. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/cloudformation/cf_function_basic_auth_prelude.js +0 -0
  62. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/cloudformation/cf_function_host_redirect_prelude.js +0 -0
  63. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/cloudformation/cf_function_spa_auth.js +0 -0
  64. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/cloudformation/cf_function_spa_fallback.js +0 -0
  65. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/cloudformation/cloudfront.yaml +0 -0
  66. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/cloudformation/cloudfront_acm.yaml +0 -0
  67. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/cloudformation/cloudfront_keys.yaml +0 -0
  68. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/cloudformation/cloudfront_waf.yaml +0 -0
  69. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/cloudformation/vpc.yaml +0 -0
  70. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/init/django-dotenv.env +0 -0
  71. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/init/django-settings.py +0 -0
  72. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/init/pocket.Dockerfile +0 -0
  73. {magic_pocket_cli-0.19.0 → magic_pocket_cli-0.20.0}/pocket_cli/templates/init/pocket_simple.toml +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: magic-pocket-cli
3
- Version: 0.19.0
3
+ Version: 0.20.0
4
4
  Summary: CLI and deploy tools for magic-pocket.
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: awscrt>=0.19.0
7
7
  Requires-Dist: click>=8.1.7
8
8
  Requires-Dist: deepdiff>=6.7.1
9
9
  Requires-Dist: jinja2>=3.1.3
10
- Requires-Dist: magic-pocket>=0.19.0
10
+ Requires-Dist: magic-pocket>=0.20.0
11
11
  Requires-Dist: pathspec>=1.0.4
12
12
  Requires-Dist: python-on-whales>=0.68.0
13
13
  Requires-Dist: pyyaml>=6.0.1
@@ -7,6 +7,11 @@ import boto3
7
7
  from botocore.exceptions import ClientError
8
8
 
9
9
  from pocket.resources.base import ResourceStatus
10
+ from pocket.secret_store import (
11
+ delete_stored_value,
12
+ put_stored_value,
13
+ read_stored_value,
14
+ )
10
15
  from pocket.utils import echo
11
16
  from pocket_cli.resources.aws.poll import wait_until
12
17
 
@@ -78,6 +83,7 @@ class Dsql:
78
83
  "tag_name": self.context.tag_name,
79
84
  "identifier": self.identifier,
80
85
  "endpoint": self.endpoint,
86
+ "endpoint_secret_name": self.context.endpoint_secret_name,
81
87
  }
82
88
  }
83
89
 
@@ -97,6 +103,9 @@ class Dsql:
97
103
  self.clear_cache()
98
104
  echo.success("DSQL cluster is now active.")
99
105
  echo.success("Endpoint: %s" % self.endpoint)
106
+ # ensure_post_deploy_state でも publish されるが、後続 resource の失敗で
107
+ # hook まで到達しない deploy でも作成記録が残るよう、作成直後にも書く
108
+ self.publish_endpoint()
100
109
 
101
110
  def delete(self):
102
111
  if not self.identifier:
@@ -106,6 +115,49 @@ class Dsql:
106
115
  echo.log("Waiting for DSQL cluster deletion...")
107
116
  self._wait_deleted(self.identifier, timeout=600)
108
117
  echo.success("DSQL cluster was deleted.")
118
+ self._unpublish_endpoint()
119
+
120
+ def ensure_post_deploy_state(self):
121
+ # create の有無に関わらず毎 deploy で publish を冪等に確保する。cluster
122
+ # 再作成や旧バージョンで deploy 済みの既存 cluster も常に実体を反映する
123
+ self.publish_endpoint()
124
+
125
+ def publish_endpoint(self):
126
+ """endpoint を stored user secret 正準パスへ publish する (作成記録)。
127
+
128
+ DSQL は cluster identifier が AWS 自動生成のため endpoint を naming から
129
+ 導出できない。deploy の外の消費者 (migration ツール等) が endpoint を
130
+ 決定的に引けるよう、作成者である deploy が正準パスへ書き込む。
131
+ 値が既に一致していれば書き込まない (SSM version / SM stage の増殖防止)。
132
+ """
133
+ name = self.context.endpoint_secret_name
134
+ endpoint = self.endpoint
135
+ if not name or endpoint is None:
136
+ return
137
+ store = self.context.endpoint_secret_store
138
+ current = read_stored_value(name, store, self.context.region)
139
+ if current == endpoint:
140
+ return
141
+ put_stored_value(name, store, endpoint, self.context.region)
142
+ echo.log("Published DSQL endpoint to %s" % name)
143
+
144
+ def _unpublish_endpoint(self):
145
+ """publish 済み endpoint を削除する (cluster 削除との対称操作)。
146
+
147
+ 残すと削除済み cluster の endpoint を消費者が読み続けるため、削除まで
148
+ deploy 側の責務とする。未 publish (NotFound) は握りつぶす。
149
+ """
150
+ name = self.context.endpoint_secret_name
151
+ if not name:
152
+ return
153
+ delete_stored_value(
154
+ name,
155
+ self.context.endpoint_secret_store,
156
+ self.context.region,
157
+ force_sm=True,
158
+ swallow_not_found=True,
159
+ )
160
+ echo.log("Removed published DSQL endpoint: %s" % name)
109
161
 
110
162
  def _wait_active(self, identifier: str, timeout: int = 600, interval: int = 5):
111
163
  def poll():
@@ -1,10 +1,10 @@
1
1
  [project]
2
2
  name = "magic-pocket-cli"
3
- version = "0.19.0"
3
+ version = "0.20.0"
4
4
  description = "CLI and deploy tools for magic-pocket."
5
5
  requires-python = ">=3.10"
6
6
  dependencies = [
7
- "magic-pocket>=0.19.0",
7
+ "magic-pocket>=0.20.0",
8
8
  "click>=8.1.7",
9
9
  "jinja2>=3.1.3",
10
10
  "python-on-whales>=0.68.0",