atlas-init 0.1.1__py3-none-any.whl → 0.1.8__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 (73) hide show
  1. atlas_init/__init__.py +3 -3
  2. atlas_init/atlas_init.yaml +18 -1
  3. atlas_init/cli.py +62 -70
  4. atlas_init/cli_cfn/app.py +40 -117
  5. atlas_init/cli_cfn/{cfn.py → aws.py} +129 -14
  6. atlas_init/cli_cfn/cfn_parameter_finder.py +89 -6
  7. atlas_init/cli_cfn/example.py +203 -0
  8. atlas_init/cli_cfn/files.py +63 -0
  9. atlas_init/cli_helper/run.py +18 -2
  10. atlas_init/cli_helper/tf_runner.py +4 -6
  11. atlas_init/cli_root/__init__.py +0 -0
  12. atlas_init/cli_root/trigger.py +153 -0
  13. atlas_init/cli_tf/app.py +211 -4
  14. atlas_init/cli_tf/changelog.py +103 -0
  15. atlas_init/cli_tf/debug_logs.py +221 -0
  16. atlas_init/cli_tf/debug_logs_test_data.py +253 -0
  17. atlas_init/cli_tf/github_logs.py +229 -0
  18. atlas_init/cli_tf/go_test_run.py +194 -0
  19. atlas_init/cli_tf/go_test_run_format.py +31 -0
  20. atlas_init/cli_tf/go_test_summary.py +144 -0
  21. atlas_init/cli_tf/hcl/__init__.py +0 -0
  22. atlas_init/cli_tf/hcl/cli.py +161 -0
  23. atlas_init/cli_tf/hcl/cluster_mig.py +348 -0
  24. atlas_init/cli_tf/hcl/parser.py +140 -0
  25. atlas_init/cli_tf/schema.py +222 -18
  26. atlas_init/cli_tf/schema_go_parser.py +236 -0
  27. atlas_init/cli_tf/schema_table.py +150 -0
  28. atlas_init/cli_tf/schema_table_models.py +155 -0
  29. atlas_init/cli_tf/schema_v2.py +599 -0
  30. atlas_init/cli_tf/schema_v2_api_parsing.py +298 -0
  31. atlas_init/cli_tf/schema_v2_sdk.py +361 -0
  32. atlas_init/cli_tf/schema_v3.py +222 -0
  33. atlas_init/cli_tf/schema_v3_sdk.py +279 -0
  34. atlas_init/cli_tf/schema_v3_sdk_base.py +68 -0
  35. atlas_init/cli_tf/schema_v3_sdk_create.py +216 -0
  36. atlas_init/humps.py +253 -0
  37. atlas_init/repos/cfn.py +6 -1
  38. atlas_init/repos/path.py +3 -3
  39. atlas_init/settings/config.py +14 -4
  40. atlas_init/settings/env_vars.py +16 -1
  41. atlas_init/settings/path.py +12 -1
  42. atlas_init/settings/rich_utils.py +2 -0
  43. atlas_init/terraform.yaml +77 -1
  44. atlas_init/tf/.terraform.lock.hcl +59 -83
  45. atlas_init/tf/always.tf +7 -0
  46. atlas_init/tf/main.tf +3 -0
  47. atlas_init/tf/modules/aws_s3/provider.tf +1 -1
  48. atlas_init/tf/modules/aws_vars/aws_vars.tf +2 -0
  49. atlas_init/tf/modules/aws_vpc/provider.tf +4 -1
  50. atlas_init/tf/modules/cfn/cfn.tf +47 -33
  51. atlas_init/tf/modules/cfn/kms.tf +54 -0
  52. atlas_init/tf/modules/cfn/resource_actions.yaml +1 -0
  53. atlas_init/tf/modules/cfn/variables.tf +31 -0
  54. atlas_init/tf/modules/cloud_provider/cloud_provider.tf +1 -0
  55. atlas_init/tf/modules/cloud_provider/provider.tf +1 -1
  56. atlas_init/tf/modules/cluster/cluster.tf +34 -24
  57. atlas_init/tf/modules/cluster/provider.tf +1 -1
  58. atlas_init/tf/modules/federated_vars/federated_vars.tf +3 -0
  59. atlas_init/tf/modules/federated_vars/provider.tf +1 -1
  60. atlas_init/tf/modules/project_extra/project_extra.tf +15 -1
  61. atlas_init/tf/modules/stream_instance/stream_instance.tf +1 -1
  62. atlas_init/tf/modules/vpc_peering/vpc_peering.tf +1 -1
  63. atlas_init/tf/modules/vpc_privatelink/versions.tf +1 -1
  64. atlas_init/tf/outputs.tf +11 -3
  65. atlas_init/tf/providers.tf +2 -1
  66. atlas_init/tf/variables.tf +12 -0
  67. atlas_init/typer_app.py +76 -0
  68. {atlas_init-0.1.1.dist-info → atlas_init-0.1.8.dist-info}/METADATA +36 -18
  69. atlas_init-0.1.8.dist-info/RECORD +91 -0
  70. {atlas_init-0.1.1.dist-info → atlas_init-0.1.8.dist-info}/WHEEL +1 -1
  71. atlas_init-0.1.1.dist-info/RECORD +0 -62
  72. /atlas_init/tf/modules/aws_vpc/{aws-vpc.tf → aws_vpc.tf} +0 -0
  73. {atlas_init-0.1.1.dist-info → atlas_init-0.1.8.dist-info}/entry_points.txt +0 -0
atlas_init/terraform.yaml CHANGED
@@ -15,7 +15,7 @@ resources:
15
15
  - tags
16
16
  attributes:
17
17
  aliases:
18
- groupId: id
18
+ groupId: project_id
19
19
  create:
20
20
  path: /api/atlas/v2/groups
21
21
  method: POST
@@ -28,3 +28,79 @@ resources:
28
28
  delete:
29
29
  path: /api/atlas/v2/groups/{groupId}
30
30
  method: DELETE
31
+ - name: streamprocessor
32
+ extensions:
33
+ - type: rename_attribute
34
+ from_name: _id
35
+ to_name: id
36
+ - type: ignore_nested
37
+ path: "*.links"
38
+ - type: change_attribute_type
39
+ path: processor_name
40
+ new_value: required
41
+ - type: change_attribute_type
42
+ path: project_id
43
+ new_value: required
44
+ - type: skip_validators
45
+ provider_spec_attributes: []
46
+ schema:
47
+ ignores:
48
+ - name
49
+ - pretty
50
+ - envelope
51
+ - links
52
+ attributes: # (only works on path attributes)
53
+ aliases:
54
+ # _id: id
55
+ # name: processor_name
56
+ groupId: project_id
57
+ tenantName: instance_name
58
+ create:
59
+ path: /api/atlas/v2/groups/{groupId}/streams/{tenantName}/processor
60
+ method: POST
61
+ read:
62
+ path: /api/atlas/v2/groups/{groupId}/streams/{tenantName}/processor/{processorName}
63
+ method: GET
64
+ delete:
65
+ path: /api/atlas/v2/groups/{groupId}/streams/{tenantName}/processor/{processorName}
66
+ method: DELETE
67
+ # update: not implemented yet
68
+ # path: api/atlas/v2/groups/{groupId}/streams/{tenantName}/processor
69
+ # method: PATCH
70
+ data_sources:
71
+ - name: stream_processor
72
+ extensions:
73
+ - type: rename_attribute
74
+ from_name: _id
75
+ to_name: id
76
+ - type: rename_attribute
77
+ from_name: tenant_name
78
+ to_name: instance_name
79
+ - type: ignore_nested
80
+ path: "*.links"
81
+ - type: change_attribute_type
82
+ path: processor_name
83
+ new_value: required
84
+ - type: change_attribute_type
85
+ path: project_id
86
+ new_value: required
87
+ - type: skip_validators
88
+ # pagination attributes
89
+ # generating test files
90
+ read:
91
+ path: /api/atlas/v2/groups/{groupId}/streams/{tenantName}/processor/{processorName}
92
+ method: GET
93
+ schema:
94
+ ignores:
95
+ - name
96
+ - pretty
97
+ - envelope
98
+ - links
99
+ attributes: # (only works on path attributes)
100
+ aliases:
101
+ groupId: project_id
102
+ - name: stream_processors
103
+ read:
104
+ # unable to extract the description here
105
+ path: /api/atlas/v2/groups/{groupId}/streams/{tenantName}/processors
106
+ method: GET
@@ -2,29 +2,25 @@
2
2
  # Manual edits may be lost in future updates.
3
3
 
4
4
  provider "registry.terraform.io/hashicorp/aws" {
5
- version = "5.49.0"
5
+ version = "5.67.0"
6
6
  constraints = "~> 5.0"
7
7
  hashes = [
8
- "h1:BKrMq4aIOvXbJA9fd0kdmIm3Q01MQcheDIEzXtrkNf4=",
9
- "h1:EMzIW40AXkmr5qYv2ynb6ToWO7oRwMNYHwHo20kXAdY=",
10
- "h1:HemCol/k4BjtyRE6GpfECiFU7JF+O3ayqfVQBwsgizQ=",
11
- "h1:RZtXnBRpO4LNmmz0tXJQLa2heqk9VFGblFZtRCZkm/M=",
12
- "h1:Y3xvYjzBIwYSbcnZDcs6moiy30uxRoY5oT2ExQHKG5A=",
13
- "zh:0979b07cdeffb868ea605e4bbc008adc7cccb5f3ba1d3a0b794ea3e8fff20932",
14
- "zh:2121a0a048a1d9419df69f3561e524b7e8a6b74ba0f57bd8948799f12b6ad3a1",
15
- "zh:573362042ba0bd18e98567a4f45d91b09eb0d223513518ba04f16a646a906403",
16
- "zh:57be7a4d6c362be2fa586d270203f4eac1ee239816239a9503b86ebc8fa1fef0",
17
- "zh:5c72ed211d9234edd70eac9d77c3cafc7bbf819d1c28332a6d77acf227c9a23c",
18
- "zh:7786d1a9781f8e8c0079bf58f4ed4aeddec0caf54ad7ddcf43c47936d545a04f",
19
- "zh:82133e7d39787ee91ed41988da71beecc2ecb900b5da94b3f3d77fbc4d4dc722",
20
- "zh:8cdb1c154dead85be8352afd30eaf41c59249de9e7e0a8eb4ab8e625b90a4922",
8
+ "h1:8wkuQvQiqjjm2+gQepy6xFBfimGoesKz1BPcVKWvED8=",
9
+ "zh:1259c8106c0a3fc0ed3b3eb814ab88d6a672e678b533f47d1bbbe3107949f43e",
10
+ "zh:226414049afd6d334cc16ff5d6cef23683620a9b56da67a21422a113d9cce4ab",
11
+ "zh:3c89b103aea20ef82a84e889abaeb971cb168de8292b61b34b83e807c40085a9",
12
+ "zh:3dd88e994fb7d7a6c6eafd3c01393274e4f776021176acea2e980f73fbd4acbc",
13
+ "zh:487e0dda221c84a20a143904c1cee4e63fce6c5c57c21368ea79beee87b108da",
14
+ "zh:7693bdcec8181aafcbda2c41c35b1386997e2c92b6f011df058009e4c8b300e1",
15
+ "zh:82679536250420f9e8e6edfd0fa9a1bab99a7f31fe5f049ac7a2e0d8c287b56f",
16
+ "zh:8685218dae921740083820c52afa66cdf14cf130539da1efd7d9a78bfb6ade64",
21
17
  "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425",
22
- "zh:ac215fd1c3bd647ae38868940651b97a53197688daefcd70b3595c84560e5267",
23
- "zh:c45db22356d20e431639061a72e07da5201f4937c1df6b9f03f32019facf3905",
24
- "zh:c9ba90e62db9a4708ed1a4e094849f88ce9d44c52b49f613b30bb3f7523b8d97",
25
- "zh:d2be3607be2209995c80dc1d66086d527de5d470f73509e813254067e8287106",
26
- "zh:e3fa20090f3cebf3911fc7ef122bd8c0505e3330ab7d541fa945fea861205007",
27
- "zh:ef1b9d5c0b6279323f2ecfc322db8083e141984cfe1bb2f33c0f4934fccb69e3",
18
+ "zh:9e553a3ec05eedea779d393447fc316689ba6c4d4d8d569b986898e6dbe58fee",
19
+ "zh:a36c24acd3c75bac8211fefde58c459778021eb871ff8339be1c26ad8fd67ee1",
20
+ "zh:ce48bd1e35d6f996f1a09d8f99e8084469b7fec5611e67a50a63e96375b87ebe",
21
+ "zh:d6c76a24205513725269e4783da14be9648e9086fb621496052f4b37d52d785e",
22
+ "zh:d95a31745affb178ea48fa8e0be94691a8f7507ea55c0d0a4b6e0a8ef6fcb929",
23
+ "zh:f061ce59fac1bc425c1092e6647ed4bb1b61824416041b46dbf336e01a63ad89",
28
24
  ]
29
25
  }
30
26
 
@@ -32,10 +28,6 @@ provider "registry.terraform.io/hashicorp/http" {
32
28
  version = "3.4.2"
33
29
  constraints = "3.4.2"
34
30
  hashes = [
35
- "h1:Te941FhpXymGvOraU9IQiMrvDVCMAF4gwjvyVZuvRtk=",
36
- "h1:YxJewcIIT5sF2h8N+F7eZMsdEimpDpveAOzq/RUiUEo=",
37
- "h1:eqo0hkFNrixeaT93PC5NiU893s7rUwwOMeqnCjjj3u0=",
38
- "h1:v6Hn+15SfN2SI281Sp+uNXdWhD197ycP07fnaoGpPcc=",
39
31
  "h1:vaoPfsLm6mOk6avKTrWi35o+9p4fEeZAY3hzYoXVTfo=",
40
32
  "zh:0ba051c9c8659ce0fec94a3d50926745f11759509c4d6de0ad5f5eb289f0edd9",
41
33
  "zh:23e6760e8406fef645913bf47bfab1ca984c1c5805d2bb0ef8310b16913d29cd",
@@ -56,11 +48,7 @@ provider "registry.terraform.io/hashicorp/local" {
56
48
  version = "2.4.1"
57
49
  constraints = "2.4.1"
58
50
  hashes = [
59
- "h1:7lfUMKAsu/HRUUs02tJxBle9XvSuNKkpTOqcFqMe5JI=",
60
- "h1:FzraUapGrJoH3ZOWiUT2m6QpZAD+HmU+JmqZgM4/o2Y=",
61
- "h1:V2G4qygMV0uHy+QTMlrjSyYgzpYmYyB6gWuE09+5CPI=",
62
51
  "h1:gpp25uNkYJYzJVnkyRr7RIBVfwLs9GSq2HNnFpTRBg0=",
63
- "h1:kgA44Hg57WNSNH/tEzpOSLEk7U3fkAkYxActZEvX0Q4=",
64
52
  "zh:244b445bf34ddbd167731cc6c6b95bbed231dc4493f8cc34bd6850cfe1f78528",
65
53
  "zh:3c330bdb626123228a0d1b1daa6c741b4d5d484ab1c7ae5d2f48d4c9885cc5e9",
66
54
  "zh:5ff5f9b791ddd7557e815449173f2db38d338e674d2d91800ac6e6d808de1d1d",
@@ -77,73 +65,61 @@ provider "registry.terraform.io/hashicorp/local" {
77
65
  }
78
66
 
79
67
  provider "registry.terraform.io/hashicorp/null" {
80
- version = "3.2.2"
68
+ version = "3.2.3"
81
69
  hashes = [
82
- "h1:Gef5VGfobY5uokA5nV/zFvWeMNR2Pmq79DH94QnNZPM=",
83
- "h1:IMVAUHKoydFrlPrl9OzasDnw/8ntZFerCC9iXw1rXQY=",
84
- "h1:m467k2tZ9cdFFgHW7LPBK2GLPH43LC6wc3ppxr8yvoE=",
85
- "h1:vWAsYRd7MjYr3adj8BVKRohVfHpWQdvkIwUQ2Jf5FVM=",
86
- "h1:zT1ZbegaAYHwQa+QwIFugArWikRJI9dqohj8xb0GY88=",
87
- "zh:3248aae6a2198f3ec8394218d05bd5e42be59f43a3a7c0b71c66ec0df08b69e7",
88
- "zh:32b1aaa1c3013d33c245493f4a65465eab9436b454d250102729321a44c8ab9a",
89
- "zh:38eff7e470acb48f66380a73a5c7cdd76cc9b9c9ba9a7249c7991488abe22fe3",
90
- "zh:4c2f1faee67af104f5f9e711c4574ff4d298afaa8a420680b0cb55d7bbc65606",
91
- "zh:544b33b757c0b954dbb87db83a5ad921edd61f02f1dc86c6186a5ea86465b546",
92
- "zh:696cf785090e1e8cf1587499516b0494f47413b43cb99877ad97f5d0de3dc539",
93
- "zh:6e301f34757b5d265ae44467d95306d61bef5e41930be1365f5a8dcf80f59452",
70
+ "h1:I0Um8UkrMUb81Fxq/dxbr3HLP2cecTH2WMJiwKSrwQY=",
71
+ "zh:22d062e5278d872fe7aed834f5577ba0a5afe34a3bdac2b81f828d8d3e6706d2",
72
+ "zh:23dead00493ad863729495dc212fd6c29b8293e707b055ce5ba21ee453ce552d",
73
+ "zh:28299accf21763ca1ca144d8f660688d7c2ad0b105b7202554ca60b02a3856d3",
74
+ "zh:55c9e8a9ac25a7652df8c51a8a9a422bd67d784061b1de2dc9fe6c3cb4e77f2f",
75
+ "zh:756586535d11698a216291c06b9ed8a5cc6a4ec43eee1ee09ecd5c6a9e297ac1",
94
76
  "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3",
95
- "zh:913a929070c819e59e94bb37a2a253c228f83921136ff4a7aa1a178c7cce5422",
96
- "zh:aa9015926cd152425dbf86d1abdbc74bfe0e1ba3d26b3db35051d7b9ca9f72ae",
97
- "zh:bb04798b016e1e1d49bcc76d62c53b56c88c63d6f2dfe38821afef17c416a0e1",
98
- "zh:c23084e1b23577de22603cff752e59128d83cfecc2e6819edadd8cf7a10af11e",
77
+ "zh:9d5eea62fdb587eeb96a8c4d782459f4e6b73baeece4d04b4a40e44faaee9301",
78
+ "zh:a6355f596a3fb8fc85c2fb054ab14e722991533f87f928e7169a486462c74670",
79
+ "zh:b5a65a789cff4ada58a5baffc76cb9767dc26ec6b45c00d2ec8b1b027f6db4ed",
80
+ "zh:db5ab669cf11d0e9f81dc380a6fdfcac437aea3d69109c7aef1a5426639d2d65",
81
+ "zh:de655d251c470197bcbb5ac45d289595295acb8f829f6c781d4a75c8c8b7c7dd",
82
+ "zh:f5c68199f2e6076bce92a12230434782bf768103a427e9bb9abee99b116af7b5",
99
83
  ]
100
84
  }
101
85
 
102
86
  provider "registry.terraform.io/hashicorp/random" {
103
- version = "3.6.1"
87
+ version = "3.6.3"
104
88
  hashes = [
105
- "h1:12+TxYsSS5bzT7uiE2w0ke2WxmhehRV7uKU1wKUUnmM=",
106
- "h1:1OlP753r4lOKlBprL0HdZGWerm5DCabD5Mli8k8lWAg=",
107
- "h1:8iqExjtAvirFTJkpm5YyYD+fC+DGV8NTJzKsE2c70VA=",
108
- "h1:Xx3UvdKXObNTjfd4yYHDcFalYZujg7NBY/VpZISiTb4=",
109
- "h1:a+Goawwh6Qtg4/bRWzfDtIdrEFfPlnVy0y4LdUQY3nI=",
110
- "zh:2a0ec154e39911f19c8214acd6241e469157489fc56b6c739f45fbed5896a176",
111
- "zh:57f4e553224a5e849c99131f5e5294be3a7adcabe2d867d8a4fef8d0976e0e52",
112
- "zh:58f09948c608e601bd9d0a9e47dcb78e2b2c13b4bda4d8f097d09152ea9e91c5",
113
- "zh:5c2a297146ed6fb3fe934c800e78380f700f49ff24dbb5fb5463134948e3a65f",
89
+ "h1:zG9uFP8l9u+yGZZvi5Te7PV62j50azpgwPunq2vTm1E=",
90
+ "zh:04ceb65210251339f07cd4611885d242cd4d0c7306e86dda9785396807c00451",
91
+ "zh:448f56199f3e99ff75d5c0afacae867ee795e4dfda6cb5f8e3b2a72ec3583dd8",
92
+ "zh:4b4c11ccfba7319e901df2dac836b1ae8f12185e37249e8d870ee10bb87a13fe",
93
+ "zh:4fa45c44c0de582c2edb8a2e054f55124520c16a39b2dfc0355929063b6395b1",
94
+ "zh:588508280501a06259e023b0695f6a18149a3816d259655c424d068982cbdd36",
95
+ "zh:737c4d99a87d2a4d1ac0a54a73d2cb62974ccb2edbd234f333abd079a32ebc9e",
114
96
  "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3",
115
- "zh:7ce41e26f0603e31cdac849085fc99e5cd5b3b73414c6c6d955c0ceb249b593f",
116
- "zh:8c9e8d30c4ef08ee8bcc4294dbf3c2115cd7d9049c6ba21422bd3471d92faf8a",
117
- "zh:93e91be717a7ffbd6410120eb925ebb8658cc8f563de35a8b53804d33c51c8b0",
118
- "zh:982542e921970d727ce10ed64795bf36c4dec77a5db0741d4665230d12250a0d",
119
- "zh:b9d1873f14d6033e216510ef541c891f44d249464f13cc07d3f782d09c7d18de",
120
- "zh:cfe27faa0bc9556391c8803ade135a5856c34a3fe85b9ae3bdd515013c0c87c1",
121
- "zh:e4aabf3184bbb556b89e4b195eab1514c86a2914dd01c23ad9813ec17e863a8a",
97
+ "zh:a357ab512e5ebc6d1fda1382503109766e21bbfdfaa9ccda43d313c122069b30",
98
+ "zh:c51bfb15e7d52cc1a2eaec2a903ac2aff15d162c172b1b4c17675190e8147615",
99
+ "zh:e0951ee6fa9df90433728b96381fb867e3db98f66f735e0c3e24f8f16903f0ad",
100
+ "zh:e3cdcb4e73740621dabd82ee6a37d6cfce7fee2a03d8074df65086760f5cf556",
101
+ "zh:eff58323099f1bd9a0bec7cb04f717e7f1b2774c7d612bf7581797e1622613a0",
122
102
  ]
123
103
  }
124
104
 
125
105
  provider "registry.terraform.io/mongodb/mongodbatlas" {
126
- version = "1.16.0"
127
- constraints = ">= 1.4.3, 1.16.0"
106
+ version = "1.19.0"
107
+ constraints = "1.19.0"
128
108
  hashes = [
129
- "h1:3xNtkJvf24ChFvQm8yl7QCf2K/KOJNF4UQNpDiZgATo=",
130
- "h1:Hmk5/O4IyOsLAc4sEChPkrP0bGetebqR0Wrz0RUNGvs=",
131
- "h1:IP2Gb4KrKAwmUSG5B0oqKYQOyGQjkeazVokw+TIuVcU=",
132
- "h1:cWeuysKYmhgvWhf6g7kC5yKsgP7uNzTFTapcAxAHMkQ=",
133
- "h1:nRsHPefWnvdHuPKUUlamC65meS60AvSg8UNL2Jp0P04=",
134
- "zh:086a72493614a00fd5e38c7c0d077269f0069dd0d9d0cbfa1b0b1834278870b3",
135
- "zh:11489ece5a1683f65ea64898c8a4cd06300cd91ae8bebbf05631020d5b549186",
136
- "zh:4a45180e6d951affb27cab0320c845fb97e1e5e0396227d9f38a27f70ede113b",
137
- "zh:4c63c33f100d20af6cce8d3c66f7c9df9a1b8d777c402a085bd888185d6c8ac5",
138
- "zh:673cb0986e2a3b6de919f5778c574842cc26502a75b1d197bf2dae5758b5b98b",
139
- "zh:7822d563d0ddaefbc476fbfd8772edc0bc7a7e53304eeb2e34ad827947e36601",
140
- "zh:7ad9a83ae72e83b1c179dd2952b16b2d1e31a34ea62ab685eb3b97025a0cf8be",
141
- "zh:928aed6481fdd7a81dd9127068438533c76ddb34fbb4cd9da71c8398bd7edefc",
142
- "zh:932543248081671d8cc5a3dcbc46cf0e4e83d3a2c333f5486e78677509b0718c",
143
- "zh:968bb58413656bd2064776cb9c5a4f435beebbe63edcbe3801d82a558be14bcf",
144
- "zh:b88b4368b501aa0159c3804d82b61e5ef71c380dd6889424003a4ca37c5aff5f",
145
- "zh:c9a98c72d1b6183dec7555a90ad0ed8a3741820d998332c33cd9a08ea26e78b4",
146
- "zh:d2f1f716cd8a3de58f23f384254847aa06eb3e0b0fe5d7ffe13aec7ada3d69ef",
147
- "zh:d70d14be3db7a1d8bb2528d8761bb8dc02ca4a06ee14657e57d2b2cec6217e13",
109
+ "h1:zzKWs4GzWXo+ImMQud/b0ECObJmbtB2wCrK3b98z1ms=",
110
+ "zh:3a8198e83b9b2dd1c461049f19464e82ce3f24d9fa7508e0e6dd642e2be70f73",
111
+ "zh:3a89a8395624a8e8516c6147b1612798f05e59ed3f13c1f6d8878099c9ca5f6e",
112
+ "zh:41ff89b10d5f1069d4bfa093e2d9297f1670863716f60d7b874f076bc37bc2ac",
113
+ "zh:5baf75906ccfc658be79b4c02c86032943af18c159f9c80a067ed696f23db527",
114
+ "zh:697aa8aebc5f4f8b6c42ba33bd1fec5ab8244555905bf6c6482ebf4733fe7976",
115
+ "zh:6d7fe4c2bca1e34e0c881266a463bbe16dd9a2934b7fa6d116c711a56b895f6f",
116
+ "zh:6dca00e357d04fbaeab6d2fa336c6704e289c076beef250a3cfe948a901bc4d4",
117
+ "zh:877a40cabcc49ee9fb40143dcbd6253d0c08ac1603a71e2cf2dde2d1fbfde574",
118
+ "zh:8a43a657196f4917f32f07ea91f056a2be6e7adb8a1fb7df4517ad9b71362c30",
119
+ "zh:91ef30b6020da3d5c5781ea6718b5f785c1eb3c7f4677343b31af2297d9f3558",
120
+ "zh:9bbc42509526c942db3979eaacd15b96ad454777993a0b002f908f9e9fcef51c",
121
+ "zh:b11fd160fcdd9cf7423283af7e0c3f0970b391b5a62ec30fe699ffdd54351896",
122
+ "zh:c297a0a188141741f14578cd8db41c309361e37b1b0904e635a7ebd0993e86f7",
123
+ "zh:c8af40986dbc42e77d0e34af7ea2d730cb87aa0471236392dbea0926ab95159a",
148
124
  ]
149
125
  }
atlas_init/tf/always.tf CHANGED
@@ -36,6 +36,8 @@ resource "mongodbatlas_project" "project" {
36
36
  org_id = var.org_id
37
37
 
38
38
  tags = local.tags
39
+ region_usage_restrictions = var.is_mongodbgov_cloud ? "GOV_REGIONS_ONLY" : null
40
+ project_owner_id = length(var.user_id) > 0 ? var.user_id : null
39
41
  }
40
42
 
41
43
  resource "mongodbatlas_project_ip_access_list" "mongo-access" {
@@ -43,3 +45,8 @@ resource "mongodbatlas_project_ip_access_list" "mongo-access" {
43
45
  project_id = mongodbatlas_project.project.id
44
46
  cidr_block = "${chomp(data.http.myip[0].response_body)}/32"
45
47
  }
48
+
49
+ data "mongodbatlas_atlas_user" "this" {
50
+ count = length(var.user_id) > 0 ? 1 : 0
51
+ user_id = var.user_id
52
+ }
atlas_init/tf/main.tf CHANGED
@@ -24,6 +24,9 @@ module "cfn" {
24
24
  atlas_private_key = var.atlas_private_key
25
25
  cfn_profile = local.cfn_profile
26
26
  tags = local.tags
27
+ aws_account_id = local.aws_account_id
28
+ use_kms_key = var.cfn_config.use_kms_key
29
+ aws_region = var.cfn_config.region
27
30
  }
28
31
 
29
32
  module "cluster" {
@@ -2,7 +2,7 @@ terraform {
2
2
  required_providers {
3
3
  mongodbatlas = {
4
4
  source = "mongodb/mongodbatlas"
5
- version = ">=1.4.3"
5
+ version = "1.19.0"
6
6
  }
7
7
  }
8
8
  required_version = ">= 1.0"
@@ -14,5 +14,7 @@ output "env_vars" {
14
14
  AWS_ACCESS_KEY_ID = var.aws_access_key_id
15
15
  AWS_SECRET_ACCESS_KEY = var.aws_secret_access_key
16
16
  AWS_REGION = var.aws_region
17
+ AWS_REGION_LOWERCASE = var.aws_region
18
+ AWS_REGION_UPPERCASE = replace(upper(var.aws_region), "-", "_")
17
19
  }
18
20
  }
@@ -2,7 +2,10 @@ terraform {
2
2
  required_providers {
3
3
  mongodbatlas = {
4
4
  source = "mongodb/mongodbatlas"
5
- version = ">=1.4.3"
5
+ version = "1.19.0"
6
+ }
7
+ aws = {
8
+ source = "hashicorp/aws"
6
9
  }
7
10
  }
8
11
  required_version = ">= 1.0"
@@ -1,22 +1,3 @@
1
- variable "cfn_profile" {
2
- type = string
3
- }
4
- variable "atlas_public_key" {
5
- type = string
6
- }
7
-
8
- variable "atlas_private_key" {
9
- type = string
10
- }
11
-
12
- variable "atlas_base_url" {
13
- type = string
14
- }
15
-
16
- variable "tags" {
17
- type = map(string)
18
- }
19
-
20
1
  terraform {
21
2
  required_providers {
22
3
  aws = {
@@ -30,22 +11,52 @@ locals {
30
11
  resource_actions_yaml = file("${path.module}/resource_actions.yaml")
31
12
  services = yamldecode(local.services_yaml)
32
13
  resource_actions = yamldecode(local.resource_actions_yaml)
14
+ role_name = "cfn-execution-role-${var.cfn_profile}"
15
+ iam_policy_statement = {
16
+ Sid = "Original"
17
+ Action = local.resource_actions
18
+ Effect = "Allow"
19
+ Resource = "*"
20
+ }
21
+ iam_policy_statement_kms = {
22
+ Sid = "Extra"
23
+ Action = ["kms:Decrypt"]
24
+ Effect = "Allow"
25
+ Resource = try(aws_kms_key.this[0].arn, "invalid-arn-not-used")
26
+ }
27
+ iam_policy_statement_cloudwatch = {
28
+ Sid = "CloudwatchLogs"
29
+ Action = ["logs:*"]
30
+ Effect = "Allow"
31
+ Resource = "*"
32
+ }
33
+ iam_policy_statements = var.use_kms_key ? [local.iam_policy_statement, local.iam_policy_statement_kms, local.iam_policy_statement_cloudwatch] : [local.iam_policy_statement, local.iam_policy_statement_cloudwatch]
34
+ iam_role_policy_json = jsonencode({
35
+ Version = "2012-10-17"
36
+ Statement = local.iam_policy_statements
37
+ })
33
38
  }
34
39
 
35
40
  resource "aws_secretsmanager_secret" "cfn" {
36
41
  name = "cfn/atlas/profile/${var.cfn_profile}"
42
+ description = "Secrets for the cfn ${var.cfn_profile} profile"
37
43
  recovery_window_in_days = 0 # allow force deletion
38
44
  tags = var.tags
45
+ kms_key_id = var.use_kms_key ? aws_kms_key.this[0].arn : null
39
46
  }
47
+
40
48
  resource "aws_secretsmanager_secret_version" "cfn" {
41
49
  secret_id = aws_secretsmanager_secret.cfn.id
42
50
  secret_string = jsonencode({
43
- BaseUrl = var.atlas_base_url
44
- PublicKey = var.atlas_public_key
45
- PrivateKey = var.atlas_private_key
51
+ BaseUrl = var.atlas_base_url
52
+ PublicKey = var.atlas_public_key
53
+ PrivateKey = var.atlas_private_key
54
+ DebugClient = true
46
55
  })
47
56
  }
48
57
 
58
+ data "aws_caller_identity" "this" {}
59
+
49
60
  data "aws_iam_policy_document" "assume_role" {
50
61
  statement {
51
62
  actions = ["sts:AssumeRole"]
@@ -54,27 +65,22 @@ data "aws_iam_policy_document" "assume_role" {
54
65
  type = "Service"
55
66
  identifiers = local.services
56
67
  }
68
+ principals {
69
+ type = "AWS"
70
+ identifiers = [data.aws_caller_identity.this.arn] # Allow the terraform creator account to assume the role
71
+ }
57
72
  }
58
73
  }
59
74
 
60
75
  resource "aws_iam_role" "execution_role" {
61
- name = "cfn-execution-role-${var.cfn_profile}"
76
+ name = local.role_name
62
77
  assume_role_policy = data.aws_iam_policy_document.assume_role.json
63
78
  max_session_duration = 8400
64
79
 
65
80
  inline_policy {
66
81
  name = "ResourceTypePolicy"
67
82
 
68
- policy = jsonencode({
69
- Version = "2012-10-17"
70
- Statement = [
71
- {
72
- Action = local.resource_actions
73
- Effect = "Allow"
74
- Resource = "*"
75
- },
76
- ]
77
- })
83
+ policy = local.iam_role_policy_json
78
84
 
79
85
  }
80
86
  }
@@ -89,3 +95,11 @@ output "env_vars" {
89
95
  CFN_EXAMPLE_EXECUTION_ROLE = aws_iam_role.execution_role.arn
90
96
  }
91
97
  }
98
+
99
+
100
+ output "info" {
101
+ value = {
102
+ kms_key_policy_json = local.kms_key_policy_json
103
+ iam_role_policy_json = local.iam_role_policy_json
104
+ }
105
+ }
@@ -0,0 +1,54 @@
1
+ locals {
2
+ account_principal = {
3
+ AWS = var.aws_account_id
4
+ }
5
+ kms_secretsmanager_condition = {
6
+ StringEquals = {
7
+ "kms:CallerAccount" = var.aws_account_id
8
+ "kms:ViaService" = "secretsmanager.${var.aws_region}.amazonaws.com"
9
+ }
10
+ }
11
+ kms_key_policy_json = jsonencode({
12
+ Version = "2012-10-17",
13
+ Statement = [
14
+ {
15
+ Sid = "Enable IAM User Permissions",
16
+ Effect = "Allow",
17
+ Principal = local.account_principal,
18
+ Action = "kms:*",
19
+ Resource = "*"
20
+ },
21
+ {
22
+ Sid = "Enable IAM User Permissions for Role",
23
+ Effect = "Allow",
24
+ Principal = {
25
+ AWS = "*"
26
+ }
27
+ Action = "kms:Decrypt",
28
+ Resource = "*"
29
+ Condition = {
30
+ StringEquals = {
31
+ "aws:PrincipalArn" = "arn:aws:iam::${var.aws_account_id}:role/${local.role_name}"
32
+ }
33
+ }
34
+ },
35
+ # { useful to check our example guide
36
+ # "Sid" : "Allow access through AWS Secrets Manager for all principals in the account that are authorized to use AWS Secrets Manager",
37
+ # "Effect" : "Allow",
38
+ # # "Principal" : { "AWS" : [aws_iam_role.execution_role.arn] },
39
+ # "Principal" : { "AWS" : "*" },
40
+ # "Action" : [
41
+ # "kms:Decrypt",
42
+ # ],
43
+ # "Resource" : "*",
44
+ # "Condition" : local.kms_secretsmanager_condition
45
+ # },
46
+ ]
47
+ })
48
+ }
49
+ resource "aws_kms_key" "this" {
50
+ count = var.use_kms_key ? 1 : 0
51
+ description = "KMS key for ${var.cfn_profile}"
52
+ deletion_window_in_days = 7
53
+ policy = local.kms_key_policy_json
54
+ }
@@ -2,6 +2,7 @@
2
2
  - "secretsmanager:PutSecretValue"
3
3
  - "ec2:CreateVpcEndpoint"
4
4
  - "ec2:DeleteVpcEndpoints"
5
+ - "ec2:DescribeVpcEndpoints"
5
6
  - "cloudformation:CreateResource"
6
7
  - "cloudformation:DeleteResource"
7
8
  - "cloudformation:GetResource"
@@ -0,0 +1,31 @@
1
+ variable "cfn_profile" {
2
+ type = string
3
+ }
4
+ variable "atlas_public_key" {
5
+ type = string
6
+ }
7
+
8
+ variable "atlas_private_key" {
9
+ type = string
10
+ }
11
+
12
+ variable "atlas_base_url" {
13
+ type = string
14
+ }
15
+
16
+ variable "tags" {
17
+ type = map(string)
18
+ }
19
+
20
+ variable "use_kms_key" {
21
+ type = bool
22
+ default = false
23
+ }
24
+
25
+ variable "aws_account_id" {
26
+ type = string
27
+ }
28
+
29
+ variable "aws_region" {
30
+ type = string
31
+ }
@@ -49,6 +49,7 @@ EOF
49
49
  output "env_vars" {
50
50
  value = {
51
51
  IAM_ROLE_ID = mongodbatlas_cloud_provider_access_authorization.auth_role.role_id
52
+ AWS_IAM_ROLE_ARN = aws_iam_role.aws_role.arn
52
53
  }
53
54
  }
54
55
 
@@ -2,7 +2,7 @@ terraform {
2
2
  required_providers {
3
3
  mongodbatlas = {
4
4
  source = "mongodb/mongodbatlas"
5
- version = ">=1.4.3"
5
+ version = "1.19.0"
6
6
  }
7
7
  aws = {
8
8
  source = "hashicorp/aws"
@@ -28,42 +28,51 @@ variable "cloud_backup" {
28
28
 
29
29
  locals {
30
30
  use_free_cluster = var.instance_size == "M0"
31
- cluster = try(mongodbatlas_cluster.project_cluster_free[0], mongodbatlas_cluster.project_cluster[0])
32
- container_id = local.cluster.container_id
31
+ cluster = try(mongodbatlas_advanced_cluster.project_cluster_free[0], mongodbatlas_advanced_cluster.project_cluster[0])
32
+ container_id = one(values(local.cluster.replication_specs[0].container_id))
33
+ mongodb_url = "mongodb+srv://${var.mongo_user}:${var.mongo_password}@${replace(local.cluster.connection_strings[0].standard_srv, "mongodb+srv://", "")}/?retryWrites=true"
33
34
  }
34
- resource "mongodbatlas_cluster" "project_cluster_free" {
35
+ resource "mongodbatlas_advanced_cluster" "project_cluster_free" {
35
36
  count = local.use_free_cluster ? 1 : 0
36
37
  project_id = var.project_id
37
38
  name = var.cluster_name
39
+ cluster_type = "REPLICASET"
38
40
 
39
- provider_name = "TENANT"
40
- backing_provider_name = "AWS"
41
- provider_region_name = var.region
42
- provider_instance_size_name = var.instance_size
41
+ replication_specs {
42
+ region_configs {
43
+ auto_scaling {
44
+ disk_gb_enabled = false
45
+ }
46
+ priority = 7
47
+ provider_name = "TENANT"
48
+ backing_provider_name = "AWS"
49
+ region_name = var.region
50
+ electable_specs {
51
+ instance_size = var.instance_size
52
+ }
53
+ }
54
+ }
43
55
  }
44
56
 
45
- resource "mongodbatlas_cluster" "project_cluster" {
57
+ resource "mongodbatlas_advanced_cluster" "project_cluster" {
46
58
  count = local.use_free_cluster ? 0 : 1
47
59
  project_id = var.project_id
48
60
  name = var.cluster_name
49
- cloud_backup = var.cloud_backup
61
+ backup_enabled = var.cloud_backup
50
62
  cluster_type = "REPLICASET"
63
+
51
64
  replication_specs {
52
- num_shards = 1
53
- regions_config {
54
- region_name = var.region
55
- electable_nodes = 3
65
+ region_configs {
56
66
  priority = 7
57
- read_only_nodes = 0
67
+ provider_name = "AWS"
68
+ region_name = var.region
69
+ electable_specs {
70
+ node_count = 3
71
+ instance_size = var.instance_size
72
+ disk_size_gb = 10
73
+ }
58
74
  }
59
75
  }
60
- auto_scaling_disk_gb_enabled = false
61
- mongo_db_major_version = "5.0"
62
-
63
- # Provider Settings "block"
64
- provider_name = "AWS"
65
- disk_size_gb = 10
66
- provider_instance_size_name = var.instance_size
67
76
  }
68
77
 
69
78
  resource "mongodbatlas_database_user" "mongo-user" {
@@ -90,11 +99,11 @@ output "info" {
90
99
  sensitive = true
91
100
  value = {
92
101
  standard_srv = local.cluster.connection_strings[0].standard_srv
93
- mongo_url = "mongodb+srv://${var.mongo_user}:${var.mongo_password}@${replace(local.cluster.srv_address, "mongodb+srv://", "")}/?retryWrites=true"
102
+ mongo_url = local.mongodb_url
94
103
  mongo_username = var.mongo_user
95
104
  mongo_password = var.mongo_password
96
- mongo_url_with_db = "mongodb+srv://${var.mongo_user}:${var.mongo_password}@${replace(local.cluster.srv_address, "mongodb+srv://", "")}/${var.db_in_url}?retryWrites=true"
97
- cluster_container_id = local.cluster.container_id
105
+ mongo_url_with_db = "mongodb+srv://${var.mongo_user}:${var.mongo_password}@${replace(local.cluster.connection_strings[0].standard_srv, "mongodb+srv://", "")}/${var.db_in_url}?retryWrites=true"
106
+ cluster_container_id = local.container_id
98
107
  }
99
108
  }
100
109
 
@@ -102,5 +111,6 @@ output "env_vars" {
102
111
  value = {
103
112
  MONGODB_ATLAS_CLUSTER_NAME = var.cluster_name
104
113
  MONGODB_ATLAS_CONTAINER_ID = local.container_id
114
+ MONGODB_URL = local.mongodb_url
105
115
  }
106
116
  }