diff --git a/.secrets.baseline b/.secrets.baseline index 9ad4c81e..e9141323 100644 --- a/.secrets.baseline +++ b/.secrets.baseline @@ -3,7 +3,7 @@ "files": "^.secrets.baseline$", "lines": null }, - "generated_at": "2025-10-11T18:50:55Z", + "generated_at": "2025-10-25T13:31:19Z", "plugins_used": [ { "name": "AWSKeyDetector" @@ -151,7 +151,7 @@ "verified_result": null }, { - "hashed_secret": "f8d5857f2cde583fea28ce64327a85e665d3edd0", + "hashed_secret": "05d0400767477ee4bdebe067d5f4d0fc2225ff95", "is_secret": false, "is_verified": false, "line_number": 5, @@ -167,7 +167,7 @@ "verified_result": null }, { - "hashed_secret": "53504e50dc39925fcbb13a52a40e6f2b12947541", + "hashed_secret": "36a4c90d840d42d2c29beaa96c252ee6075ed1f9", "is_secret": false, "is_verified": false, "line_number": 7, @@ -207,7 +207,7 @@ "verified_result": null }, { - "hashed_secret": "fa9e594c4103e4fb4283101601f85e23dacd787b", + "hashed_secret": "f9a82836e671a24edfebb83cd2cf8a0546023643", "is_secret": false, "is_verified": false, "line_number": 12, @@ -223,7 +223,7 @@ "verified_result": null }, { - "hashed_secret": "105b1f83a4268f100b58ba692ab94ce53fd965e0", + "hashed_secret": "5bb13b61576b32ed4ae640a817622ac9fd386691", "is_secret": false, "is_verified": false, "line_number": 14, @@ -679,7 +679,7 @@ "verified_result": null }, { - "hashed_secret": "c8b1253d69720b3646d28d0a1bea846786405ea8", + "hashed_secret": "da6d925b9f2ffb2053ad3603b046522cd00f36fd", "is_secret": false, "is_verified": false, "line_number": 73, @@ -767,7 +767,7 @@ "verified_result": null }, { - "hashed_secret": "22c461929a25fb9047f21ae20f9bc983f91bd483", + "hashed_secret": "9a8179b67bd0ac540d9c75e396c9e27f64c024bd", "is_secret": false, "is_verified": false, "line_number": 87, @@ -775,7 +775,7 @@ "verified_result": null }, { - "hashed_secret": "1005fd25fbf8c3ff7308cbf30d7f7f11a544b3f0", + "hashed_secret": "9a368df20ea961b28a79c4592dd17d5a2688c657", "is_secret": false, "is_verified": false, "line_number": 88, @@ -879,7 +879,7 @@ "verified_result": null }, { - "hashed_secret": "786e4b30dfd225e9c2697f75114401ff35adf246", + "hashed_secret": "c17d1ebdaff4c9deef888a833f5af60598901562", "is_secret": false, "is_verified": false, "line_number": 101, @@ -887,7 +887,7 @@ "verified_result": null }, { - "hashed_secret": "33c8f09052e10f15e5acdc6cfee65fc414bad770", + "hashed_secret": "f209b9906fdba75b90034fa63c201db7ae383078", "is_secret": false, "is_verified": false, "line_number": 102, @@ -1047,7 +1047,7 @@ "verified_result": null }, { - "hashed_secret": "bf31657f833c1116fec8046f572849129bba752e", + "hashed_secret": "b67cd35e21254731cc38afe8e7b932358bf43490", "is_secret": false, "is_verified": false, "line_number": 122, @@ -1055,7 +1055,7 @@ "verified_result": null }, { - "hashed_secret": "44ebfd0784cd8ece4bb5da04e0805a652a64cdea", + "hashed_secret": "5c07fe19a4857daf121f6eb395ca69ef3ad61972", "is_secret": false, "is_verified": false, "line_number": 123, @@ -1063,7 +1063,7 @@ "verified_result": null }, { - "hashed_secret": "4fb18fc74dca10136741c8fae75f110b36547ecb", + "hashed_secret": "bf31657f833c1116fec8046f572849129bba752e", "is_secret": false, "is_verified": false, "line_number": 124, @@ -1071,7 +1071,7 @@ "verified_result": null }, { - "hashed_secret": "dcd5a94e847ae345720515a86b5c38909ed7e292", + "hashed_secret": "44ebfd0784cd8ece4bb5da04e0805a652a64cdea", "is_secret": false, "is_verified": false, "line_number": 125, @@ -1079,7 +1079,7 @@ "verified_result": null }, { - "hashed_secret": "7dd27da115c0e5a2c6b17177d87db0398f588e2c", + "hashed_secret": "4fb18fc74dca10136741c8fae75f110b36547ecb", "is_secret": false, "is_verified": false, "line_number": 126, @@ -1087,7 +1087,7 @@ "verified_result": null }, { - "hashed_secret": "4737e19de813b5450978d93dffa8696c47d50a69", + "hashed_secret": "dcd5a94e847ae345720515a86b5c38909ed7e292", "is_secret": false, "is_verified": false, "line_number": 127, @@ -1095,7 +1095,7 @@ "verified_result": null }, { - "hashed_secret": "e49dc38710a2391fde4db5f07a7ed4318127f040", + "hashed_secret": "7dd27da115c0e5a2c6b17177d87db0398f588e2c", "is_secret": false, "is_verified": false, "line_number": 128, @@ -1103,7 +1103,7 @@ "verified_result": null }, { - "hashed_secret": "6ee57305457a0e5f69f7e809fd8de962abcaf307", + "hashed_secret": "4737e19de813b5450978d93dffa8696c47d50a69", "is_secret": false, "is_verified": false, "line_number": 129, @@ -1111,7 +1111,7 @@ "verified_result": null }, { - "hashed_secret": "d16c127ea2611457aa481bf259948e6f0d369f51", + "hashed_secret": "e49dc38710a2391fde4db5f07a7ed4318127f040", "is_secret": false, "is_verified": false, "line_number": 130, @@ -1119,7 +1119,7 @@ "verified_result": null }, { - "hashed_secret": "c1f3726edbaccf566b3d1311247a06fc20a91e93", + "hashed_secret": "6ee57305457a0e5f69f7e809fd8de962abcaf307", "is_secret": false, "is_verified": false, "line_number": 131, @@ -1127,55 +1127,55 @@ "verified_result": null }, { - "hashed_secret": "f113935abe970f8ff93ee3727c043c00222dcd74", + "hashed_secret": "d16c127ea2611457aa481bf259948e6f0d369f51", "is_secret": false, "is_verified": false, - "line_number": 133, + "line_number": 132, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "d0b54b31b69a26e40d8c69ec6c262b05157419f9", + "hashed_secret": "c1f3726edbaccf566b3d1311247a06fc20a91e93", "is_secret": false, "is_verified": false, - "line_number": 134, + "line_number": 133, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "fa5b74e1798f4a165c2148ddb49338b4364049e3", + "hashed_secret": "f113935abe970f8ff93ee3727c043c00222dcd74", "is_secret": false, "is_verified": false, - "line_number": 136, + "line_number": 135, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "2019200cc0bc83a5a95da30ea65c795d6cef8d80", + "hashed_secret": "d0b54b31b69a26e40d8c69ec6c262b05157419f9", "is_secret": false, "is_verified": false, - "line_number": 139, + "line_number": 136, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "842654532e980beededcff7f86f211f6f6fb75ea", + "hashed_secret": "fa5b74e1798f4a165c2148ddb49338b4364049e3", "is_secret": false, "is_verified": false, - "line_number": 142, + "line_number": 138, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "663ff96310add0b89fc17989804355fd71961587", + "hashed_secret": "2019200cc0bc83a5a95da30ea65c795d6cef8d80", "is_secret": false, "is_verified": false, - "line_number": 143, + "line_number": 141, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "60b6054f8e077d77f63d8abccfe3c58496ef9314", + "hashed_secret": "842654532e980beededcff7f86f211f6f6fb75ea", "is_secret": false, "is_verified": false, "line_number": 144, @@ -1183,7 +1183,7 @@ "verified_result": null }, { - "hashed_secret": "f9db4a554ae8569e737f0d3f0ef0de8ef6a313b7", + "hashed_secret": "663ff96310add0b89fc17989804355fd71961587", "is_secret": false, "is_verified": false, "line_number": 145, @@ -1191,39 +1191,39 @@ "verified_result": null }, { - "hashed_secret": "76a85d104709399dfe5d9f0de075c8644366d60c", + "hashed_secret": "60b6054f8e077d77f63d8abccfe3c58496ef9314", "is_secret": false, "is_verified": false, - "line_number": 150, + "line_number": 146, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "d30d0ac43bdaf26eb8c2e5545cbab0432ade7408", + "hashed_secret": "f9db4a554ae8569e737f0d3f0ef0de8ef6a313b7", "is_secret": false, "is_verified": false, - "line_number": 151, + "line_number": 147, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "7c1c48d0bddf9004fb3590124588fc892c839d78", + "hashed_secret": "1f8b9caf86066d5920ac292f1b9f9c8114bb2a04", "is_secret": false, "is_verified": false, - "line_number": 153, + "line_number": 152, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "d776f4216a5facfe0ed172a85e239af4ef2620d3", + "hashed_secret": "66266560e591d4db957e59c6687399d1c9cc49b1", "is_secret": false, "is_verified": false, - "line_number": 154, + "line_number": 153, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "ddd04086256b6596d5678dc919e1018bc7baed6f", + "hashed_secret": "7c1c48d0bddf9004fb3590124588fc892c839d78", "is_secret": false, "is_verified": false, "line_number": 155, @@ -1231,7 +1231,7 @@ "verified_result": null }, { - "hashed_secret": "8354e491f232fcc2d3b615a76d7e0bdac465112e", + "hashed_secret": "d776f4216a5facfe0ed172a85e239af4ef2620d3", "is_secret": false, "is_verified": false, "line_number": 156, @@ -1239,7 +1239,7 @@ "verified_result": null }, { - "hashed_secret": "790de52084fe0f767242422a57b54ae5f30f7726", + "hashed_secret": "ddd04086256b6596d5678dc919e1018bc7baed6f", "is_secret": false, "is_verified": false, "line_number": 157, @@ -1247,7 +1247,7 @@ "verified_result": null }, { - "hashed_secret": "fb5d877327ee42278d4aaa8b5b79ae96447d013e", + "hashed_secret": "8354e491f232fcc2d3b615a76d7e0bdac465112e", "is_secret": false, "is_verified": false, "line_number": 158, @@ -1255,7 +1255,7 @@ "verified_result": null }, { - "hashed_secret": "3b70dd648ef5991cebbe0a1e8cb6743c4d2d5fd8", + "hashed_secret": "790de52084fe0f767242422a57b54ae5f30f7726", "is_secret": false, "is_verified": false, "line_number": 159, @@ -1263,7 +1263,7 @@ "verified_result": null }, { - "hashed_secret": "408f026f7bf9ac4f0644b90cabd113a3e79c605b", + "hashed_secret": "fb5d877327ee42278d4aaa8b5b79ae96447d013e", "is_secret": false, "is_verified": false, "line_number": 160, @@ -1271,7 +1271,7 @@ "verified_result": null }, { - "hashed_secret": "8c3e2d8759e304ce512eabb35feeaec35edba344", + "hashed_secret": "3b70dd648ef5991cebbe0a1e8cb6743c4d2d5fd8", "is_secret": false, "is_verified": false, "line_number": 161, @@ -1279,7 +1279,7 @@ "verified_result": null }, { - "hashed_secret": "be49fbb6e19d4f6461420b68a3c23127b8345dd1", + "hashed_secret": "408f026f7bf9ac4f0644b90cabd113a3e79c605b", "is_secret": false, "is_verified": false, "line_number": 162, @@ -1287,7 +1287,7 @@ "verified_result": null }, { - "hashed_secret": "bd6db33dd6f44b301a844cc3ad1f3fdcbdde7836", + "hashed_secret": "8c3e2d8759e304ce512eabb35feeaec35edba344", "is_secret": false, "is_verified": false, "line_number": 163, @@ -1295,7 +1295,7 @@ "verified_result": null }, { - "hashed_secret": "9fa4360c11321be8d1ec2019381b66f202537391", + "hashed_secret": "be49fbb6e19d4f6461420b68a3c23127b8345dd1", "is_secret": false, "is_verified": false, "line_number": 164, @@ -1303,7 +1303,7 @@ "verified_result": null }, { - "hashed_secret": "af85b4028a19e55bbcf0e736edbde8ef0f9c62ed", + "hashed_secret": "bd6db33dd6f44b301a844cc3ad1f3fdcbdde7836", "is_secret": false, "is_verified": false, "line_number": 165, @@ -1311,7 +1311,7 @@ "verified_result": null }, { - "hashed_secret": "4f2056922b93342b6a6d776a8f3d11ded3c269cf", + "hashed_secret": "9fa4360c11321be8d1ec2019381b66f202537391", "is_secret": false, "is_verified": false, "line_number": 166, @@ -1319,7 +1319,7 @@ "verified_result": null }, { - "hashed_secret": "8a097328f581303ae619ed32137fe40baf8a6b09", + "hashed_secret": "af85b4028a19e55bbcf0e736edbde8ef0f9c62ed", "is_secret": false, "is_verified": false, "line_number": 167, @@ -1327,7 +1327,7 @@ "verified_result": null }, { - "hashed_secret": "ea7b710256bf28ff1111489089d204a5b54e27df", + "hashed_secret": "4f2056922b93342b6a6d776a8f3d11ded3c269cf", "is_secret": false, "is_verified": false, "line_number": 168, @@ -1335,7 +1335,7 @@ "verified_result": null }, { - "hashed_secret": "0ccdf6d0140ba50c042fc39b6e820198cd6c65e5", + "hashed_secret": "8a097328f581303ae619ed32137fe40baf8a6b09", "is_secret": false, "is_verified": false, "line_number": 169, @@ -1343,7 +1343,7 @@ "verified_result": null }, { - "hashed_secret": "83af251fc852c834e7f95f400b522212545a0291", + "hashed_secret": "ea7b710256bf28ff1111489089d204a5b54e27df", "is_secret": false, "is_verified": false, "line_number": 170, @@ -1351,7 +1351,7 @@ "verified_result": null }, { - "hashed_secret": "88cf6edcd84c368dba0c744567b46bd7afb83a6f", + "hashed_secret": "0ccdf6d0140ba50c042fc39b6e820198cd6c65e5", "is_secret": false, "is_verified": false, "line_number": 171, @@ -1359,7 +1359,7 @@ "verified_result": null }, { - "hashed_secret": "ad91e21a28b628f4d22c5530b1dde94320c0b13b", + "hashed_secret": "83af251fc852c834e7f95f400b522212545a0291", "is_secret": false, "is_verified": false, "line_number": 172, @@ -1367,7 +1367,7 @@ "verified_result": null }, { - "hashed_secret": "966759a40d977a83225204b1655f08b01c0880a9", + "hashed_secret": "88cf6edcd84c368dba0c744567b46bd7afb83a6f", "is_secret": false, "is_verified": false, "line_number": 173, @@ -1375,7 +1375,7 @@ "verified_result": null }, { - "hashed_secret": "a47e193491582f62bfcac91b2ff138417fd0269b", + "hashed_secret": "ad91e21a28b628f4d22c5530b1dde94320c0b13b", "is_secret": false, "is_verified": false, "line_number": 174, @@ -1383,7 +1383,7 @@ "verified_result": null }, { - "hashed_secret": "23e9ec23f3a22bf77d1a899acdd1f0c0120bd62a", + "hashed_secret": "966759a40d977a83225204b1655f08b01c0880a9", "is_secret": false, "is_verified": false, "line_number": 175, @@ -1391,7 +1391,7 @@ "verified_result": null }, { - "hashed_secret": "7a878fd8bf2097f6a1b00f9ce788bfa9d53f90c9", + "hashed_secret": "261d584f3ac18536e49288b8fded23e90ab16530", "is_secret": false, "is_verified": false, "line_number": 176, @@ -1399,7 +1399,7 @@ "verified_result": null }, { - "hashed_secret": "a7d45ab6614cd8dde239e12180b96b912ed8844b", + "hashed_secret": "19f0bccb61918bfed910b755be867a04f3ba2b1c", "is_secret": false, "is_verified": false, "line_number": 177, @@ -1407,7 +1407,7 @@ "verified_result": null }, { - "hashed_secret": "dabf5af055c0949018846b5d84f7dc151775f974", + "hashed_secret": "7a878fd8bf2097f6a1b00f9ce788bfa9d53f90c9", "is_secret": false, "is_verified": false, "line_number": 178, @@ -1415,7 +1415,7 @@ "verified_result": null }, { - "hashed_secret": "56a095766bca451819a8d34574c0dab6f9c7222f", + "hashed_secret": "a7d45ab6614cd8dde239e12180b96b912ed8844b", "is_secret": false, "is_verified": false, "line_number": 179, @@ -1423,7 +1423,7 @@ "verified_result": null }, { - "hashed_secret": "0bd297b3f4751f8c5f975492a65fa23398039299", + "hashed_secret": "dabf5af055c0949018846b5d84f7dc151775f974", "is_secret": false, "is_verified": false, "line_number": 180, @@ -1431,7 +1431,7 @@ "verified_result": null }, { - "hashed_secret": "1b783352e540a36d6b90463b701f881e21206abe", + "hashed_secret": "56a095766bca451819a8d34574c0dab6f9c7222f", "is_secret": false, "is_verified": false, "line_number": 181, @@ -1439,7 +1439,7 @@ "verified_result": null }, { - "hashed_secret": "5d529a3e9865bc01e1e1481f77bcaf82a3bb77bc", + "hashed_secret": "0bd297b3f4751f8c5f975492a65fa23398039299", "is_secret": false, "is_verified": false, "line_number": 182, @@ -1447,7 +1447,7 @@ "verified_result": null }, { - "hashed_secret": "30056b428f1d10c1af08f1dbf75f2d98e4ac42ba", + "hashed_secret": "1b783352e540a36d6b90463b701f881e21206abe", "is_secret": false, "is_verified": false, "line_number": 183, @@ -1455,7 +1455,7 @@ "verified_result": null }, { - "hashed_secret": "feb63477f33b23d79549bd1705c6ce55c5f13e3d", + "hashed_secret": "5d529a3e9865bc01e1e1481f77bcaf82a3bb77bc", "is_secret": false, "is_verified": false, "line_number": 184, @@ -1463,7 +1463,7 @@ "verified_result": null }, { - "hashed_secret": "a2dc989418828446ead9ac9b0da9a5af07c947c5", + "hashed_secret": "30056b428f1d10c1af08f1dbf75f2d98e4ac42ba", "is_secret": false, "is_verified": false, "line_number": 185, @@ -1471,7 +1471,7 @@ "verified_result": null }, { - "hashed_secret": "ee31fa494085d702f8f3c0f5f798b6e22a8f5671", + "hashed_secret": "feb63477f33b23d79549bd1705c6ce55c5f13e3d", "is_secret": false, "is_verified": false, "line_number": 186, @@ -1479,7 +1479,7 @@ "verified_result": null }, { - "hashed_secret": "49fffe5e5e9aadbd2bdab9ee2848ae04854535d9", + "hashed_secret": "a2dc989418828446ead9ac9b0da9a5af07c947c5", "is_secret": false, "is_verified": false, "line_number": 187, @@ -1487,7 +1487,7 @@ "verified_result": null }, { - "hashed_secret": "279fcb35413aa4e733ccc4af7a65f0dffffb1b39", + "hashed_secret": "ee31fa494085d702f8f3c0f5f798b6e22a8f5671", "is_secret": false, "is_verified": false, "line_number": 188, @@ -1495,7 +1495,7 @@ "verified_result": null }, { - "hashed_secret": "04fbfa683977ae04a5c0035936055d57ad16692c", + "hashed_secret": "49fffe5e5e9aadbd2bdab9ee2848ae04854535d9", "is_secret": false, "is_verified": false, "line_number": 189, @@ -1503,7 +1503,7 @@ "verified_result": null }, { - "hashed_secret": "ba587f6a940dca65109d203c5816402c862e3c54", + "hashed_secret": "279fcb35413aa4e733ccc4af7a65f0dffffb1b39", "is_secret": false, "is_verified": false, "line_number": 190, @@ -1511,7 +1511,7 @@ "verified_result": null }, { - "hashed_secret": "7ee178324b977e202c99a1df3f1ae92819b7a67d", + "hashed_secret": "04fbfa683977ae04a5c0035936055d57ad16692c", "is_secret": false, "is_verified": false, "line_number": 191, @@ -1519,7 +1519,7 @@ "verified_result": null }, { - "hashed_secret": "237f64c111ccc8fd3243a7fd7f7b06965ea3a0b8", + "hashed_secret": "ba587f6a940dca65109d203c5816402c862e3c54", "is_secret": false, "is_verified": false, "line_number": 192, @@ -1527,7 +1527,7 @@ "verified_result": null }, { - "hashed_secret": "3281c8f52dbb2e95e00f3bf25a175def72bc3aea", + "hashed_secret": "7ee178324b977e202c99a1df3f1ae92819b7a67d", "is_secret": false, "is_verified": false, "line_number": 193, @@ -1535,7 +1535,7 @@ "verified_result": null }, { - "hashed_secret": "8b008690a2114bf8092791ae8aa0b0177a2e78af", + "hashed_secret": "237f64c111ccc8fd3243a7fd7f7b06965ea3a0b8", "is_secret": false, "is_verified": false, "line_number": 194, @@ -1543,7 +1543,7 @@ "verified_result": null }, { - "hashed_secret": "e134a4ec1ab316db90f0c25018be96acddea30c3", + "hashed_secret": "3281c8f52dbb2e95e00f3bf25a175def72bc3aea", "is_secret": false, "is_verified": false, "line_number": 195, @@ -1551,7 +1551,7 @@ "verified_result": null }, { - "hashed_secret": "0486945b62e783140f12501cf95c913bd36420bb", + "hashed_secret": "8b008690a2114bf8092791ae8aa0b0177a2e78af", "is_secret": false, "is_verified": false, "line_number": 196, @@ -1559,7 +1559,7 @@ "verified_result": null }, { - "hashed_secret": "f75367088a2e98953d5aeced6caf88f0080a998b", + "hashed_secret": "e134a4ec1ab316db90f0c25018be96acddea30c3", "is_secret": false, "is_verified": false, "line_number": 197, @@ -1567,7 +1567,7 @@ "verified_result": null }, { - "hashed_secret": "c2c0948d9ccd889e98de0b7946f629512dd6dc6c", + "hashed_secret": "0486945b62e783140f12501cf95c913bd36420bb", "is_secret": false, "is_verified": false, "line_number": 198, @@ -1575,7 +1575,7 @@ "verified_result": null }, { - "hashed_secret": "cef802addf6c3190f2f4f5622b8984fb27fe3a14", + "hashed_secret": "f75367088a2e98953d5aeced6caf88f0080a998b", "is_secret": false, "is_verified": false, "line_number": 199, @@ -1583,7 +1583,7 @@ "verified_result": null }, { - "hashed_secret": "e464c9d445ee897d5aabe03c95cf75b97f784ee4", + "hashed_secret": "c2c0948d9ccd889e98de0b7946f629512dd6dc6c", "is_secret": false, "is_verified": false, "line_number": 200, @@ -1591,7 +1591,7 @@ "verified_result": null }, { - "hashed_secret": "6dddc3f382937d931592bdda8357bb2369a00af6", + "hashed_secret": "cef802addf6c3190f2f4f5622b8984fb27fe3a14", "is_secret": false, "is_verified": false, "line_number": 201, @@ -1599,7 +1599,7 @@ "verified_result": null }, { - "hashed_secret": "de983788a776b2c20ea3c64eba3819390446dd71", + "hashed_secret": "e464c9d445ee897d5aabe03c95cf75b97f784ee4", "is_secret": false, "is_verified": false, "line_number": 202, @@ -1607,7 +1607,7 @@ "verified_result": null }, { - "hashed_secret": "003731bc576ff7267b5ba3d17b514ae37f1fb231", + "hashed_secret": "6dddc3f382937d931592bdda8357bb2369a00af6", "is_secret": false, "is_verified": false, "line_number": 203, @@ -1615,7 +1615,7 @@ "verified_result": null }, { - "hashed_secret": "3db5859b2a1d3aa7685d7d0a4d64d13f5ff81eca", + "hashed_secret": "de983788a776b2c20ea3c64eba3819390446dd71", "is_secret": false, "is_verified": false, "line_number": 204, @@ -1623,7 +1623,7 @@ "verified_result": null }, { - "hashed_secret": "2a72ce4f8e3f20a220412b7438f461ddec080392", + "hashed_secret": "003731bc576ff7267b5ba3d17b514ae37f1fb231", "is_secret": false, "is_verified": false, "line_number": 205, @@ -1631,7 +1631,7 @@ "verified_result": null }, { - "hashed_secret": "26bad069b306312f02c1257af4697059143cb508", + "hashed_secret": "3db5859b2a1d3aa7685d7d0a4d64d13f5ff81eca", "is_secret": false, "is_verified": false, "line_number": 206, @@ -1639,7 +1639,7 @@ "verified_result": null }, { - "hashed_secret": "fbe1c0510709b44229c4b3bb4518ff1984061659", + "hashed_secret": "2a72ce4f8e3f20a220412b7438f461ddec080392", "is_secret": false, "is_verified": false, "line_number": 207, @@ -1647,7 +1647,7 @@ "verified_result": null }, { - "hashed_secret": "6caf16cacd5a67d7e49e298fe2d1343dc2ec9b05", + "hashed_secret": "26bad069b306312f02c1257af4697059143cb508", "is_secret": false, "is_verified": false, "line_number": 208, @@ -1655,7 +1655,7 @@ "verified_result": null }, { - "hashed_secret": "d222e52fe46c30567761bb3314975026273925ae", + "hashed_secret": "fbe1c0510709b44229c4b3bb4518ff1984061659", "is_secret": false, "is_verified": false, "line_number": 209, @@ -1663,7 +1663,7 @@ "verified_result": null }, { - "hashed_secret": "c0905c7e0f3e36b987986f6aa1ab1c3fb99ef64d", + "hashed_secret": "6caf16cacd5a67d7e49e298fe2d1343dc2ec9b05", "is_secret": false, "is_verified": false, "line_number": 210, @@ -1671,7 +1671,7 @@ "verified_result": null }, { - "hashed_secret": "7cbdb4af010574bd3ca871bea9abcc900f7f5403", + "hashed_secret": "d222e52fe46c30567761bb3314975026273925ae", "is_secret": false, "is_verified": false, "line_number": 211, @@ -1679,7 +1679,7 @@ "verified_result": null }, { - "hashed_secret": "83637b94118d85d329521a06f62dd71b467f972a", + "hashed_secret": "c0905c7e0f3e36b987986f6aa1ab1c3fb99ef64d", "is_secret": false, "is_verified": false, "line_number": 212, @@ -1687,7 +1687,15 @@ "verified_result": null }, { - "hashed_secret": "1e2e0a041eb98dfab4f16490aa956841c64d8de1", + "hashed_secret": "7cbdb4af010574bd3ca871bea9abcc900f7f5403", + "is_secret": false, + "is_verified": false, + "line_number": 213, + "type": "Base64 High Entropy String", + "verified_result": null + }, + { + "hashed_secret": "83637b94118d85d329521a06f62dd71b467f972a", "is_secret": false, "is_verified": false, "line_number": 214, @@ -1698,7 +1706,7 @@ "hashed_secret": "8fb9011d65ce2ba8aebef8cbd8ca7617e8647bb2", "is_secret": false, "is_verified": false, - "line_number": 215, + "line_number": 216, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1706,7 +1714,7 @@ "hashed_secret": "bd70ed828acba1b78f7d5b2d877e94c5b221b65c", "is_secret": false, "is_verified": false, - "line_number": 216, + "line_number": 217, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1714,7 +1722,7 @@ "hashed_secret": "454d0d358f83484c1429cc5720265d3294649220", "is_secret": false, "is_verified": false, - "line_number": 217, + "line_number": 218, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1722,7 +1730,7 @@ "hashed_secret": "086dd87894eba7fc3e7955c73ea0cfbec48fa90b", "is_secret": false, "is_verified": false, - "line_number": 218, + "line_number": 219, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1730,7 +1738,7 @@ "hashed_secret": "546c68910df62ae8ba7e7909efc4bc00910090b4", "is_secret": false, "is_verified": false, - "line_number": 219, + "line_number": 220, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1738,7 +1746,7 @@ "hashed_secret": "fd4a54ec92b75c87c5299f79ae223449d97bdb87", "is_secret": false, "is_verified": false, - "line_number": 220, + "line_number": 221, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1746,7 +1754,7 @@ "hashed_secret": "f7e55d2d356a3185be314236c216cf8eef4244e0", "is_secret": false, "is_verified": false, - "line_number": 223, + "line_number": 224, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1754,7 +1762,7 @@ "hashed_secret": "d81a72f29c2e15aa57c56c074e048271d74591e9", "is_secret": false, "is_verified": false, - "line_number": 224, + "line_number": 225, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1762,7 +1770,7 @@ "hashed_secret": "d1392236f73cc32c25f2a540071eb982d12f20b5", "is_secret": false, "is_verified": false, - "line_number": 225, + "line_number": 226, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1770,7 +1778,7 @@ "hashed_secret": "f4f00987306d36d020f926d4c8eb613571ce3d57", "is_secret": false, "is_verified": false, - "line_number": 226, + "line_number": 227, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1778,7 +1786,7 @@ "hashed_secret": "264589dec6405c522b5fb34c3c2d0255f996c871", "is_secret": false, "is_verified": false, - "line_number": 227, + "line_number": 228, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1786,7 +1794,7 @@ "hashed_secret": "a949272bdece7070a70cf5391981736878d75741", "is_secret": false, "is_verified": false, - "line_number": 228, + "line_number": 229, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1794,7 +1802,7 @@ "hashed_secret": "9120afb4fa7e6745209e5ea45ad5423ff2a120b9", "is_secret": false, "is_verified": false, - "line_number": 229, + "line_number": 230, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1802,7 +1810,7 @@ "hashed_secret": "84190fd88a41c983dc33a26601d5a73d0d673d22", "is_secret": false, "is_verified": false, - "line_number": 230, + "line_number": 231, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1810,7 +1818,7 @@ "hashed_secret": "9cac97c1142bb6af42f5feeacdd94a6a0760b782", "is_secret": false, "is_verified": false, - "line_number": 231, + "line_number": 232, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1818,7 +1826,7 @@ "hashed_secret": "cd01c35b1893ed158a2a915a82892def8254a58e", "is_secret": false, "is_verified": false, - "line_number": 232, + "line_number": 233, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1826,7 +1834,7 @@ "hashed_secret": "89da25d030bc0013344d959b27741462e27f2269", "is_secret": false, "is_verified": false, - "line_number": 233, + "line_number": 234, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1834,7 +1842,7 @@ "hashed_secret": "14c7cdc4716f4430ba32607dbf1dd01de7197e1e", "is_secret": false, "is_verified": false, - "line_number": 234, + "line_number": 235, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1842,7 +1850,7 @@ "hashed_secret": "d044ee3ba09c1b4acc7a39562a40b1842dd45c8d", "is_secret": false, "is_verified": false, - "line_number": 235, + "line_number": 236, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1850,7 +1858,7 @@ "hashed_secret": "fb374449623125db4b2abdafaf05c3148b75d399", "is_secret": false, "is_verified": false, - "line_number": 236, + "line_number": 237, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1858,7 +1866,7 @@ "hashed_secret": "c19bc2c1c71644f860a78b26be3a962d6ddf77cc", "is_secret": false, "is_verified": false, - "line_number": 237, + "line_number": 238, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1866,7 +1874,7 @@ "hashed_secret": "eb6420bafe41f2aa718dcdbfbd77b4a9f9718336", "is_secret": false, "is_verified": false, - "line_number": 238, + "line_number": 239, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1874,7 +1882,7 @@ "hashed_secret": "47eefa2f8763bb37dae5ad217a020d977e82b32a", "is_secret": false, "is_verified": false, - "line_number": 239, + "line_number": 240, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1882,7 +1890,7 @@ "hashed_secret": "6f4702b2d8a7ebc3cf5d612fdb029adf19ffff9e", "is_secret": false, "is_verified": false, - "line_number": 240, + "line_number": 241, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1890,7 +1898,7 @@ "hashed_secret": "063ce6ea9d4dc07383dba8487b180960412cdb9a", "is_secret": false, "is_verified": false, - "line_number": 241, + "line_number": 242, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1898,7 +1906,7 @@ "hashed_secret": "27fede682ac4460661d44d42699a88c0e6846bb2", "is_secret": false, "is_verified": false, - "line_number": 242, + "line_number": 243, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1906,7 +1914,7 @@ "hashed_secret": "3ee3b063e5a472a0a960cb6eb60230da17d31373", "is_secret": false, "is_verified": false, - "line_number": 243, + "line_number": 244, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1914,7 +1922,7 @@ "hashed_secret": "a071a26c44208cc7cee61107e2b5dd485f3cd71f", "is_secret": false, "is_verified": false, - "line_number": 244, + "line_number": 245, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1922,7 +1930,7 @@ "hashed_secret": "82b1331f41f4bfc1aba6e5bbf9f954d23db42abe", "is_secret": false, "is_verified": false, - "line_number": 245, + "line_number": 246, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1930,7 +1938,7 @@ "hashed_secret": "abc7829b50c477169ccb211b837bd158fa6ef894", "is_secret": false, "is_verified": false, - "line_number": 246, + "line_number": 247, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1938,7 +1946,7 @@ "hashed_secret": "42590f23314064055cefe69fa3df382cba90801f", "is_secret": false, "is_verified": false, - "line_number": 247, + "line_number": 248, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1946,7 +1954,7 @@ "hashed_secret": "6bf27e26a89feda31c1b5dbd6a0a7418e002866b", "is_secret": false, "is_verified": false, - "line_number": 248, + "line_number": 249, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1954,7 +1962,7 @@ "hashed_secret": "0baa8e1c1e8412b9bbbad8e31ae065131d4349d7", "is_secret": false, "is_verified": false, - "line_number": 249, + "line_number": 250, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1962,7 +1970,7 @@ "hashed_secret": "97fc22377b32c62fd04b2a0b20420f7feff43711", "is_secret": false, "is_verified": false, - "line_number": 250, + "line_number": 251, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1970,7 +1978,7 @@ "hashed_secret": "9168748d90b620a577421d9b118924163f583b08", "is_secret": false, "is_verified": false, - "line_number": 251, + "line_number": 252, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1978,7 +1986,7 @@ "hashed_secret": "1137df5cdb0510175e15d34479502e27021934b7", "is_secret": false, "is_verified": false, - "line_number": 252, + "line_number": 253, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1986,7 +1994,7 @@ "hashed_secret": "ec1296ff4dd0df2f03a56100988d54b35e2db705", "is_secret": false, "is_verified": false, - "line_number": 253, + "line_number": 254, "type": "Base64 High Entropy String", "verified_result": null }, @@ -1994,7 +2002,7 @@ "hashed_secret": "bc58a759e3896883b87bd3823e8075d76d7ca175", "is_secret": false, "is_verified": false, - "line_number": 254, + "line_number": 255, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2002,7 +2010,7 @@ "hashed_secret": "c8d97f283b2caba2f8b2dc7c30750485e1506863", "is_secret": false, "is_verified": false, - "line_number": 255, + "line_number": 256, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2010,7 +2018,7 @@ "hashed_secret": "d60a30d2629433beebd00d29390360d126e1271d", "is_secret": false, "is_verified": false, - "line_number": 256, + "line_number": 257, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2018,7 +2026,7 @@ "hashed_secret": "4689aaecb38952e1a7388a4c1df6879e44ba5d5a", "is_secret": false, "is_verified": false, - "line_number": 257, + "line_number": 258, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2026,7 +2034,7 @@ "hashed_secret": "7a27906a899797333696c30f25d225ac15171a89", "is_secret": false, "is_verified": false, - "line_number": 258, + "line_number": 259, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2034,7 +2042,7 @@ "hashed_secret": "e68e6ae5e4ebccd021956d621d10013adcccc525", "is_secret": false, "is_verified": false, - "line_number": 259, + "line_number": 260, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2042,7 +2050,7 @@ "hashed_secret": "29e88104dfdd1fbba80b0d73755421cc30bd4e7c", "is_secret": false, "is_verified": false, - "line_number": 260, + "line_number": 261, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2050,7 +2058,7 @@ "hashed_secret": "dcda6c4499e4ad3313d18fd9ba5be68a0fcd86b0", "is_secret": false, "is_verified": false, - "line_number": 261, + "line_number": 262, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2058,7 +2066,7 @@ "hashed_secret": "b0dc94a9900f347426e6024428976ca983a14b73", "is_secret": false, "is_verified": false, - "line_number": 262, + "line_number": 263, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2066,7 +2074,7 @@ "hashed_secret": "ab411e8a780a3e845650b4010faf092a37ab56e8", "is_secret": false, "is_verified": false, - "line_number": 263, + "line_number": 264, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2074,7 +2082,7 @@ "hashed_secret": "464f6bfc508780a51f3cf4711d7ace64104cdc78", "is_secret": false, "is_verified": false, - "line_number": 264, + "line_number": 265, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2082,7 +2090,7 @@ "hashed_secret": "59f05642e063ebca428538ffba41763c3e3e36a0", "is_secret": false, "is_verified": false, - "line_number": 265, + "line_number": 266, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2090,7 +2098,7 @@ "hashed_secret": "81c961bf2b49d6db27e2c4dc7988c4c04bf32ebd", "is_secret": false, "is_verified": false, - "line_number": 266, + "line_number": 267, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2098,7 +2106,7 @@ "hashed_secret": "12a8383870d4c38638597b668da1ec133b6f956b", "is_secret": false, "is_verified": false, - "line_number": 267, + "line_number": 268, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2106,7 +2114,7 @@ "hashed_secret": "3af669ef1b60f54a7b4154df942ef4eb0f734be5", "is_secret": false, "is_verified": false, - "line_number": 268, + "line_number": 269, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2114,7 +2122,7 @@ "hashed_secret": "b81a4542c73f8716d064824f2f45a4affae45675", "is_secret": false, "is_verified": false, - "line_number": 269, + "line_number": 270, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2122,7 +2130,7 @@ "hashed_secret": "c46ee79268c338452d023fa0cbeb0d274da4cdf1", "is_secret": false, "is_verified": false, - "line_number": 270, + "line_number": 271, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2130,7 +2138,7 @@ "hashed_secret": "acf43fb5dd61b5e0b8cda365f2b82e07c0ee30bd", "is_secret": false, "is_verified": false, - "line_number": 271, + "line_number": 272, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2138,7 +2146,7 @@ "hashed_secret": "c7650183a346ae042dc23cca37346be944b530e1", "is_secret": false, "is_verified": false, - "line_number": 272, + "line_number": 273, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2146,7 +2154,7 @@ "hashed_secret": "6a4a1948d9e9978e41ee2d466928b91e8ac5d54b", "is_secret": false, "is_verified": false, - "line_number": 273, + "line_number": 274, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2154,7 +2162,7 @@ "hashed_secret": "c382813ad978b45fb54312f408087e014b4374eb", "is_secret": false, "is_verified": false, - "line_number": 274, + "line_number": 275, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2162,7 +2170,7 @@ "hashed_secret": "2d8f283974c4178e4be4a31af70ce0137426e7bd", "is_secret": false, "is_verified": false, - "line_number": 275, + "line_number": 276, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2170,7 +2178,7 @@ "hashed_secret": "60f7e721ceec6b8d7794998b6bc65792e349729f", "is_secret": false, "is_verified": false, - "line_number": 276, + "line_number": 277, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2178,7 +2186,7 @@ "hashed_secret": "5e2e779446e06146e3f77cd09c4ac4a245cbddb5", "is_secret": false, "is_verified": false, - "line_number": 277, + "line_number": 278, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2186,7 +2194,7 @@ "hashed_secret": "28b224c190905489b2da61cb7c8e21e9155b79fc", "is_secret": false, "is_verified": false, - "line_number": 278, + "line_number": 279, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2194,7 +2202,7 @@ "hashed_secret": "fd0edc5c1aa04ad6f67ffb5865722ada1ea97487", "is_secret": false, "is_verified": false, - "line_number": 279, + "line_number": 280, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2202,7 +2210,7 @@ "hashed_secret": "5b6428246bc4d97ca22282ab024935a15c05b2df", "is_secret": false, "is_verified": false, - "line_number": 280, + "line_number": 281, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2210,7 +2218,7 @@ "hashed_secret": "322b141e3e2d5cf2ada012d3b7eafe66c81e91d0", "is_secret": false, "is_verified": false, - "line_number": 281, + "line_number": 282, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2218,7 +2226,7 @@ "hashed_secret": "f16e20544c05634663c76b999b6707da9f0ecbcc", "is_secret": false, "is_verified": false, - "line_number": 282, + "line_number": 283, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2226,7 +2234,7 @@ "hashed_secret": "5e235856f4e738c6927dab209f5b0d4bc70c6b4c", "is_secret": false, "is_verified": false, - "line_number": 283, + "line_number": 284, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2234,7 +2242,7 @@ "hashed_secret": "2d2a53ab302b2f26402df425b3827d5464b632d9", "is_secret": false, "is_verified": false, - "line_number": 284, + "line_number": 285, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2242,7 +2250,7 @@ "hashed_secret": "a95fa1c6858eb66a7f025dbdc3a600a444ea0554", "is_secret": false, "is_verified": false, - "line_number": 285, + "line_number": 286, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2250,7 +2258,7 @@ "hashed_secret": "f32a61f2e6f2ce8daf210f506c4a7112bc541f03", "is_secret": false, "is_verified": false, - "line_number": 286, + "line_number": 287, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2258,7 +2266,7 @@ "hashed_secret": "8d19507fdd8eb2c703e7fea913f2df6ca08b5491", "is_secret": false, "is_verified": false, - "line_number": 287, + "line_number": 288, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2266,7 +2274,7 @@ "hashed_secret": "3765eda8e7c792ffa4b4cfca6385122b32fcb9e0", "is_secret": false, "is_verified": false, - "line_number": 288, + "line_number": 289, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2274,7 +2282,7 @@ "hashed_secret": "ef51ce7068bc0290ac3d4eaf8b0270f628518c08", "is_secret": false, "is_verified": false, - "line_number": 289, + "line_number": 290, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2282,7 +2290,7 @@ "hashed_secret": "c279c639086a69d5210fb8521976b08306389f1f", "is_secret": false, "is_verified": false, - "line_number": 290, + "line_number": 291, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2290,7 +2298,7 @@ "hashed_secret": "b46ffd57039b50aecbe806f118fdc296d3f8e6dd", "is_secret": false, "is_verified": false, - "line_number": 293, + "line_number": 294, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2298,7 +2306,7 @@ "hashed_secret": "cd9bbc1b5fb19d011c1b1918671b9eca58eedf54", "is_secret": false, "is_verified": false, - "line_number": 294, + "line_number": 295, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2306,7 +2314,7 @@ "hashed_secret": "9c31e19dd7ce883c890385a0c3fafbc58fb88775", "is_secret": false, "is_verified": false, - "line_number": 295, + "line_number": 296, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2314,7 +2322,7 @@ "hashed_secret": "4e8e2a963cbc0880b71eb8663c65652ca1d570f5", "is_secret": false, "is_verified": false, - "line_number": 296, + "line_number": 297, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2322,23 +2330,23 @@ "hashed_secret": "49952be58b3267d1fa8d334025727d6a6181340d", "is_secret": false, "is_verified": false, - "line_number": 297, + "line_number": 298, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "20ef0023cb6f2b1af79f9901844385ae7dd6ca3b", + "hashed_secret": "09c6049090b3e012271b94e22825f048b7fb04a3", "is_secret": false, "is_verified": false, - "line_number": 298, + "line_number": 299, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "12465385d5ad0513c9af84ee42ba6835f025c504", + "hashed_secret": "b29c5e0104f417d687b7451bfeb7e4aa7ac0168f", "is_secret": false, "is_verified": false, - "line_number": 299, + "line_number": 300, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2346,7 +2354,7 @@ "hashed_secret": "04c40c7bfe223bbf5b2e48c9dcc22d5a74b169d6", "is_secret": false, "is_verified": false, - "line_number": 300, + "line_number": 301, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2354,7 +2362,7 @@ "hashed_secret": "5c49b63e16030a311057d110a25dde44d700c570", "is_secret": false, "is_verified": false, - "line_number": 301, + "line_number": 302, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2362,7 +2370,7 @@ "hashed_secret": "2203f64b4998ec3a170b46296343e469860b7843", "is_secret": false, "is_verified": false, - "line_number": 302, + "line_number": 303, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2370,7 +2378,7 @@ "hashed_secret": "4320d90e8d5f8f1615d048673c609da995b18cdd", "is_secret": false, "is_verified": false, - "line_number": 303, + "line_number": 304, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2378,7 +2386,7 @@ "hashed_secret": "965c4942ff21f72ecde147caf4a000d957145a08", "is_secret": false, "is_verified": false, - "line_number": 304, + "line_number": 305, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2386,7 +2394,7 @@ "hashed_secret": "874ba4fe31fbf47c01f285c6830bff6fec062664", "is_secret": false, "is_verified": false, - "line_number": 305, + "line_number": 306, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2394,7 +2402,7 @@ "hashed_secret": "d13d66953d89e3de1652edacc7306cc4996eb886", "is_secret": false, "is_verified": false, - "line_number": 306, + "line_number": 307, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2402,7 +2410,7 @@ "hashed_secret": "c03adb347a7a5a2423b4ea136960dee7c861c253", "is_secret": false, "is_verified": false, - "line_number": 307, + "line_number": 308, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2410,7 +2418,7 @@ "hashed_secret": "a6b3cf26db264a01eb944ccc9da18f174c9bc279", "is_secret": false, "is_verified": false, - "line_number": 308, + "line_number": 309, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2418,7 +2426,7 @@ "hashed_secret": "1d87b982b20d953da24965d852c64dfa115bf2ee", "is_secret": false, "is_verified": false, - "line_number": 309, + "line_number": 310, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2426,7 +2434,7 @@ "hashed_secret": "f9e8dbe6b2a4c13a2fdb7cfadeacabe2a09ffbc7", "is_secret": false, "is_verified": false, - "line_number": 310, + "line_number": 311, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2434,7 +2442,7 @@ "hashed_secret": "7130885cf768635c0d7f3176b1ab05146a2f0e80", "is_secret": false, "is_verified": false, - "line_number": 311, + "line_number": 312, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2442,7 +2450,7 @@ "hashed_secret": "48f5483d28e37176f42a2559d2bc839d199295d0", "is_secret": false, "is_verified": false, - "line_number": 312, + "line_number": 313, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2450,7 +2458,7 @@ "hashed_secret": "86163936f3445e8c9f55eedb11dc67297380844c", "is_secret": false, "is_verified": false, - "line_number": 313, + "line_number": 314, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2458,7 +2466,7 @@ "hashed_secret": "9d46bdb270f0184527fce41ad98661db2ff956bc", "is_secret": false, "is_verified": false, - "line_number": 314, + "line_number": 315, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2466,15 +2474,15 @@ "hashed_secret": "0d301b35345a6c42132e597b72cc9234fc661266", "is_secret": false, "is_verified": false, - "line_number": 315, + "line_number": 316, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "0b7e946501d92e4acb4c587798384ddc26d58eaf", + "hashed_secret": "44ee7287f6849a60882eba6645bf54cf3d43210f", "is_secret": false, "is_verified": false, - "line_number": 316, + "line_number": 317, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2482,7 +2490,7 @@ "hashed_secret": "6e57371b16efa41de0895b6c7324a81efa90d3eb", "is_secret": false, "is_verified": false, - "line_number": 317, + "line_number": 318, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2490,7 +2498,7 @@ "hashed_secret": "3fe9f8af27ee3698ec7a7fc58d2f61a59623cfae", "is_secret": false, "is_verified": false, - "line_number": 318, + "line_number": 319, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2498,7 +2506,7 @@ "hashed_secret": "6980032b1109ab13b4773f607bc4debeac2a7874", "is_secret": false, "is_verified": false, - "line_number": 319, + "line_number": 320, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2506,7 +2514,7 @@ "hashed_secret": "32c9eb7965ccbfca1be9300960c6458e23d3e8e1", "is_secret": false, "is_verified": false, - "line_number": 320, + "line_number": 321, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2514,15 +2522,15 @@ "hashed_secret": "3b6f298e3346fffbf557253a71aae15d9fd25a87", "is_secret": false, "is_verified": false, - "line_number": 321, + "line_number": 322, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "4d0d450585fcc91088e8e8dac338c620b1b54edd", + "hashed_secret": "0d5ae5744de2460177c7c52e39c464385082d14b", "is_secret": false, "is_verified": false, - "line_number": 322, + "line_number": 323, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2530,7 +2538,7 @@ "hashed_secret": "e55b37c2fe28ae90910e52bfaff188a824cc30d6", "is_secret": false, "is_verified": false, - "line_number": 323, + "line_number": 324, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2538,7 +2546,7 @@ "hashed_secret": "515a2560623cbbf84bc89fdd4a469cd4ce2cfcf1", "is_secret": false, "is_verified": false, - "line_number": 324, + "line_number": 325, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2546,7 +2554,7 @@ "hashed_secret": "3f591d158e312390a628074540f15301bae4c00f", "is_secret": false, "is_verified": false, - "line_number": 325, + "line_number": 326, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2554,7 +2562,7 @@ "hashed_secret": "35885c91cb482dbc984f2eb030190c4abf844f3a", "is_secret": false, "is_verified": false, - "line_number": 326, + "line_number": 327, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2562,7 +2570,7 @@ "hashed_secret": "b5a1262c1a823254ff6d0ead585933414bdb159f", "is_secret": false, "is_verified": false, - "line_number": 327, + "line_number": 328, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2570,7 +2578,7 @@ "hashed_secret": "102d5d17773da052c95025c24c834f711d2a62dc", "is_secret": false, "is_verified": false, - "line_number": 328, + "line_number": 329, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2578,7 +2586,7 @@ "hashed_secret": "79783e6a902799332c1eeeee2643d8c2e86883d2", "is_secret": false, "is_verified": false, - "line_number": 329, + "line_number": 330, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2586,7 +2594,7 @@ "hashed_secret": "1d91ead7cbac3f18f3f96c1d3b911b8f3d08ebc2", "is_secret": false, "is_verified": false, - "line_number": 330, + "line_number": 331, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2594,7 +2602,7 @@ "hashed_secret": "78e81c30f003d8d59d730058787ec21ab8a8b36d", "is_secret": false, "is_verified": false, - "line_number": 331, + "line_number": 332, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2602,7 +2610,7 @@ "hashed_secret": "84d6dc5283e62e5c60bc6daedae9cb5bb7b3d9fd", "is_secret": false, "is_verified": false, - "line_number": 332, + "line_number": 333, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2610,7 +2618,23 @@ "hashed_secret": "b6e3177c16cc1d1b61d5c9fcf1a1207ed552629d", "is_secret": false, "is_verified": false, - "line_number": 333, + "line_number": 334, + "type": "Base64 High Entropy String", + "verified_result": null + }, + { + "hashed_secret": "911488cd1c0180212c58594175b350fa7869225e", + "is_secret": false, + "is_verified": false, + "line_number": 335, + "type": "Base64 High Entropy String", + "verified_result": null + }, + { + "hashed_secret": "00a03d95afefbf1cdbfe87e821e8fa9351b53dc1", + "is_secret": false, + "is_verified": false, + "line_number": 336, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2618,7 +2642,7 @@ "hashed_secret": "0918088df56ab0144ab80845726914b6f5762aa9", "is_secret": false, "is_verified": false, - "line_number": 334, + "line_number": 337, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2626,7 +2650,7 @@ "hashed_secret": "d52ce8433120334dcd4f67da1f656f764550aecc", "is_secret": false, "is_verified": false, - "line_number": 335, + "line_number": 338, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2634,7 +2658,7 @@ "hashed_secret": "6d1620ca591257020f2bea1872e4e572f6eba61e", "is_secret": false, "is_verified": false, - "line_number": 337, + "line_number": 340, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2642,7 +2666,7 @@ "hashed_secret": "8032ce5257b54dcf78aec51f68d1fc8d063d1a57", "is_secret": false, "is_verified": false, - "line_number": 338, + "line_number": 341, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2650,7 +2674,7 @@ "hashed_secret": "d30dde261fb7a38add647e5d1d90e5936b171a90", "is_secret": false, "is_verified": false, - "line_number": 339, + "line_number": 342, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2658,7 +2682,7 @@ "hashed_secret": "5ecb5c20bae4cf82563877c20e20d24e4aecac8e", "is_secret": false, "is_verified": false, - "line_number": 340, + "line_number": 343, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2666,7 +2690,7 @@ "hashed_secret": "421697c13f4978adc2b1afa931b8b3784caa8b25", "is_secret": false, "is_verified": false, - "line_number": 341, + "line_number": 344, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2674,7 +2698,7 @@ "hashed_secret": "b093f4590e333cf2ccfcdac58fc38e0b28831451", "is_secret": false, "is_verified": false, - "line_number": 342, + "line_number": 345, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2682,7 +2706,7 @@ "hashed_secret": "d1eef7557e4ecd3dada67d81f268a3b9777c416c", "is_secret": false, "is_verified": false, - "line_number": 343, + "line_number": 346, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2690,7 +2714,7 @@ "hashed_secret": "6fe59961768c910cc941544f5b40e2201c86796a", "is_secret": false, "is_verified": false, - "line_number": 344, + "line_number": 347, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2698,23 +2722,23 @@ "hashed_secret": "914c6ca4cdc75bc4d6f27d140ee5e0b61fadefb8", "is_secret": false, "is_verified": false, - "line_number": 345, + "line_number": 348, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "c862ae64e32feafc2a517888b7bf2dc1ec4d50ee", + "hashed_secret": "e15e6e6980b296c8a315c9f871702d92c909c81d", "is_secret": false, "is_verified": false, - "line_number": 346, + "line_number": 349, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "fc0843339b93ec09f228300aa99fefc129c9a3a1", + "hashed_secret": "7d9aae9a72e6fb875af6cda51fa52a24cc73a542", "is_secret": false, "is_verified": false, - "line_number": 347, + "line_number": 350, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2722,7 +2746,7 @@ "hashed_secret": "e8ed1fae62cd103ca138411dec0d7604d582d64d", "is_secret": false, "is_verified": false, - "line_number": 348, + "line_number": 351, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2730,7 +2754,7 @@ "hashed_secret": "536e6f341f5e391e619cf1b006b30c41fa8ad102", "is_secret": false, "is_verified": false, - "line_number": 349, + "line_number": 352, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2738,7 +2762,7 @@ "hashed_secret": "102741620fd59cdd46a9645e8f77622395ad8ddb", "is_secret": false, "is_verified": false, - "line_number": 350, + "line_number": 353, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2746,7 +2770,7 @@ "hashed_secret": "b8e6e28dbba3043037093ebc3e70d91d6476f01e", "is_secret": false, "is_verified": false, - "line_number": 351, + "line_number": 354, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2754,7 +2778,7 @@ "hashed_secret": "9dd5115ebcff5ee73ef485c2b87cd7f4bbc47450", "is_secret": false, "is_verified": false, - "line_number": 356, + "line_number": 359, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2762,23 +2786,23 @@ "hashed_secret": "cfbc88a9df49a825964ad39a83c2615a2d2f0a32", "is_secret": false, "is_verified": false, - "line_number": 357, + "line_number": 360, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "b4694aa7b837b17a1a6ba1877f8c0d4417ae8c2f", + "hashed_secret": "630d1fc306d6b1112b7931e83ed8f70a783be5cd", "is_secret": false, "is_verified": false, - "line_number": 358, + "line_number": 361, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "819af21c471996840b6eea7ffb2c87e3d9702c26", + "hashed_secret": "106f3aa146580404df505fda1ac6c3de2f831f0f", "is_secret": false, "is_verified": false, - "line_number": 359, + "line_number": 362, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2786,7 +2810,7 @@ "hashed_secret": "bf5b914454bf2d472be60acb49a2e646cb1139a7", "is_secret": false, "is_verified": false, - "line_number": 360, + "line_number": 363, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2794,7 +2818,7 @@ "hashed_secret": "3bbee69c41c25a30b8b19a37c6b77570b259574e", "is_secret": false, "is_verified": false, - "line_number": 362, + "line_number": 365, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2802,7 +2826,7 @@ "hashed_secret": "c27f2a8fe63481e54eb7528fa4d7bd5372f3099e", "is_secret": false, "is_verified": false, - "line_number": 363, + "line_number": 366, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2810,7 +2834,7 @@ "hashed_secret": "e2c6d9dcad0b82cb04dca2a2166e3a7c4598574c", "is_secret": false, "is_verified": false, - "line_number": 364, + "line_number": 367, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2818,7 +2842,7 @@ "hashed_secret": "0a8ed0038b47fe6328f04a9ddf48588c6e985799", "is_secret": false, "is_verified": false, - "line_number": 366, + "line_number": 369, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2826,7 +2850,7 @@ "hashed_secret": "4663612bdeb372f193f25d9c58dc670adaf64806", "is_secret": false, "is_verified": false, - "line_number": 367, + "line_number": 370, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2834,7 +2858,7 @@ "hashed_secret": "1d18dd0a306fd661aa0e49ea3ebb7dbf206498ec", "is_secret": false, "is_verified": false, - "line_number": 368, + "line_number": 371, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2842,7 +2866,7 @@ "hashed_secret": "134fd31ad93fddca139c1d6ffe732f42428859b5", "is_secret": false, "is_verified": false, - "line_number": 370, + "line_number": 373, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2850,7 +2874,7 @@ "hashed_secret": "47c228c3d923a6ba779e94e68296dc1baf1c0743", "is_secret": false, "is_verified": false, - "line_number": 372, + "line_number": 375, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2858,7 +2882,7 @@ "hashed_secret": "2601499f4ea1ac01520b17740b0a6954d3f23c1d", "is_secret": false, "is_verified": false, - "line_number": 373, + "line_number": 376, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2866,7 +2890,7 @@ "hashed_secret": "ccf734dd0f57b110a24fdc9b89cf562a2fac9da9", "is_secret": false, "is_verified": false, - "line_number": 374, + "line_number": 377, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2874,7 +2898,7 @@ "hashed_secret": "a04af72d466703458c2d9d585ae27395ab96036b", "is_secret": false, "is_verified": false, - "line_number": 375, + "line_number": 378, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2882,7 +2906,7 @@ "hashed_secret": "0e95c18d4569b5b0df2dba1732bd7e6ad58f0ed2", "is_secret": false, "is_verified": false, - "line_number": 376, + "line_number": 379, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2890,7 +2914,7 @@ "hashed_secret": "dd9320e77f0bce033fd1ec23a9bee091900d4c16", "is_secret": false, "is_verified": false, - "line_number": 377, + "line_number": 380, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2898,7 +2922,7 @@ "hashed_secret": "fc785be080b1e082bd0f556797bc52672b304e95", "is_secret": false, "is_verified": false, - "line_number": 379, + "line_number": 382, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2906,7 +2930,7 @@ "hashed_secret": "2c6cc662503de0a9b8a8e631c80aa482b44423eb", "is_secret": false, "is_verified": false, - "line_number": 380, + "line_number": 383, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2914,7 +2938,7 @@ "hashed_secret": "ba43bd1a8381cadbbe48cfdcf3d1143584442087", "is_secret": false, "is_verified": false, - "line_number": 381, + "line_number": 384, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2922,7 +2946,7 @@ "hashed_secret": "40b4a3e3ab9efc91fce5bbba10e6e9902f387663", "is_secret": false, "is_verified": false, - "line_number": 382, + "line_number": 385, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2930,7 +2954,7 @@ "hashed_secret": "a4c08ab324aa76322d58edb1e6357ce8caa0ad50", "is_secret": false, "is_verified": false, - "line_number": 383, + "line_number": 386, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2938,7 +2962,7 @@ "hashed_secret": "8c92eaa4daa00de780df6fd0047e3a988726aa06", "is_secret": false, "is_verified": false, - "line_number": 384, + "line_number": 387, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2946,7 +2970,7 @@ "hashed_secret": "c712036e573966702205d057c27e4fcaea9cbbee", "is_secret": false, "is_verified": false, - "line_number": 385, + "line_number": 388, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2954,23 +2978,23 @@ "hashed_secret": "2a08f687fb52b9933eab238393b96a7844f2e76f", "is_secret": false, "is_verified": false, - "line_number": 386, + "line_number": 389, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "20ca938d4acc09c524f0d619b7018bf501ce2277", + "hashed_secret": "f4619a9878396df5d2e0f67a7ef969b575089927", "is_secret": false, "is_verified": false, - "line_number": 387, + "line_number": 390, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "ad7f5a53db8d1abf2912cab36440910141f3eb77", + "hashed_secret": "cbf4b37c1f4a825c3c59c38bd915e50cdaf35c5c", "is_secret": false, "is_verified": false, - "line_number": 388, + "line_number": 391, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2978,7 +3002,7 @@ "hashed_secret": "af58e693e1b2d980ed923a3a65bacd88033d1c9d", "is_secret": false, "is_verified": false, - "line_number": 396, + "line_number": 399, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2986,7 +3010,7 @@ "hashed_secret": "11b2a7485f211d58a526dc1b782d275e064f71de", "is_secret": false, "is_verified": false, - "line_number": 397, + "line_number": 400, "type": "Base64 High Entropy String", "verified_result": null }, @@ -2994,7 +3018,7 @@ "hashed_secret": "443a6a670fae9143d0fd62154910657b143eb2bf", "is_secret": false, "is_verified": false, - "line_number": 398, + "line_number": 401, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3002,7 +3026,7 @@ "hashed_secret": "8dd67cad18c011b72da14d9d71881f7657c8302b", "is_secret": false, "is_verified": false, - "line_number": 399, + "line_number": 402, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3010,7 +3034,7 @@ "hashed_secret": "77363acd3535f313c12c30a901910f89ef3aab5c", "is_secret": false, "is_verified": false, - "line_number": 400, + "line_number": 403, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3018,7 +3042,7 @@ "hashed_secret": "0ce1bbf44cfc3e9ac535b22293940f5ace10a031", "is_secret": false, "is_verified": false, - "line_number": 402, + "line_number": 405, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3026,7 +3050,7 @@ "hashed_secret": "ebce33ed93c15294766862efead26a0fe7c1b480", "is_secret": false, "is_verified": false, - "line_number": 415, + "line_number": 418, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3034,7 +3058,7 @@ "hashed_secret": "01cc9bc51bf3fa82306f40389795abe791c0ea06", "is_secret": false, "is_verified": false, - "line_number": 435, + "line_number": 438, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3042,23 +3066,23 @@ "hashed_secret": "78bdedbd3ccf14e2a9610ae78279dbb8b87a75b4", "is_secret": false, "is_verified": false, - "line_number": 436, + "line_number": 439, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "5777467d87baeb7662926b0c683ff9fcfdcbce3e", + "hashed_secret": "4afa3c1fe6d91b8f295bfe48b0938528831495f2", "is_secret": false, "is_verified": false, - "line_number": 437, + "line_number": 440, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "aec466cfa06bbcb4b43b1f126024e5b670965c9c", + "hashed_secret": "bf3142726a74cca84731c2705d90fbb47eb16bb9", "is_secret": false, "is_verified": false, - "line_number": 438, + "line_number": 441, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3066,7 +3090,7 @@ "hashed_secret": "ae265ceaecee518874ebf3646c433ff6128db110", "is_secret": false, "is_verified": false, - "line_number": 439, + "line_number": 442, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3074,7 +3098,7 @@ "hashed_secret": "8270b5c71f7f7e6bd094c9cb1ab9555c29e8f841", "is_secret": false, "is_verified": false, - "line_number": 441, + "line_number": 444, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3082,7 +3106,7 @@ "hashed_secret": "424adb52e49edf25c0e38dc5be96d87fbfa03ada", "is_secret": false, "is_verified": false, - "line_number": 442, + "line_number": 445, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3090,7 +3114,7 @@ "hashed_secret": "22599c81184a1fe987eea9339031aa49840d39ce", "is_secret": false, "is_verified": false, - "line_number": 443, + "line_number": 446, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3098,7 +3122,7 @@ "hashed_secret": "4f48c29ccd09f0c5549d832b64050c2c038f276e", "is_secret": false, "is_verified": false, - "line_number": 444, + "line_number": 447, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3106,7 +3130,7 @@ "hashed_secret": "fda7084b2e220d7b4fdb7d0df523fe0c0e1a75d1", "is_secret": false, "is_verified": false, - "line_number": 445, + "line_number": 448, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3114,7 +3138,7 @@ "hashed_secret": "4bccab1ef8f2b970b84cd8cdfc693bb733f22c8e", "is_secret": false, "is_verified": false, - "line_number": 446, + "line_number": 449, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3122,7 +3146,7 @@ "hashed_secret": "45650903d66d914df58bb9125971a9bfc2d94c0a", "is_secret": false, "is_verified": false, - "line_number": 447, + "line_number": 450, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3130,7 +3154,7 @@ "hashed_secret": "09c4f3db846fd7a15e799609cd2a1ff43b2e9ff9", "is_secret": false, "is_verified": false, - "line_number": 448, + "line_number": 451, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3138,7 +3162,7 @@ "hashed_secret": "cfced552d567414874946e2cf7dc2188c9b150cd", "is_secret": false, "is_verified": false, - "line_number": 449, + "line_number": 452, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3146,7 +3170,7 @@ "hashed_secret": "a4116ff176aa519aad51d71d2847bda49d663ae9", "is_secret": false, "is_verified": false, - "line_number": 450, + "line_number": 453, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3154,7 +3178,7 @@ "hashed_secret": "4282dd4f15ad56bb16227f4997d124c7d9e15234", "is_secret": false, "is_verified": false, - "line_number": 451, + "line_number": 454, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3162,23 +3186,23 @@ "hashed_secret": "44dbff5eeaff9e8b00c9a4f8fca406cd5be7ba07", "is_secret": false, "is_verified": false, - "line_number": 452, + "line_number": 455, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "83288637dc62a3e008304e000273beeedfe385a1", + "hashed_secret": "1b396a9f2774acc127076312efa72791873bedda", "is_secret": false, "is_verified": false, - "line_number": 453, + "line_number": 456, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "e55730a6f82ebbdedc93e70c66cf0190cf76af88", + "hashed_secret": "fe9b600e4274d5ed2adfecb791cf595ef81338be", "is_secret": false, "is_verified": false, - "line_number": 454, + "line_number": 457, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3186,7 +3210,7 @@ "hashed_secret": "6c76abe4bb26384b9ff06c9ef66352708b9368f1", "is_secret": false, "is_verified": false, - "line_number": 455, + "line_number": 458, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3194,7 +3218,7 @@ "hashed_secret": "9bc0584f6e2873e5cd92ea0f89c3203ca918dcba", "is_secret": false, "is_verified": false, - "line_number": 456, + "line_number": 459, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3202,7 +3226,7 @@ "hashed_secret": "75ab864f84af321656ed52959dd5be6b7d1ecb09", "is_secret": false, "is_verified": false, - "line_number": 459, + "line_number": 462, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3210,7 +3234,7 @@ "hashed_secret": "24faaef0b063439371412110029778332d5c5cd3", "is_secret": false, "is_verified": false, - "line_number": 460, + "line_number": 463, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3218,7 +3242,7 @@ "hashed_secret": "f892aaac62a5a3e57e2c8a7b32e50a9909fd863b", "is_secret": false, "is_verified": false, - "line_number": 464, + "line_number": 467, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3226,7 +3250,7 @@ "hashed_secret": "6096cceb2ebde8f7884455e805267c3be8aba4bc", "is_secret": false, "is_verified": false, - "line_number": 466, + "line_number": 469, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3234,7 +3258,7 @@ "hashed_secret": "3cfa2be461cc9dc74f5d1c15d4dd39ec520bb149", "is_secret": false, "is_verified": false, - "line_number": 469, + "line_number": 472, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3242,23 +3266,23 @@ "hashed_secret": "e81e8bf6369a7231803cee4a1c13348804e951ac", "is_secret": false, "is_verified": false, - "line_number": 470, + "line_number": 473, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "6f3367f2aab6bcac39935f5e0facb8ea5dc48c32", + "hashed_secret": "91d39b6f617e2339855a19db0b12fe8115a4671f", "is_secret": false, "is_verified": false, - "line_number": 471, + "line_number": 474, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "ec01e4ff94c94a87876478edd5f8625bcf6aa047", + "hashed_secret": "34e0016317134fe0a5a7e18e325861e35977d4d5", "is_secret": false, "is_verified": false, - "line_number": 472, + "line_number": 475, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3266,7 +3290,7 @@ "hashed_secret": "4ef548550ab47a3cf6306d34075d8065ed95d0f1", "is_secret": false, "is_verified": false, - "line_number": 473, + "line_number": 476, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3274,7 +3298,7 @@ "hashed_secret": "c4ea1426c2ce5b6c3a83b6fd4cdd1a02af27d6ba", "is_secret": false, "is_verified": false, - "line_number": 474, + "line_number": 477, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3282,7 +3306,7 @@ "hashed_secret": "1acf1f8876ac6001592457efc5266bee6c77fcdd", "is_secret": false, "is_verified": false, - "line_number": 475, + "line_number": 478, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3290,7 +3314,7 @@ "hashed_secret": "9e7a1e88182dda9e6644073a0aa78c0527a50b83", "is_secret": false, "is_verified": false, - "line_number": 476, + "line_number": 479, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3298,7 +3322,7 @@ "hashed_secret": "ac588af1e8b7e0b14a9a5bf405d5b4a1ef46820d", "is_secret": false, "is_verified": false, - "line_number": 477, + "line_number": 480, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3306,7 +3330,7 @@ "hashed_secret": "ec0344a0f1a84df30c425b18b61c4c25dbb1a8e1", "is_secret": false, "is_verified": false, - "line_number": 478, + "line_number": 481, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3314,7 +3338,7 @@ "hashed_secret": "29b57638ec8367ce2134952de13f35434506817d", "is_secret": false, "is_verified": false, - "line_number": 479, + "line_number": 482, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3322,7 +3346,7 @@ "hashed_secret": "ff8e17b34e1ff029821532a8558fb07147f9fa4a", "is_secret": false, "is_verified": false, - "line_number": 480, + "line_number": 483, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3330,7 +3354,7 @@ "hashed_secret": "6b4647e77eecb1299359b8b08fff2801a3c88bcd", "is_secret": false, "is_verified": false, - "line_number": 481, + "line_number": 484, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3338,7 +3362,7 @@ "hashed_secret": "fd1c4f346056e460369f79977b64400fc88f10e9", "is_secret": false, "is_verified": false, - "line_number": 482, + "line_number": 485, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3346,7 +3370,7 @@ "hashed_secret": "e6e1f5489d44fca749ba2e55227e1956306166b1", "is_secret": false, "is_verified": false, - "line_number": 484, + "line_number": 487, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3354,7 +3378,7 @@ "hashed_secret": "b7bf2757c51c12f7b2be907ebc9ee592fd45afeb", "is_secret": false, "is_verified": false, - "line_number": 485, + "line_number": 488, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3362,7 +3386,7 @@ "hashed_secret": "d13bff771eb6ac4cc3400b816836fce4b3b71dfb", "is_secret": false, "is_verified": false, - "line_number": 486, + "line_number": 489, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3370,23 +3394,23 @@ "hashed_secret": "efd9b4b37b44f08415031193e3637101fb9f57af", "is_secret": false, "is_verified": false, - "line_number": 487, + "line_number": 490, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "2bc63d1922248a4bf9093fd10b0ac53ba662f9fc", + "hashed_secret": "b8ee81d1b1ebe66aa887b26766d0b5079724af3d", "is_secret": false, "is_verified": false, - "line_number": 488, + "line_number": 491, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "6baddaf70e4aa70316e983680fc6ae412c39c092", + "hashed_secret": "afa5a249c81f302614860b574214ad9955fea1ea", "is_secret": false, "is_verified": false, - "line_number": 489, + "line_number": 492, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3394,7 +3418,7 @@ "hashed_secret": "c5f1dc3654012c916a5925ee4c98d546f43596ab", "is_secret": false, "is_verified": false, - "line_number": 493, + "line_number": 496, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3402,7 +3426,7 @@ "hashed_secret": "53841d991955491da9bf5c9b6b659d74add5277c", "is_secret": false, "is_verified": false, - "line_number": 494, + "line_number": 497, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3410,7 +3434,7 @@ "hashed_secret": "0b0f5ca4ca6da578241307c461254eaf2c5863fe", "is_secret": false, "is_verified": false, - "line_number": 495, + "line_number": 498, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3418,7 +3442,7 @@ "hashed_secret": "ef80978fcb29a68d459ae6feaba1a35c7d18fdca", "is_secret": false, "is_verified": false, - "line_number": 496, + "line_number": 499, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3426,7 +3450,7 @@ "hashed_secret": "84f9c8c0dffcdf2193586bdf93d8c36b56f3edde", "is_secret": false, "is_verified": false, - "line_number": 497, + "line_number": 500, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3434,7 +3458,7 @@ "hashed_secret": "24db62a12b13e70a93cabffd5d725c72008933db", "is_secret": false, "is_verified": false, - "line_number": 498, + "line_number": 501, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3442,7 +3466,7 @@ "hashed_secret": "988c74be8d68c3a29a1b1c07604c0f0359377ff7", "is_secret": false, "is_verified": false, - "line_number": 499, + "line_number": 502, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3450,7 +3474,7 @@ "hashed_secret": "772d847c9ab2d9c7fbaac99bffda8158cbe74671", "is_secret": false, "is_verified": false, - "line_number": 500, + "line_number": 503, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3458,7 +3482,7 @@ "hashed_secret": "8138b726cc67fcd1e6d7d7e3b8c30cd90f4e0f09", "is_secret": false, "is_verified": false, - "line_number": 501, + "line_number": 504, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3466,15 +3490,15 @@ "hashed_secret": "9421105ee184aacd1a44bfd532ce2679cf81d59f", "is_secret": false, "is_verified": false, - "line_number": 502, + "line_number": 505, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "4202997f5be696860461b6e758ecb68043eed0c6", + "hashed_secret": "4a55af994a8cf30a2be8318071b652a29552fec3", "is_secret": false, "is_verified": false, - "line_number": 503, + "line_number": 506, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3482,7 +3506,7 @@ "hashed_secret": "c4d970d00d6ed977c3e8dbec72113c76e464f377", "is_secret": false, "is_verified": false, - "line_number": 504, + "line_number": 507, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3490,7 +3514,7 @@ "hashed_secret": "aa945027601e7b92be504f177761e51cd2fc9293", "is_secret": false, "is_verified": false, - "line_number": 508, + "line_number": 511, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3498,7 +3522,7 @@ "hashed_secret": "a5153026164a8b6aec7ea9f54ab4742295bc0854", "is_secret": false, "is_verified": false, - "line_number": 509, + "line_number": 512, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3506,7 +3530,7 @@ "hashed_secret": "f78d2a86ab2f64ebcc591442fa0a1be2143ecb46", "is_secret": false, "is_verified": false, - "line_number": 510, + "line_number": 513, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3514,7 +3538,7 @@ "hashed_secret": "f7e6de6194084eb8fa6006279a81dfd995b1156b", "is_secret": false, "is_verified": false, - "line_number": 511, + "line_number": 514, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3522,7 +3546,7 @@ "hashed_secret": "d0d6704ea0b16b1439e5cb45c5ba7dd58cf2d0c3", "is_secret": false, "is_verified": false, - "line_number": 512, + "line_number": 515, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3530,7 +3554,7 @@ "hashed_secret": "184af87d5e9b66b1b1f34bb4ab67d252a0f0ad28", "is_secret": false, "is_verified": false, - "line_number": 513, + "line_number": 516, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3538,7 +3562,7 @@ "hashed_secret": "7a2955f49234ec1ff105b1e0ec6f8ae8b855d6c3", "is_secret": false, "is_verified": false, - "line_number": 514, + "line_number": 517, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3546,7 +3570,7 @@ "hashed_secret": "5c1af4298c8b37207a67a6e784f62ac4a5a2b777", "is_secret": false, "is_verified": false, - "line_number": 515, + "line_number": 518, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3554,7 +3578,7 @@ "hashed_secret": "4b8036e1a6ea6742c55bf657adb5164dd05a60fd", "is_secret": false, "is_verified": false, - "line_number": 516, + "line_number": 519, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3562,7 +3586,7 @@ "hashed_secret": "d3de140235564e8a8dc2190a046f3f39ac72cb69", "is_secret": false, "is_verified": false, - "line_number": 517, + "line_number": 520, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3570,7 +3594,7 @@ "hashed_secret": "0bfcf978179e9b9371d132d9fd4065909f1fa3e6", "is_secret": false, "is_verified": false, - "line_number": 520, + "line_number": 523, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3578,7 +3602,7 @@ "hashed_secret": "bd17ef42773c6f3a4f5b41c58163cf7d2572edaa", "is_secret": false, "is_verified": false, - "line_number": 521, + "line_number": 524, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3586,7 +3610,7 @@ "hashed_secret": "29612fe80a4df9271509961ab41b9d3d4318313b", "is_secret": false, "is_verified": false, - "line_number": 522, + "line_number": 525, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3594,7 +3618,7 @@ "hashed_secret": "26003ea45ee54ae0c27ff9e6156c3a353bfbf0cb", "is_secret": false, "is_verified": false, - "line_number": 525, + "line_number": 528, "type": "Base64 High Entropy String", "verified_result": null }, @@ -3602,23 +3626,23 @@ "hashed_secret": "d858adb1976228c458c39e2564548b3e2466d8d5", "is_secret": false, "is_verified": false, - "line_number": 526, + "line_number": 529, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "aa682c47b5a59940bf7e4c738a64e1e81d9ea8b3", + "hashed_secret": "cb0b802e292da83d31d114c50955b5bba61f0466", "is_secret": false, "is_verified": false, - "line_number": 527, + "line_number": 530, "type": "Base64 High Entropy String", "verified_result": null }, { - "hashed_secret": "37286bc0dec8b494a18245da98770006d3c3e8dc", + "hashed_secret": "505ff268aacc47fca9d31a977b7480e93e10728a", "is_secret": false, "is_verified": false, - "line_number": 528, + "line_number": 531, "type": "Base64 High Entropy String", "verified_result": null } @@ -3628,7 +3652,7 @@ "hashed_secret": "c7c6508b19455e3e8040e60e9833fbede92e5d8e", "is_secret": false, "is_verified": false, - "line_number": 36, + "line_number": 49, "type": "Secret Keyword", "verified_result": null }, @@ -3636,7 +3660,7 @@ "hashed_secret": "fa501f2ceec739604d621b521446b88d41a7f76b", "is_secret": false, "is_verified": false, - "line_number": 65, + "line_number": 80, "type": "Secret Keyword", "verified_result": null } diff --git a/README.md b/README.md index ca98e828..b65f4b37 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ This repository contains deployable architecture solutions that help in deployin - Additionally tunes the instances according to SAP's best practices, which are fully ready for hosting SAP applications. 1. [IBM catalog PowerVS S/4HANA or BW/4HANA variation](https://github.com/terraform-ibm-modules/terraform-ibm-powervs-sap/tree/main/solutions/ibm-catalog/sap-s4hana-bw4hana) + - Creates a VPC and Power Virtual Server workspace, interconnects them, and configures OS network management services (SQUID proxy, NTP, NFS, and DNS) using Ansible Galaxy collection roles from the ibm.power_linux_sap collection. - Creates and configures **one HANA instance and one NetWeaver instance** with **RHEL** OS distribution. Creates a private subnet for SAP communication for the entire landscape. - Optionally configures OS network management services (NTP, NFS, and DNS services) using Ansible Galaxy Collection from [IBM](https://galaxy.ansible.com/ui/repo/published/ibm/power_linux_sap/): `power_linux_sap` - Tunes the instances according to SAP's best practices. diff --git a/ibm_catalog.json b/ibm_catalog.json index 07e2f993..77e221b1 100755 --- a/ibm_catalog.json +++ b/ibm_catalog.json @@ -36,13 +36,25 @@ "single_system" ], "short_description": "Deploy SAP systems on Power Virtual Server with VPC landing zone", - "long_description": "This deployable architecture is designed to assist you in deploying SAP ERP software landscapes into IBM Cloud on the IBM Power Virtual Server infrastructure. This is the second step in the deployment process for creating a full environment. Before starting this step, you should first deploy 'Power Virtual Server with VPC landing zone'. Once this is completed, you are prepared to start this step.\n\nSAP on Power Virtual Server creates and prepares Power Virtual Server instances for SAP HANA and SAP NetWeaver workloads. After deployment completes, you may (depending on the framework you chose) begin installing SAP on the configured instances or login to your newly created SAP instances directly.", + "long_description": "This deployable architecture is designed to assist you in deploying SAP ERP software landscapes into IBM Cloud on the IBM Power Virtual Server infrastructure.\n\nSAP on Power Virtual Server creates and prepares Power Virtual Server instances for SAP HANA and SAP NetWeaver workloads. After deployment completes, you may (depending on the framework you chose) begin installing SAP on the configured instances or login to your newly created SAP instances directly.", "offering_docs_url": "https://cloud.ibm.com/docs/sap-powervs", "offering_icon_url": "data:image/svg+xml;base64,PHN2ZyBpZD0iU0FQb25Qb3dlciIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDMyIDMyIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9IjB3cG82d2txd2EiIHgxPSItMTg1NS4yMDgiIHkxPSItMjUwMi41NjMiIHgyPSItMTg1NS4yMDgiIHkyPSItMjUyMi4xNzkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wNiAwIDAgLS40OTEgMTk3My42NzYgLTEyMjcuMjkzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIvPjxzdG9wIG9mZnNldD0iLjgiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJwODB2MGMwMnZiIiB4MT0iMzI4LjUwMiIgeTE9Ii02NzY1LjY0NyIgeDI9IjMyOC41MDIiIHkyPSItNjc4NS4yNjMiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wNiAwIDAgLjUxNSAtMzM5Ljk2NyAzNTEzLjI1KSIgeGxpbms6aHJlZj0iIzB3cG82d2txd2EiLz48bGluZWFyR3JhZGllbnQgaWQ9ImRrMDJ3NXQweWMiIHgxPSItOTUzLjI2NiIgeTE9Ii0yODI4LjY1OSIgeDI9Ii05NTMuMjY2IiB5Mj0iLTI4MzguNTMzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDYgMCAwIC0uNjY5IDEwMzcuMjE4IC0xODc2LjQzOSkiIHhsaW5rOmhyZWY9IiMwd3BvNndrcXdhIi8+PGxpbmVhckdyYWRpZW50IGlkPSJvbjF6NG9xNmVkIiB4MT0iLTE5MjMuMjUiIHkxPSItMjYyMC4yOSIgeDI9Ii0xOTIzLjI1IiB5Mj0iLTI2MjcuODg1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEuMDYgMCAwIC42NjkgMjA0OC4wOTEgMTc4Mi4zNjQpIiB4bGluazpocmVmPSIjMHdwbzZ3a3F3YSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iZGw0OXc5YXdnZSIgeDE9Ii0xOTE1LjgwMiIgeTE9Ii0zMTkxLjI5NSIgeDI9Ii0xOTE1LjgwMiIgeTI9Ii0zMTk4Ljg4OSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjA2IDAgMCAuNjY5IDIwNDMuNDggMjE0MS4xMjgpIiB4bGluazpocmVmPSIjMHdwbzZ3a3F3YSIvPjxsaW5lYXJHcmFkaWVudCBpZD0iemI2Y3VlbnRsZyIgeDE9IjAiIHkxPSIzMiIgeDI9IjMyIiB5Mj0iMCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjEiIHN0b3AtY29sb3I9IiMwOGJkYmEiLz48c3RvcCBvZmZzZXQ9Ii45IiBzdG9wLWNvbG9yPSIjMGY2MmZlIi8+PC9saW5lYXJHcmFkaWVudD48bWFzayBpZD0iOG5zZ3FxYnBjZiIgeD0iMCIgeT0iMCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIj48cGF0aCBkPSJNMTUuOTgyIDMwYy03LjcyIDAtMTQtNi4yOC0xNC0xNHM2LjI4MS0xNCAxNC0xNCAxNCA2LjI4IDE0IDE0LTYuMjggMTQtMTQgMTR6bTAtMjZjLTYuNjE3IDAtMTIgNS4zODMtMTIgMTJzNS4zODMgMTIgMTIgMTIgMTItNS4zODMgMTItMTItNS4zODMtMTItMTItMTJ6IiBzdHlsZT0iZmlsbDojZmZmIi8+PHBhdGggZD0iTTMwLjY5MSAzMC43MDhIMTEuNzI5bDMtOC43MDggMTAuNDY1LjAxMSA1LjU3Ny0uMDIxLS4wOCA4LjcxOHpNNi45ODIgMjBsLTYgNS40OTRWNi44MDdsNiA1LjAxNVYyMHpNMTYuMDAzIDFoMTQuOTk5djEzLjAzMkgxNi4wMDN6Ii8+PHBhdGggdHJhbnNmb3JtPSJyb3RhdGUoLTEzNSA3Ljk0MyA2Ljc4NykiIHN0eWxlPSJmaWxsOnVybCgjMHdwbzZ3a3F3YSkiIGQ9Ik00Ljc2NCAxLjk3aDYuMzU3djkuNjM1SDQuNzY0eiIvPjxwYXRoIHRyYW5zZm9ybT0icm90YXRlKDEzNSA4LjEwNiAyNS4zNDQpIiBzdHlsZT0iZmlsbDp1cmwoI3A4MHYwYzAydmIpIiBkPSJNNC45MjggMjAuMjk1aDYuMzU3djEwLjA5OEg0LjkyOHoiLz48cGF0aCB0cmFuc2Zvcm09InJvdGF0ZSgxODAgMjcuMTYxIDE4Ljg2MykiIHN0eWxlPSJmaWxsOnVybCgjZGswMnc1dDB5YykiIGQ9Ik0yMy45ODIgMTUuNTYxaDYuMzU3djYuNjA0aC02LjM1N3oiLz48cGF0aCB0cmFuc2Zvcm09InJvdGF0ZSgtNzAuNzkgMTAuMjYyIDI3LjE5NSkiIHN0eWxlPSJmaWxsOnVybCgjb24xejRvcTZlZCkiIGQ9Ik03LjA4NCAyNC42NTVoNi4zNTd2NS4wOEg3LjA4NHoiLz48cGF0aCBkPSJNOC45ODIgMjAuOThoLTZjLTEuMTAzIDAtMi0uODk3LTItMnYtNmMwLTEuMTAzLjg5Ny0yIDItMmg2YzEuMTAzIDAgMiAuODk3IDIgMnY2YzAgMS4xMDMtLjg5NyAyLTIgMnptLTYtOHY2aDYuMDAxdi02SDIuOTgyek0yOS4wMDIgMzFoLTEzYy0xLjEwMyAwLTItLjg5Ny0yLTJ2LTRjMC0xLjEwMy44OTctMiAyLTJoMTNjMS4xMDMgMCAyIC44OTcgMiAydjRjMCAxLjEwMy0uODk3IDItMiAyem0tMTMtNnY0aDEzLjAwMXYtNEgxNi4wMDJ6IiBzdHlsZT0iZmlsbDojZmZmIi8+PGNpcmNsZSBjeD0iMTkuMDAyIiBjeT0iMjciIHI9IjEiIHN0eWxlPSJmaWxsOiNmZmYiLz48cGF0aCB0cmFuc2Zvcm09InJvdGF0ZSgtOTAgMTMuNTQzIDQuMDMyKSIgc3R5bGU9ImZpbGw6dXJsKCNkbDQ5dzlhd2dlKSIgZD0iTTEwLjM2NCAxLjQ5Mmg2LjM1N3Y1LjA4aC02LjM1N3oiLz48L21hc2s+PC9kZWZzPjxnIHN0eWxlPSJtYXNrOnVybCgjOG5zZ3FxYnBjZikiPjxwYXRoIHN0eWxlPSJmaWxsOnVybCgjemI2Y3VlbnRsZykiIGQ9Ik0wIDBoMzJ2MzJIMHoiLz48L2c+PHBhdGggZD0iTTI1LjQ2MiAxMkgxOWExIDEgMCAwIDEtMS0xVjQuMDM1YTEgMSAwIDAgMSAuOTk3LTFsMTItLjAzNUgzMWExIDEgMCAwIDEgLjc4NCAxLjYyMWwtNS41MzggN2EuOTk4Ljk5OCAwIDAgMS0uNzg0LjM3OXpNMjAgMTBoNC45NzhsMy45NTEtNC45OTRMMjAgNS4wMzJWMTB6IiBzdHlsZT0iZmlsbDojMDAxZDZjIi8+PC9zdmc+", "features": [ { "description": "Power Virtual Server instances are created for you, containing prepared instances for SAP HANA and SAP NetWeaver.", "title": "Create Power Virtual Server instances" + }, + { + "description": "VPC services (landing zone)", + "title": "Edge VPC services are created using VSI on VPC landing zone presets." + }, + { + "description": "Power Virtual Server workspaces", + "title": "One PowerVS workspace is created by initial deployment. Additional PowerVS workspaces may be deployed as extension." + }, + { + "description": "Network management services", + "title": "Bastion host, internet proxy based on SQUID, NTP forwarder, DNS forwarder & NFS as a service." } ], "flavors": [ @@ -52,8 +64,13 @@ "install_type": "fullstack", "working_directory": "solutions/ibm-catalog/sap-ready-to-go", "compliance": { - "authority": "", - "profiles": [] + "authority": "scc-v3", + "profiles": [ + { + "profile_name": "IBM Cloud Framework for Financial Services", + "profile_version": "1.7.0" + } + ] }, "configuration": [ { @@ -74,6 +91,10 @@ "displayname": "Dallas 12 (dal12)", "value": "dal12" }, + { + "displayname": "Dallas 14 (dal14)", + "value": "dal14" + }, { "displayname": "Frankfurt 1 (eu-de-1)", "value": "eu-de-1" @@ -94,6 +115,10 @@ "displayname": "Madrid 02 (mad02)", "value": "mad02" }, + { + "displayname": "Madrid 04 (mad04)", + "value": "mad04" + }, { "displayname": "Osaka 21 (osa21)", "value": "osa21" @@ -197,6 +222,15 @@ "key": "powervs_sap_network_cidr", "required": true }, + { + "key": "vpc_subnet_cidrs", + "required": true, + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, { "key": "ssh_public_key", "type": "multiline_secure_value", @@ -231,36 +265,35 @@ } }, { - "key": "client_to_site_vpn", - "required": true + "key": "ansible_vault_password", + "type": "multiline_secure_value", + "required": true, + "default_value": "__NULL__", + "display_name": "ansible_vault_password", + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "multiline_secure_value" + } }, { "key": "sap_domain", "required": true }, { - "key": "enable_monitoring", + "key": "client_to_site_vpn", "required": true }, { - "key": "enable_scc_wp", + "key": "enable_monitoring", "required": true }, { - "key": "nfs_server_config", + "key": "enable_scc_wp", "required": true }, { - "key": "ansible_vault_password", - "type": "multiline_secure_value", - "required": true, - "default_value": "__NULL__", - "display_name": "ansible_vault_password", - "custom_config": { - "grouping": "deployment", - "original_grouping": "deployment", - "type": "multiline_secure_value" - } + "key": "nfs_server_config" }, { "key": "powervs_hana_instance_custom_storage_config", @@ -348,9 +381,6 @@ "type": "code_editor" } }, - { - "key": "existing_monitoring_instance_crn" - }, { "key": "sm_service_plan" }, @@ -404,14 +434,6 @@ } ], "custom_config": {} - }, - { - "key": "vpc_subnet_cidrs", - "custom_config": { - "grouping": "deployment", - "original_grouping": "deployment", - "type": "code_editor" - } } ], "iam_permissions": [ @@ -436,10 +458,6 @@ ], "architecture": { "features": [ - { - "title": "Power Virtual Server with VPC landing zone Standard Variation", - "description": "Pre Requisite" - }, { "title": "SAP Solution", "description": "Not installed" @@ -451,16 +469,579 @@ { "title": "SAP Monitoring Dashboard", "description": "Not Installed" + }, + { + "title": "Number of Intel Virtual Server Instance", + "description": "2" + }, + { + "title": "Number of VPCs", + "description": "1" + }, + { + "title": "Number of Power Virtual Server Workspace", + "description": "1" + }, + { + "title": "Increases security with Key Management", + "description": "Yes" + }, + { + "title": "Internet proxy on VPC", + "description": "Proxy service to reach public internet from PowerVS Workspace" + }, + { + "title": "Additional management configurations on VPC", + "description": "NFS as service, NTP forwarder, and DNS forwarder reachable from PowerVS Workspace" + }, + { + "title": "Client to site VPN with new or existing Secrets Manager instance", + "description": "Optional" + }, + { + "title": "SCC Workload Protection instance", + "description": "Optional" + }, + { + "title": "Monitoring Instance and Monitoring Intel VSI Host", + "description": "Optional" + }, + { + "title": "Bring your own image to PowerVS", + "description": "Optional" } ], "diagrams": [ { "diagram": { "caption": "Full SAP environment provisioned on a 'Power Virtual Server with VPC landing zone'", - "url": "https://raw.githubusercontent.com/terraform-ibm-modules/terraform-ibm-powervs-sap/refs/tags/v4.2.2/reference-architectures/sap-ready-to-go/deploy-arch-ibm-pvs-sap-ready-to-go.svg", + "url": "https://raw.githubusercontent.com/terraform-ibm-modules/terraform-ibm-powervs-sap/refs/tags/v5.0.0/reference-architectures/sap-ready-to-go/deploy-arch-ibm-pvs-sap-ready-to-go.svg", + "type": "image/svg+xml" + }, + "description": "'SAP ready PowerVS' variation of 'Power Virtual Server for SAP HANA' creates a basic and expandable SAP system landscape builds on the foundation of the 'Power Virtual Server with VPC landing zone'. PowerVS instances for SAP HANA and SAP NetWeaver are deployed and preconfigured for SAP installation.\n\nServices such as DNS, NTP and NFS running in VPC and provided by 'Power Virtual Server with VPC landing zone' are leveraged.\n\nThe resulting SAP landscape leverages the services such as Activity Tracker, Cloud Object Storage, Key Management and the network connectivity configuration." + } + ] + }, + "terraform_version": "1.10.5" + }, + { + "label": "SAP S/4HANA or BW/4HANA", + "name": "sap-s4hana-bw4hana", + "install_type": "fullstack", + "working_directory": "solutions/ibm-catalog/sap-s4hana-bw4hana", + "compliance": { + "authority": "scc-v3", + "profiles": [ + { + "profile_name": "IBM Cloud Framework for Financial Services", + "profile_version": "1.7.0" + } + ] + }, + "configuration": [ + { + "key": "powervs_zone", + "type": "string", + "default_value": "", + "required": true, + "options": [ + { + "displayname": "Dallas (dallas)", + "value": "us-south" + }, + { + "displayname": "Dallas 10 (dal10)", + "value": "dal10" + }, + { + "displayname": "Dallas 12 (dal12)", + "value": "dal12" + }, + { + "displayname": "Dallas 14 (dal14)", + "value": "dal14" + }, + { + "displayname": "Frankfurt 1 (eu-de-1)", + "value": "eu-de-1" + }, + { + "displayname": "Frankfurt 2 (eu-de-2)", + "value": "eu-de-2" + }, + { + "displayname": "London 04 (lon04)", + "value": "lon04" + }, + { + "displayname": "London 06 (lon06)", + "value": "lon06" + }, + { + "displayname": "Madrid 02 (mad02)", + "value": "mad02" + }, + { + "displayname": "Madrid 04 (mad04)", + "value": "mad04" + }, + { + "displayname": "Osaka 21 (osa21)", + "value": "osa21" + }, + { + "displayname": "Sao Paulo 01 (sao01)", + "value": "sao01" + }, + { + "displayname": "Sao Paulo 04 (sao04)", + "value": "sao04" + }, + { + "displayname": "Sydney 04 (syd04)", + "value": "syd04" + }, + { + "displayname": "Sydney 05 (syd05)", + "value": "syd05" + }, + { + "displayname": "Tokyo 04 (tok04)", + "value": "tok04" + }, + { + "displayname": "Toronto 01 (tor01)", + "value": "tor01" + }, + { + "displayname": "Washington DC (us-east)", + "value": "us-east" + }, + { + "displayname": "Washington DC 06 (wdc06)", + "value": "wdc06" + }, + { + "displayname": "Washington DC 07 (wdc07)", + "value": "wdc07" + } + ], + "custom_config": {} + }, + { + "key": "powervs_resource_group_name", + "required": true, + "default_value": "", + "custom_config": { + "config_constraints": { + "identifier": "rg_name" + }, + "grouping": "deployment", + "original_grouping": "deployment", + "type": "resource_group" + } + }, + { + "key": "prefix", + "required": true, + "default_value": "" + }, + { + "key": "powervs_hana_instance_sap_profile_id", + "required": true + }, + { + "key": "powervs_netweaver_cpu_number", + "required": true + }, + { + "key": "powervs_netweaver_memory_size", + "required": true + }, + { + "key": "external_access_ip", + "default_value": "__NULL__", + "required": true + }, + { + "key": "powervs_sap_network_cidr", + "required": true + }, + { + "key": "vpc_subnet_cidrs", + "required": true, + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, + { + "key": "ssh_public_key", + "type": "multiline_secure_value", + "display_name": "ssh_public_key", + "required": true, + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "multiline_secure_value" + } + }, + { + "key": "ssh_private_key", + "type": "multiline_secure_value", + "display_name": "ssh_private_key", + "required": true, + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "multiline_secure_value" + } + }, + { + "key": "ibmcloud_api_key", + "type": "multiline_secure_value", + "display_name": "ibmcloud_api_key", + "required": true, + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "multiline_secure_value" + } + }, + { + "key": "ansible_vault_password", + "type": "multiline_secure_value", + "required": true, + "default_value": "__NULL__", + "display_name": "ansible_vault_password", + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "multiline_secure_value" + } + }, + { + "key": "sap_solution", + "type": "string", + "default_value": "", + "required": true, + "options": [ + { + "displayname": "S/4HANA 2023", + "value": "s4hana-2023" + }, + { + "displayname": "S/4HANA 2022", + "value": "s4hana-2022" + }, + { + "displayname": "S/4HANA 2021", + "value": "s4hana-2021" + }, + { + "displayname": "S/4HANA 2020", + "value": "s4hana-2020" + }, + { + "displayname": "BW/4HANA 2021", + "value": "bw4hana-2021" + } + ], + "custom_config": {} + }, + { + "key": "ibmcloud_cos_service_credentials", + "type": "multiline_secure_value", + "display_name": "ibmcloud_cos_service_credentials", + "required": true, + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "multiline_secure_value" + } + }, + { + "key": "ibmcloud_cos_configuration", + "required": true, + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, + { + "key": "sap_hana_master_password", + "type": "multiline_secure_value", + "display_name": "sap_hana_master_password", + "required": true, + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "multiline_secure_value" + } + }, + { + "key": "sap_hana_vars", + "required": true, + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, + { + "key": "sap_swpm_master_password", + "type": "multiline_secure_value", + "display_name": "sap_swpm_master_password", + "required": true, + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "multiline_secure_value" + } + }, + { + "key": "sap_solution_vars", + "required": true, + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, + { + "key": "sap_monitoring_vars", + "required": true, + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, + { + "key": "sap_domain", + "required": true + }, + { + "key": "client_to_site_vpn", + "required": true + }, + { + "key": "enable_monitoring", + "required": true + }, + { + "key": "enable_scc_wp", + "required": true + }, + { + "key": "nfs_server_config" + }, + { + "key": "powervs_hana_instance_custom_storage_config", + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, + { + "key": "powervs_hana_instance_additional_storage_config", + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, + { + "key": "powervs_netweaver_instance_storage_config", + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, + { + "key": "vpc_intel_images", + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, + { + "key": "powervs_default_sap_images", + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, + { + "key": "powervs_os_registration_username" + }, + { + "key": "powervs_os_registration_password", + "type": "multiline_secure_value", + "display_name": "powervs_os_registration_password", + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "multiline_secure_value" + } + }, + { + "key": "powervs_custom_images", + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, + { + "key": "powervs_custom_image_cos_configuration", + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, + { + "key": "powervs_custom_image_cos_service_credentials", + "type": "multiline_secure_value", + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "multiline_secure_value" + } + }, + { + "key": "tags", + "custom_config": { + "grouping": "deployment", + "original_grouping": "deployment", + "type": "code_editor" + } + }, + { + "key": "sm_service_plan" + }, + { + "key": "existing_sm_instance_guid" + }, + { + "key": "existing_sm_instance_region", + "type": "string", + "default_value": "__NULL__", + "options": [ + { + "displayname": "Null", + "value": "__NULL__" + }, + { + "displayname": "au-syd", + "value": "au-syd" + }, + { + "displayname": "br-sao", + "value": "br-sao" + }, + { + "displayname": "ca-tor", + "value": "ca-tor" + }, + { + "displayname": "eu-de", + "value": "eu-de" + }, + { + "displayname": "eu-gb", + "value": "eu-gb" + }, + { + "displayname": "jp-osa", + "value": "jp-osa" + }, + { + "displayname": "jp-tok", + "value": "jp-tok" + }, + { + "displayname": "us-east", + "value": "us-east" + }, + { + "displayname": "us-south", + "value": "us-south" + } + ], + "custom_config": {} + } + ], + "architecture": { + "features": [ + { + "title": "SAP Solution", + "description": "Installed: SAP S/4HANA or BW/4HANA" + }, + { + "title": "PowerVS instances", + "description": "SAP HANA Instance: 1\n\nSAP NetWeaver Instances: 1" + }, + { + "title": "SAP Monitoring Dashboard", + "description": "Installed and enabled" + }, + { + "title": "Number of Intel Virtual Server Instance", + "description": "2" + }, + { + "title": "Number of VPCs", + "description": "1" + }, + { + "title": "Number of Power Virtual Server Workspace", + "description": "1" + }, + { + "title": "Increases security with Key Management", + "description": "Yes" + }, + { + "title": "Internet proxy on VPC", + "description": "Proxy service to reach public internet from PowerVS Workspace" + }, + { + "title": "Additional management configurations on VPC", + "description": "NFS as service, NTP forwarder, and DNS forwarder reachable from PowerVS Workspace" + }, + { + "title": "Client to site VPN with new or existing Secrets Manager instance", + "description": "Optional" + }, + { + "title": "SCC Workload Protection instance", + "description": "Optional" + }, + { + "title": "Monitoring Instance and Monitoring Intel VSI Host", + "description": "Optional" + }, + { + "title": "Bring your own image to PowerVS", + "description": "Optional" + } + ], + "diagrams": [ + { + "diagram": { + "caption": "Full SAP S/4HANA or BW/4HANA environment provisioned on a 'Power Virtual Server with VPC landing zone'", + "url": "https://raw.githubusercontent.com/terraform-ibm-modules/terraform-ibm-powervs-sap/refs/tags/v5.0.0/reference-architectures/sap-s4hana-bw4hana/deploy-arch-ibm-pvs-sap-s4hana-bw4hana.svg", "type": "image/svg+xml" }, - "description": "'SAP ready PowerVS' variation of 'Power Virtual Server for SAP HANA' creates a basic and expandable SAP system landscape builds on the foundation of the 'Power Virtual Server with VPC landing zone'. PowerVS instances for SAP HANA and SAP NetWeaver are deployed and preconfigured for SAP installation.\n\nServices such as DNS, NTP and NFS running in VPC and provided by 'Power Virtual Server with VPC landing zone' are leveraged.\n\nThe resulting SAP landscape leverages the services such as Activity Tracker, Cloud Object Storage, Key Management and the network connectivity configuration provided by 'Power Virtual Server with VPC landing zone'." + "description": "'SAP S/4HANA or BW/4HANA' variation of 'Power Virtual Server for SAP HANA' creates a basic and expandable SAP system landscape builds on the foundation of 'Power Virtual Server with VPC landing zone'. PowerVS instances for SAP HANA and SAP NetWeaver are deployed and preconfigured for SAP installation. S/4HANA or BW/4HANA solution is installed based on selected version. \n\nServices such as DNS, NTP and NFS runs in VPC.\n\nThe resulting SAP landscape leverages the services such as Activity Tracker, Cloud Object Storage, Key Management and the network connectivity configuration. Additionally if a Monitoring Instance is enabled, this solution will then install and enable SAP monitoring Dashboard if binaries are provided." } ] }, diff --git a/reference-architectures/sap-ready-to-go/deploy-arch-ibm-pvs-sap-ready-to-go.md b/reference-architectures/sap-ready-to-go/deploy-arch-ibm-pvs-sap-ready-to-go.md index fc6400b5..ba3b185b 100644 --- a/reference-architectures/sap-ready-to-go/deploy-arch-ibm-pvs-sap-ready-to-go.md +++ b/reference-architectures/sap-ready-to-go/deploy-arch-ibm-pvs-sap-ready-to-go.md @@ -2,13 +2,14 @@ copyright: years: 2024, 2025 -lastupdated: "2025-09-05" +lastupdated: "2025-10-25" keywords: subcollection: deployable-reference-architectures authors: - name: Arnold Beilmann - name: Suraj Bharadwaj - name: Ludwig Mueller + - name: Trilochan Pandey production: true deployment-url: https://cloud.ibm.com/catalog/architecture/deploy-arch-ibm-pvs-sap-9aa6135e-75d5-467e-9f4a-ac2a21c069b8-global docs: https://cloud.ibm.com/docs/sap-powervs @@ -17,17 +18,11 @@ use-case: ITServiceManagement industry: Technology compliance: SAPCertified content-type: reference-architecture -version: v4.2.2 +version: v5.0.0 related_links: - title: 'SAP in IBM Cloud documentation' url: 'https://cloud.ibm.com/docs/sap' description: 'SAP in IBM Cloud documentation.' - - title: 'Reference architecture for "Power Virtual Server with VPC landing zone" as full stack deployment' - url: 'https://cloud.ibm.com/docs/deployable-reference-architectures?topic=deployable-reference-architectures-deploy-arch-ibm-pvs-inf-full-stack' - description: 'Reference architecture for "Power Virtual Server with VPC landing zone" as full stack deployment' - - title: 'Reference architecture for "Power Virtual Server with VPC landing zone" as extension of existing deployment' - url: 'https://cloud.ibm.com/docs/deployable-reference-architectures?topic=deployable-reference-architectures-deploy-arch-ibm-pvs-inf-extension' - description: 'Reference architecture for "Power Virtual Server with VPC landing zone" as extension of existing deployment' --- @@ -39,15 +34,15 @@ related_links: {: toc-industry="Technology"} {: toc-use-case="ITServiceManagement"} {: toc-compliance="SAPCertified"} -{: toc-version="v4.2.2"} +{: toc-version="v5.0.0"} The SAP-ready PowerVS variation of the Power Virtual Server for SAP HANA creates a basic and expandable SAP system landscape. The variation builds on the foundation of the VPC landing zone and Power Virtual Server with VPC landing zone. PowerVS instances for SAP HANA and SAP NetWeaver are deployed and pre-configured for SAP installation. -Services such as DNS, NTP, and NFS running in VPC and provided by Power Virtual Server with VPC landing zone are leveraged. +Services such as DNS, NTP, and NFS runs in VPC. The transit gateway provides the network bridge between the IBM Power infrastructure and the IBM Cloud® VPC and public internet. -The resulting SAP landscape leverages services such as Activity Tracker, Cloud Object Storage, Key Management from the VPC landing zone and the network connectivity configuration provided by Power Virtual Server with VPC landing zone. Additionally, it will also setup SCC Workload Protection if the feature was enabled during the landing zone deployment. +The resulting SAP landscape leverages services such as Activity Tracker, Cloud Object Storage, Key Management from the VPC landing zone and the network connectivity configuration. Additionally, it will also setup SCC Workload Protection if the feature was enabled during the landing zone deployment. ## Architecture diagram {: #sap-ready-to-go-architecture-diagram} diff --git a/reference-architectures/sap-s4hana-bw4hana/deploy-arch-ibm-pvs-sap-s4hana-bw4hana.md b/reference-architectures/sap-s4hana-bw4hana/deploy-arch-ibm-pvs-sap-s4hana-bw4hana.md index 20a39ee7..fe283692 100644 --- a/reference-architectures/sap-s4hana-bw4hana/deploy-arch-ibm-pvs-sap-s4hana-bw4hana.md +++ b/reference-architectures/sap-s4hana-bw4hana/deploy-arch-ibm-pvs-sap-s4hana-bw4hana.md @@ -2,13 +2,14 @@ copyright: years: 2024, 2025 -lastupdated: "2025-09-05" +lastupdated: "2025-10-25" keywords: subcollection: deployable-reference-architectures authors: - name: Arnold Beilmann - name: Suraj Bharadwaj - name: Ludwig Mueller + - name: Trilochan Pandey production: true deployment-url: https://cloud.ibm.com/catalog/architecture/deploy-arch-ibm-pvs-sap-9aa6135e-75d5-467e-9f4a-ac2a21c069b8-global docs: https://cloud.ibm.com/docs/sap-powervs @@ -17,17 +18,11 @@ use-case: ITServiceManagement industry: Technology compliance: SAPCertified content-type: reference-architecture -version: v4.2.2 +version: v5.0.0 related_links: - title: 'SAP in IBM Cloud documentation' url: 'https://cloud.ibm.com/docs/sap' description: 'SAP in IBM Cloud documentation.' - - title: 'Reference architecture for "Power Virtual Server with VPC landing zone" as full stack deployment' - url: 'https://cloud.ibm.com/docs/deployable-reference-architectures?topic=deployable-reference-architectures-deploy-arch-ibm-pvs-inf-full-stack' - description: 'Reference architecture for "Power Virtual Server with VPC landing zone" as full stack deployment' - - title: 'Reference architecture for "Power Virtual Server with VPC landing zone" as extension of existing deployment' - url: 'https://cloud.ibm.com/docs/deployable-reference-architectures?topic=deployable-reference-architectures-deploy-arch-ibm-pvs-inf-extension' - description: 'Reference architecture for "Power Virtual Server with VPC landing zone" as extension of existing deployment' --- @@ -39,15 +34,15 @@ related_links: {: toc-industry="Technology"} {: toc-use-case="ITServiceManagement"} {: toc-compliance="SAPCertified"} -{: toc-version="v4.2.2"} +{: toc-version="v5.0.0"} 'SAP S/4HANA or BW/4HANA' variation of 'Power Virtual Server for SAP HANA' creates a basic and expandable SAP system landscape built on the foundation of 'Power Virtual Server with VPC landing zone'. PowerVS instances for SAP HANA and SAP NetWeaver are deployed and pre-configured for SAP installation. The S/4HANA or BW/4HANA solution is installed based on the selected version. -Services such as DNS, NTP, and NFS running in VPC and provided by Power Virtual Server with VPC landing zone are leveraged. +Services such as DNS, NTP, and NFS runs in VPC. Transit gateway connections provide the network bridge between the IBM Power infrastructure and the IBM Cloud® VPC and public internet. -The resulting SAP landscape leverages the services such as Activity Tracker, Cloud Object Storage, Key Management from the VPC landing zone and the network connectivity configuration provided by Power Virtual Server with VPC landing zone. Additionally, it will also setup Monitoring and SCC Workload Protection if the features were enabled during the landing zone deployment. +The resulting SAP landscape leverages the services such as Activity Tracker, Cloud Object Storage, Key Management from the VPC landing zone and the network connectivity configuration. Additionally, it will also setup Monitoring and SCC Workload Protection if the features were enabled during the landing zone deployment. ## Architecture diagram {: #sap-s4hana-bw4hana-architecture-diagram} diff --git a/reference-architectures/sap-s4hana-bw4hana/deploy-arch-ibm-pvs-sap-s4hana-bw4hana.svg b/reference-architectures/sap-s4hana-bw4hana/deploy-arch-ibm-pvs-sap-s4hana-bw4hana.svg index b5f53839..ab06cb2f 100644 --- a/reference-architectures/sap-s4hana-bw4hana/deploy-arch-ibm-pvs-sap-s4hana-bw4hana.svg +++ b/reference-architectures/sap-s4hana-bw4hana/deploy-arch-ibm-pvs-sap-s4hana-bw4hana.svg @@ -1,4 +1,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/solutions/ibm-catalog/sap-ready-to-go/README.md b/solutions/ibm-catalog/sap-ready-to-go/README.md index 4509ef83..9cdbfd19 100644 --- a/solutions/ibm-catalog/sap-ready-to-go/README.md +++ b/solutions/ibm-catalog/sap-ready-to-go/README.md @@ -29,7 +29,7 @@ - Creates a new private subnet for SAP communication for the entire landscape. - Attaches the PowerVS workspace to transit gateway. - Creates an SSH key. - - Optionally imports up to three custom images from Cloud Object Storage. + - Optionally imports up to two custom images from Cloud Object Storage. - Creates and configures one PowerVS instance for SAP HANA based on best practices. @@ -80,8 +80,6 @@ | Name | Type | |------|------| | [ibm_iam_auth_token.auth_token](https://registry.terraform.io/providers/IBM-Cloud/ibm/1.84.3/docs/data-sources/iam_auth_token) | data source | -| [ibm_pi_catalog_images.catalog_images_ds](https://registry.terraform.io/providers/IBM-Cloud/ibm/1.84.3/docs/data-sources/pi_catalog_images) | data source | -| [ibm_pi_image.custom_images](https://registry.terraform.io/providers/IBM-Cloud/ibm/1.84.3/docs/data-sources/pi_image) | data source | ### Inputs @@ -89,9 +87,8 @@ |------|-------------|------|---------|:--------:| | [ansible\_vault\_password](#input\_ansible\_vault\_password) | Vault password to encrypt ansible playbooks that contain sensitive information. Required when SCC workload Protection is enabled. Password requirements: 15-100 characters and at least one uppercase letter, one lowercase letter, one number, and one special character. Allowed characters: A-Z, a-z, 0-9, !#$%&()*+-.:;<=>?@[]\_{\|}~. | `string` | `""` | no | | [client\_to\_site\_vpn](#input\_client\_to\_site\_vpn) | VPN configuration - the client ip pool and list of users email ids to access the environment. If enabled, then a Secret Manager instance is also provisioned with certificates generated. See optional parameters to reuse an existing Secrets manager instance. |
object({
enable = bool
client_ip_pool = string
vpn_client_access_group_users = list(string)
}) | {
"client_ip_pool": "192.168.0.0/16",
"enable": true,
"vpn_client_access_group_users": []
} | no |
-| [enable\_monitoring](#input\_enable\_monitoring) | Specify whether Monitoring will be enabled. This includes the creation of an IBM Cloud Monitoring Instance and an Intel Monitoring Instance to host the services. If you already have an existing monitoring instance then specify in optional parameter 'existing\_monitoring\_instance\_crn'. | `bool` | n/a | yes |
+| [enable\_monitoring](#input\_enable\_monitoring) | Specify whether Monitoring will be enabled. This creates a new IBM Cloud Monitoring Instance. | `bool` | n/a | yes |
| [enable\_scc\_wp](#input\_enable\_scc\_wp) | Set to true to enable SCC Workload Protection and install and configure the SCC Workload Protection agent on all VSIs and PowerVS instances in this deployment. | `bool` | n/a | yes |
-| [existing\_monitoring\_instance\_crn](#input\_existing\_monitoring\_instance\_crn) | Existing CRN of IBM Cloud Monitoring Instance. If value is null, then an IBM Cloud Monitoring Instance will not be created but an intel VSI instance will be created if 'enable\_monitoring' is true. | `string` | `null` | no |
| [existing\_sm\_instance\_guid](#input\_existing\_sm\_instance\_guid) | An existing Secrets Manager GUID. If not provided a new instance will be provisioned. | `string` | `null` | no |
| [existing\_sm\_instance\_region](#input\_existing\_sm\_instance\_region) | Required if value is passed into `var.existing_sm_instance_guid`. | `string` | `null` | no |
| [external\_access\_ip](#input\_external\_access\_ip) | Specify the IP address or CIDR to login through SSH to the environment after deployment. Access to this environment will be allowed only from this IP address. | `string` | n/a | yes |
@@ -100,7 +97,7 @@
| [os\_image\_distro](#input\_os\_image\_distro) | Image distribution to use for all instances(HANA, NetWeaver). OS release versions may be specified in 'powervs\_sap\_default\_images' optional parameters below. | `string` | n/a | yes |
| [powervs\_custom\_image\_cos\_configuration](#input\_powervs\_custom\_image\_cos\_configuration) | Cloud Object Storage bucket containing custom PowerVS images. bucket\_name: string, name of the COS bucket. bucket\_access: string, possible values: public, private (private requires powervs\_custom\_image\_cos\_service\_credentials). bucket\_region: string, COS bucket region | object({
bucket_name = string
bucket_access = string
bucket_region = string
}) | {
"bucket_access": "",
"bucket_name": "",
"bucket_region": ""
} | no |
| [powervs\_custom\_image\_cos\_service\_credentials](#input\_powervs\_custom\_image\_cos\_service\_credentials) | Service credentials for the Cloud Object Storage bucket containing the custom PowerVS images. The bucket must have HMAC credentials enabled. Click [here](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-service-credentials) for a json example of a service credential. | `string` | `null` | no |
-| [powervs\_custom\_images](#input\_powervs\_custom\_images) | Optionally import up to three custom images from Cloud Object Storage into PowerVS workspace. Requires 'powervs\_custom\_image\_cos\_configuration' to be set. image\_name: string, must be unique. Name of image inside PowerVS workspace. file\_name: string, object key of image inside COS bucket. storage\_tier: string, storage tier which image will be stored in after import. Supported values: tier0, tier1, tier3, tier5k. sap\_type: optional string, Supported values: null, Hana, Netweaver, use null for non-SAP image. | object({
powervs_custom_image1 = object({
image_name = string
file_name = string
storage_tier = string
sap_type = optional(string)
}),
powervs_custom_image2 = object({
image_name = string
file_name = string
storage_tier = string
sap_type = optional(string)
}),
powervs_custom_image3 = object({
image_name = string
file_name = string
storage_tier = string
sap_type = optional(string)
})
}) | {
"powervs_custom_image1": {
"file_name": "",
"image_name": "",
"sap_type": null,
"storage_tier": ""
},
"powervs_custom_image2": {
"file_name": "",
"image_name": "",
"sap_type": null,
"storage_tier": ""
},
"powervs_custom_image3": {
"file_name": "",
"image_name": "",
"sap_type": null,
"storage_tier": ""
}
} | no |
+| [powervs\_custom\_images](#input\_powervs\_custom\_images) | Optionally import up to three custom images from Cloud Object Storage into PowerVS workspace. Requires 'powervs\_custom\_image\_cos\_configuration' to be set. image\_name: string, must be unique. Name of image inside PowerVS workspace. file\_name: string, object key of image inside COS bucket. storage\_tier: string, storage tier which image will be stored in after import. Supported values: tier0, tier1, tier3, tier5k. sap\_type: optional string, Supported values: null, Hana and Netweaver | object({
powervs_custom_image1 = object({
image_name = string
file_name = string
storage_tier = string
sap_type = optional(string)
}),
powervs_custom_image2 = object({
image_name = string
file_name = string
storage_tier = string
sap_type = optional(string)
})
}) | {
"powervs_custom_image1": {
"file_name": "",
"image_name": "",
"sap_type": "Hana",
"storage_tier": ""
},
"powervs_custom_image2": {
"file_name": "",
"image_name": "",
"sap_type": "Netweaver",
"storage_tier": ""
}
} | no |
| [powervs\_default\_sap\_images](#input\_powervs\_default\_sap\_images) | Default SUSE and Red Hat Linux Full Linux subscription images to use for PowerVS SAP HANA and SAP NetWeaver instances. If you're using a byol or a custom RHEL/SLES image, additionally specify the optional values for 'powervs\_os\_registration\_username', 'powervs\_os\_registration\_password' and 'ansible\_vault\_password' | object({
sles_hana_image = string
sles_nw_image = string
rhel_hana_image = string
rhel_nw_image = string
}) | {
"rhel_hana_image": "RHEL9-SP4-SAP",
"rhel_nw_image": "RHEL9-SP4-SAP-NETWEAVER",
"sles_hana_image": "SLES15-SP6-SAP",
"sles_nw_image": "SLES15-SP6-SAP-NETWEAVER"
} | no |
| [powervs\_hana\_instance\_additional\_storage\_config](#input\_powervs\_hana\_instance\_additional\_storage\_config) | Additional File systems to be created and attached to PowerVS SAP HANA instance. 'size' is in GB. 'count' specify over how many storage volumes the file system will be striped. 'tier' specifies the storage tier in PowerVS workspace. 'mount' specifies the target mount point on OS. | list(object({
name = string
size = string
count = string
tier = string
mount = string
})) | [| no | | [powervs\_hana\_instance\_custom\_storage\_config](#input\_powervs\_hana\_instance\_custom\_storage\_config) | Custom file systems to be created and attached to PowerVS SAP HANA instance. 'size' is in GB. 'count' specify over how many storage volumes the file system will be striped. 'tier' specifies the storage tier in PowerVS workspace. 'mount' specifies the target mount point on OS. If not specified, volumes for '/hana/data', '/hana/log', '/hana/shared' are automatically calculated and created. |
{
"count": "1",
"mount": "/usr/sap",
"name": "usrsap",
"size": "50",
"tier": "tier3"
}
]
list(object({
name = string
size = string
count = string
tier = string
mount = string
pool = optional(string)
})) | [| no | @@ -119,7 +116,7 @@ | [sm\_service\_plan](#input\_sm\_service\_plan) | The service/pricing plan to use when provisioning a new Secrets Manager instance. Allowed values: `standard` and `trial`. Only used if `existing_sm_instance_guid` is set to null. | `string` | `"standard"` | no | | [ssh\_private\_key](#input\_ssh\_private\_key) | Private SSH key (RSA format) used to login to IBM PowerVS instances. Should match to uploaded public SSH key referenced by 'ssh\_public\_key' which was created previously. The key is temporarily stored and deleted. For more information about SSH keys, see [SSH keys](https://cloud.ibm.com/docs/vpc?topic=vpc-ssh-keys). | `string` | n/a | yes | | [ssh\_public\_key](#input\_ssh\_public\_key) | Public SSH Key for VSI creation. Must be an RSA key with a key size of either 2048 bits or 4096 bits (recommended). Must be a valid SSH key that does not already exist in the deployment region. | `string` | n/a | yes | -| [tags](#input\_tags) | List of tag names for the IBM Cloud PowerVS workspace | `list(string)` | `[]` | no | +| [tags](#input\_tags) | List of tag names for the IBM Cloud resources created. | `list(string)` | `[]` | no | | [vpc\_intel\_images](#input\_vpc\_intel\_images) | Stock OS image names for creating VPC landing zone VSI instances: RHEL (management and network services) and SLES (monitoring). |
{
"count": "",
"mount": "",
"name": "",
"size": "",
"tier": ""
}
]
object({
rhel_image = string
sles_image = string
}) | {
"rhel_image": "ibm-redhat-9-6-amd64-sap-applications-1",
"sles_image": "ibm-sles-15-7-amd64-sap-applications-1"
} | no |
| [vpc\_subnet\_cidrs](#input\_vpc\_subnet\_cidrs) | CIDR values for the VPC subnets to be created. It's customer responsibility that none of the defined networks collide, including the PowerVS subnets and VPN client pool. | object({
vpn = string
mgmt = string
vpe = string
edge = string
}) | {
"edge": "10.30.40.0/24",
"mgmt": "10.30.20.0/24",
"vpe": "10.30.30.0/24",
"vpn": "10.30.10.0/24"
} | no |
diff --git a/solutions/ibm-catalog/sap-ready-to-go/catalogValidationValues.json.template b/solutions/ibm-catalog/sap-ready-to-go/catalogValidationValues.json.template
index 158bab5c..5a5ea92f 100644
--- a/solutions/ibm-catalog/sap-ready-to-go/catalogValidationValues.json.template
+++ b/solutions/ibm-catalog/sap-ready-to-go/catalogValidationValues.json.template
@@ -1,6 +1,6 @@
{
"prefix": "sap",
- "powervs_zone": "us-south",
+ "powervs_zone": "dal12",
"powervs_resource_group_name": "Default",
"external_access_ip": "0.0.0.0/0",
"os_image_distro": "RHEL",
diff --git a/solutions/ibm-catalog/sap-ready-to-go/images.tf b/solutions/ibm-catalog/sap-ready-to-go/images.tf
index 345fc7a2..c32c9685 100644
--- a/solutions/ibm-catalog/sap-ready-to-go/images.tf
+++ b/solutions/ibm-catalog/sap-ready-to-go/images.tf
@@ -1,77 +1,64 @@
-locals {
- powervs_custom_images = module.standard.powervs_images
- selected_hana_image = var.os_image_distro == "SLES" ? var.powervs_default_sap_images.sles_hana_image : var.powervs_default_sap_images.rhel_hana_image
- selected_netweaver_image = var.os_image_distro == "SLES" ? var.powervs_default_sap_images.sles_nw_image : var.powervs_default_sap_images.rhel_nw_image
-
- fls_image_types = ["stock-sap-fls", "stock-sap-netweaver-fls"]
-
- use_custom_images = (
- length(local.powervs_custom_images) > 0 &&
- alltrue([
- for name in [local.selected_hana_image, local.selected_netweaver_image] : (
- contains(keys(local.powervs_custom_images), name) ?
- local.powervs_custom_images[name].image_vendor == "SAP" : false
- )
- ])
- )
-}
-
-# Stock image data (only if not using custom)
-data "ibm_pi_catalog_images" "catalog_images_ds" {
- count = local.use_custom_images ? 0 : 1
- provider = ibm.ibm-pi
- pi_cloud_instance_id = module.standard.powervs_workspace_guid
- sap = true
-}
-
-# Custom image data (only if using custom)
-data "ibm_pi_image" "custom_images" {
- count = local.use_custom_images ? 2 : 0
- provider = ibm.ibm-pi
- pi_image_name = element([local.selected_hana_image, local.selected_netweaver_image], count.index)
- pi_cloud_instance_id = module.standard.powervs_workspace_guid
-}
+###############################################################################
+# PowerVS Custom / Stock Image Logic
+###############################################################################
locals {
- hana_image_type = local.use_custom_images ? data.ibm_pi_image.custom_images[0].image_type : one([
- for img in data.ibm_pi_catalog_images.catalog_images_ds[0].images :
- img.image_type if img.name == local.selected_hana_image
- ])
+ # --------------------------------------------------------------------------
+ # Determine how many valid custom images exist
+ # --------------------------------------------------------------------------
+ custom_image_count = length([for _, img in module.standard.powervs_images : img if img.image_license_type == "byol"])
+ use_custom_images = local.custom_image_count > 0
- netweaver_image_type = local.use_custom_images ? data.ibm_pi_image.custom_images[1].image_type : one([
- for img in data.ibm_pi_catalog_images.catalog_images_ds[0].images :
- img.image_type if img.name == local.selected_netweaver_image
- ])
+ # --------------------------------------------------------------------------
+ # Set image names
+ # --------------------------------------------------------------------------
+ selected_hana_image = local.use_custom_images ? (
+ length(trim(var.powervs_custom_images.powervs_custom_image1.image_name, " ")) > 0 ?
+ var.powervs_custom_images.powervs_custom_image1.image_name :
+ ""
+ ) : (
+ var.os_image_distro == "SLES" ?
+ var.powervs_default_sap_images.sles_hana_image :
+ var.powervs_default_sap_images.rhel_hana_image
+ )
- hana_image_id = local.use_custom_images ? lookup(local.powervs_custom_images, local.selected_hana_image, null).image_id : one([
- for img in data.ibm_pi_catalog_images.catalog_images_ds[0].images :
- img.image_id if img.name == local.selected_hana_image
- ])
+ selected_netweaver_image = local.use_custom_images ? (
+ length(trim(var.powervs_custom_images.powervs_custom_image2.image_name, " ")) > 0 ?
+ var.powervs_custom_images.powervs_custom_image2.image_name :
+ var.powervs_custom_images.powervs_custom_image1.image_name
+ ) : (
+ var.os_image_distro == "SLES" ?
+ var.powervs_default_sap_images.sles_nw_image :
+ var.powervs_default_sap_images.rhel_nw_image
+ )
- netweaver_image_id = local.use_custom_images ? lookup(local.powervs_custom_images, local.selected_netweaver_image, null).image_id : one([
- for img in data.ibm_pi_catalog_images.catalog_images_ds[0].images :
- img.image_id if img.name == local.selected_netweaver_image
- ])
+ fls_image_types = ["stock-sap-fls", "stock-sap-netweaver-fls"]
+ selected_hana_image_type = local.use_custom_images || strcontains(local.selected_hana_image, "BYOL") ? "byol" : "stock-sap-fls"
+ selected_netweaver_image_type = local.use_custom_images || strcontains(local.selected_netweaver_image, "BYOL") ? "byol" : "stock-sap-netweaver-fls"
- hana_is_fls = contains(local.fls_image_types, local.hana_image_type)
- netweaver_is_fls = contains(local.fls_image_types, local.netweaver_image_type)
+ # --------------------------------------------------------------------------
+ # FLS and BYOL logic
+ # --------------------------------------------------------------------------
+ hana_is_fls = contains(local.fls_image_types, local.selected_hana_image_type)
+ netweaver_is_fls = contains(local.fls_image_types, local.selected_netweaver_image_type)
images_mixed = local.hana_is_fls != local.netweaver_is_fls
use_fls = local.hana_is_fls && local.netweaver_is_fls
has_byol_creds = length(var.powervs_os_registration_username) > 0 && length(var.powervs_os_registration_password) > 0
byol_and_fls = local.use_fls && local.has_byol_creds
missing_byol_creds = !local.use_fls && !local.has_byol_creds
+ # --------------------------------------------------------------------------
# Validation messages
- images_mixed_msg = "You've selected an fls image and a byol image for hana and netweaver. Using byol on one and fls on another is currently not supported."
-
+ # --------------------------------------------------------------------------
+ images_mixed_msg = "You've selected an FLS image and a BYOL image for HANA and NetWeaver. Using BYOL on one and FLS on another is not supported."
# tflint-ignore: terraform_unused_declarations
validate_images_mixed = regex("^${local.images_mixed_msg}$", (local.images_mixed ? "" : local.images_mixed_msg))
- missing_byol_msg = "Missing byol credentials for activation of linux subscription."
+ missing_byol_msg = "Missing BYOL credentials for activation of Linux subscription."
# tflint-ignore: terraform_unused_declarations
validate_byol_provided = regex("^${local.missing_byol_msg}$", (local.missing_byol_creds ? "" : local.missing_byol_msg))
- byol_and_fls_msg = "FLS images and user provided linux subscription detected. Can't use both at the same time."
+ byol_and_fls_msg = "FLS images and user-provided Linux subscription detected. Can't use both at the same time."
# tflint-ignore: terraform_unused_declarations
validate_byol_and_fls = regex("^${local.byol_and_fls_msg}$", (local.byol_and_fls ? "" : local.byol_and_fls_msg))
}
diff --git a/solutions/ibm-catalog/sap-ready-to-go/locals.tf b/solutions/ibm-catalog/sap-ready-to-go/locals.tf
index fed80cb0..01889cb7 100644
--- a/solutions/ibm-catalog/sap-ready-to-go/locals.tf
+++ b/solutions/ibm-catalog/sap-ready-to-go/locals.tf
@@ -1,7 +1,7 @@
locals {
powervs_hana_instance = {
name = "hana"
- image_id = local.hana_image_id
+ image_id = local.selected_hana_image
sap_profile_id = var.powervs_hana_instance_sap_profile_id
additional_storage_config = var.powervs_hana_instance_additional_storage_config
}
@@ -9,7 +9,7 @@ locals {
powervs_netweaver_instance = {
instance_count = var.powervs_netweaver_instance_count
name = "nw"
- image_id = local.netweaver_image_id
+ image_id = local.selected_netweaver_image
processors = var.powervs_netweaver_cpu_number
memory = var.powervs_netweaver_memory_size
proc_type = "shared"
diff --git a/solutions/ibm-catalog/sap-ready-to-go/main.tf b/solutions/ibm-catalog/sap-ready-to-go/main.tf
index 68475c82..db5c540e 100644
--- a/solutions/ibm-catalog/sap-ready-to-go/main.tf
+++ b/solutions/ibm-catalog/sap-ready-to-go/main.tf
@@ -14,22 +14,27 @@ module "standard" {
ibm.ibm-sm = ibm.ibm-sm
}
- powervs_zone = var.powervs_zone
- powervs_resource_group_name = var.powervs_resource_group_name
- prefix = var.prefix
- external_access_ip = var.external_access_ip
- vpc_intel_images = var.vpc_intel_images
- ssh_public_key = var.ssh_public_key
- ssh_private_key = var.ssh_private_key
- powervs_management_network = { name = "${var.prefix}-sap-net", cidr = var.powervs_sap_network_cidr }
- powervs_backup_network = null
- configure_dns_forwarder = true
- configure_ntp_forwarder = true
- configure_nfs_server = true
- nfs_server_config = var.nfs_server_config
- dns_forwarder_config = { "dns_servers" : "161.26.0.7; 161.26.0.8; 9.9.9.9;" }
- tags = var.tags
- powervs_custom_images = var.powervs_custom_images
+ powervs_zone = var.powervs_zone
+ powervs_resource_group_name = var.powervs_resource_group_name
+ prefix = var.prefix
+ external_access_ip = var.external_access_ip
+ vpc_intel_images = var.vpc_intel_images
+ ssh_public_key = var.ssh_public_key
+ ssh_private_key = var.ssh_private_key
+ powervs_management_network = { name = "${var.prefix}-sap-net", cidr = var.powervs_sap_network_cidr }
+ powervs_backup_network = null
+ configure_dns_forwarder = true
+ configure_ntp_forwarder = true
+ configure_nfs_server = true
+ nfs_server_config = var.nfs_server_config
+ dns_forwarder_config = { "dns_servers" : "161.26.0.7; 161.26.0.8; 9.9.9.9;" }
+ tags = var.tags
+ powervs_custom_images = merge(var.powervs_custom_images, { powervs_custom_image3 = {
+ image_name = "",
+ file_name = "",
+ storage_tier = "",
+ sap_type = null
+ } })
powervs_custom_image_cos_configuration = var.powervs_custom_image_cos_configuration
powervs_custom_image_cos_service_credentials = var.powervs_custom_image_cos_service_credentials
client_to_site_vpn = var.client_to_site_vpn
@@ -37,7 +42,7 @@ module "standard" {
existing_sm_instance_guid = var.existing_sm_instance_guid
existing_sm_instance_region = var.existing_sm_instance_region
enable_monitoring = var.enable_monitoring
- existing_monitoring_instance_crn = var.existing_monitoring_instance_crn
+ enable_monitoring_host = var.enable_monitoring
enable_scc_wp = var.enable_scc_wp
ansible_vault_password = var.ansible_vault_password
vpc_subnet_cidrs = var.vpc_subnet_cidrs
diff --git a/solutions/ibm-catalog/sap-ready-to-go/variables.tf b/solutions/ibm-catalog/sap-ready-to-go/variables.tf
index 2e8e558f..8bd57ebd 100644
--- a/solutions/ibm-catalog/sap-ready-to-go/variables.tf
+++ b/solutions/ibm-catalog/sap-ready-to-go/variables.tf
@@ -180,6 +180,7 @@ variable "nfs_server_config" {
#####################################################
# Parameters for Image
#####################################################
+
variable "vpc_intel_images" {
description = "Stock OS image names for creating VPC landing zone VSI instances: RHEL (management and network services) and SLES (monitoring)."
type = object({
@@ -222,7 +223,7 @@ variable "powervs_os_registration_password" {
}
variable "powervs_custom_images" {
- description = "Optionally import up to three custom images from Cloud Object Storage into PowerVS workspace. Requires 'powervs_custom_image_cos_configuration' to be set. image_name: string, must be unique. Name of image inside PowerVS workspace. file_name: string, object key of image inside COS bucket. storage_tier: string, storage tier which image will be stored in after import. Supported values: tier0, tier1, tier3, tier5k. sap_type: optional string, Supported values: null, Hana, Netweaver, use null for non-SAP image."
+ description = "Optionally import up to three custom images from Cloud Object Storage into PowerVS workspace. Requires 'powervs_custom_image_cos_configuration' to be set. image_name: string, must be unique. Name of image inside PowerVS workspace. file_name: string, object key of image inside COS bucket. storage_tier: string, storage tier which image will be stored in after import. Supported values: tier0, tier1, tier3, tier5k. sap_type: optional string, Supported values: null, Hana and Netweaver"
type = object({
powervs_custom_image1 = object({
image_name = string
@@ -235,12 +236,6 @@ variable "powervs_custom_images" {
file_name = string
storage_tier = string
sap_type = optional(string)
- }),
- powervs_custom_image3 = object({
- image_name = string
- file_name = string
- storage_tier = string
- sap_type = optional(string)
})
})
default = {
@@ -248,19 +243,13 @@ variable "powervs_custom_images" {
"image_name" : "",
"file_name" : "",
"storage_tier" : "",
- "sap_type" : null
+ "sap_type" : "Hana"
},
"powervs_custom_image2" : {
"image_name" : "",
"file_name" : "",
"storage_tier" : "",
- "sap_type" : null
- },
- "powervs_custom_image3" : {
- "image_name" : "",
- "file_name" : "",
- "storage_tier" : "",
- "sap_type" : null
+ "sap_type" : "Netweaver"
}
}
}
@@ -328,18 +317,11 @@ variable "existing_sm_instance_region" {
#####################################################
# Parameters Monitoring
#####################################################
-
variable "enable_monitoring" {
- description = "Specify whether Monitoring will be enabled. This includes the creation of an IBM Cloud Monitoring Instance and an Intel Monitoring Instance to host the services. If you already have an existing monitoring instance then specify in optional parameter 'existing_monitoring_instance_crn'."
+ description = "Specify whether Monitoring will be enabled. This creates a new IBM Cloud Monitoring Instance."
type = bool
}
-variable "existing_monitoring_instance_crn" {
- description = "Existing CRN of IBM Cloud Monitoring Instance. If value is null, then an IBM Cloud Monitoring Instance will not be created but an intel VSI instance will be created if 'enable_monitoring' is true. "
- type = string
- default = null
-}
-
#################################################
# Parameters SCC Workload Protection
#################################################
@@ -357,7 +339,7 @@ variable "ansible_vault_password" {
}
variable "tags" {
- description = "List of tag names for the IBM Cloud PowerVS workspace"
+ description = "List of tag names for the IBM Cloud resources created."
type = list(string)
default = []
}
diff --git a/solutions/ibm-catalog/sap-s4hana-bw4hana/README.md b/solutions/ibm-catalog/sap-s4hana-bw4hana/README.md
new file mode 100644
index 00000000..f38df1fc
--- /dev/null
+++ b/solutions/ibm-catalog/sap-s4hana-bw4hana/README.md
@@ -0,0 +1,190 @@
+# IBM Cloud Catalog - Power Virtual Server for SAP HANA : 'SAP S/4HANA or SAP BW/4HANA'
+
+# Summary
+
+## Summary Outcome:
+ SAP S/4HANA or SAP BW/4HANA installation configuration to IBM PowerVS hosts.
+
+| Variation | Available on IBM Catalog | Requires Schematics Workspace ID | Creates PowerVS with VPC landing zone | Creates PowerVS HANA Instance | Creates PowerVS NW Instances | Performs PowerVS OS Config | Performs PowerVS SAP Tuning | Install SAP software |
+|:---------------------------------------------------------------------------:|:------------------------:|:--------------------------------:|:-------------------------------------:|:-----------------------------:|:----------------------------:|:--------------------------:|:---------------------------:|:--------------------:|
+| [IBM catalog SAP S/4HANA or BW/4HANA variation]( ./) | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | 1 | 1 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
+
+## Architecture Diagram
+
+
+## Overview
+1. [Summary Tasks](#summary-tasks)
+2. [Before you begin](#before-you-begin)
+3. [Notes](#notes)
+4. [Post Deployment](#post-deployment)
+5. [Storage setup](#storage-setup)
+6. [Ansible roles used](#ansible-roles-used)
+
+- A **VPC Infrastructure** with the following components:
+ - One VSI for management (jump/bastion)
+ - One VSI for network-services configured as squid proxy, NTP and DNS servers(using Ansible Galaxy collection roles [ibm.power_linux_sap collection](https://galaxy.ansible.com/ui/repo/published/ibm/power_linux_sap/). This VSI also acts as central ansible execution node.
+ - Optional VSI for Monitoring host
+ - Optional [Client to site VPN server](https://cloud.ibm.com/docs/vpc?topic=vpc-vpn-client-to-site-overview)
+ - Optional [File storage share](https://cloud.ibm.com/docs/vpc?topic=vpc-file-storage-create&interface=ui)
+ - Optional [Network load balancer](https://cloud.ibm.com/docs/vpc?group=network-load-balancer)
+ - Optional [IBM Cloud Security and Compliance Center Workload Protection](https://cloud.ibm.com/docs/workload-protection) and SCC Workload Protection agent configuration on the VSIs in the deployment
+ - IBM Cloud Object storage(COS) Virtual Private endpoint gateway(VPE)
+ - IBM Cloud Object storage(COS) Instance and buckets
+ - VPC flow logs
+ - KMS keys
+ - Activity tracker
+ - Optional Secrets Manager Instance Instance with private certificate.
+
+- A local or global **transit gateway**
+- An optional IBM Cloud Monitoring Instance
+
+- A **Power Virtual Server** workspace with the following network topology:
+ - Creates a new private subnet for SAP communication for the entire landscape.
+ - Attaches the PowerVS workspace to transit gateway.
+ - Creates an SSH key.
+ - Optionally imports up to two custom images from Cloud Object Storage.
+- Creates and configures one PowerVS instance for SAP HANA based on best practices for HANA database.
+- Creates and configures one PowerVS instance for SAP NetWeaver based on best practices, hosting the PAS and ASCS instances.
+- Optionally let's the user choose a byol or custom os image for the HANA and Netweaver PowerVS instances and activate it with user provided os registration credentials.
+- Creates and configures one optional PowerVS instance for sharing SAP files between other system instances.
+- Connects all created PowerVS instances to a proxy server specified by IP address or hostname.
+- Optionally connects all created PowerVS instances to an NTP server and DNS forwarder specified by IP address or hostname.
+- Optionally configures a shared NFS directory on all created PowerVS instances.
+- Optionally configures the monitoring host to collect relevant information from the Database and application servers and send it to the IBM Cloud® Monitoring Instance
+- Optionally installs Sysdig agent and configures connection to [IBM Cloud Security and Compliance Center Workload Protection](https://cloud.ibm.com/docs/workload-protection)
+- Supports installation of **S/4HANA2023, S/4HANA2022, S/4HANA2021, S/4HANA2020, BW/4HANA2021**.
+- Supports installation using **Maintenance Planner** as well.
+- Optionally installs and configures SAP Monitoring host and dashboard, if monitoring instance was deployed as part of [Power Virtual Server with VPC landing zone deployment](https://cloud.ibm.com/catalog/architecture/deploy-arch-ibm-pvs-inf-2dd486c7-b317-4aaa-907b-42671485ad96-global?catalog_query=aHR0cHM6Ly9jbG91ZC5pYm0uY29tL2NhdGFsb2c%2Fc2VhcmNoPXBvd2VyI3NlYXJjaF9yZXN1bHRz).
+
+
+## Before you begin
+1. **It is required to have an existing IBM Cloud Object Storage (COS) instance**. Within the instance, an Object Storage Bucket containing the **SAP Software installation media files is required in the correct folder structure as defined** [here](#2-sap-binaries-required-for-installation-and-folder-structure-in-ibm-cloud-object-storage-bucket).
+
+
+## Notes
+- Filesystem sizes for HANA data and HANA log are **calculated automatically** based on the **memory size**.
+- Custom storage configuration by providing custom volume size, **iops**(tier0, tier1, tier3, tier5k), counts and mount points is supported.
+
+
+
+## Post Deployment
+1. All the installation logs and Ansible playbook files will be under the directory `/root/terraform_files/`.
+2. The **ansible vault password** will be used to encrypt the Ansible playbook file created during deployment. This playbook file will be placed under `/root/terraform_files/sap-hana-install.yml` on the **HANA instance** and `/root/terraform_files/sap-swpm-install-vars.yml` on the **NetWeaver Instance**.
+3. This file can be decrypted using the same value passed to variable **'ansible_vault_password'** during deployment. Use the command `ansible-vault decrypt /root/terraform_files/sap-swpm-install-vars.yml` and enter the password when prompted.
+
+## Storage setup
+
+### 1. HANA Instance:
+**Default values:**
+```
+/hana/shared (size auto calculated based on memory)
+/hana/data (size auto calculated based on memory)
+/hana/log (size auto calculated based on memory)
+/usr/sap 50GB
+```
+
+*Note: Supports custom storage configuration using provided optional variables.*
+
+### 2. Netweaver Instance:
+**Default values:**
+```
+/usr/sap 50GB
+/sapmnt 300GB
+```
+
+*Note: Supports custom storage configuration using provided optional variables.*
+
+
+## Ansible roles used
+1. **[RHEL System Roles](https://access.redhat.com/articles/4488731):** `sap_hana_install, sap_swpm, sap_general_preconfigure, sap_hana_preconfigure, sap_netweaver_preconfigure`
+2. **[IBM Role](https://galaxy.ansible.com/ui/repo/published/ibm/power_linux_sap/):** `power_linux_sap`
+
+
+
+### Requirements
+
+| Name | Version |
+|------|---------|
+| [terraform](#requirement\_terraform) | >= 1.9.0 |
+| [ibm](#requirement\_ibm) | 1.84.1 |
+| [restapi](#requirement\_restapi) | 2.0.1 |
+
+### Modules
+
+| Name | Source | Version |
+|------|--------|---------|
+| [ansible\_monitoring\_sap\_install\_solution](#module\_ansible\_monitoring\_sap\_install\_solution) | ../../../modules/ansible | n/a |
+| [ansible\_sap\_install\_hana](#module\_ansible\_sap\_install\_hana) | ../../../modules/ansible | n/a |
+| [ansible\_sap\_install\_solution](#module\_ansible\_sap\_install\_solution) | ../../../modules/ansible | n/a |
+| [ibmcloud\_cos\_download\_hana\_binaries](#module\_ibmcloud\_cos\_download\_hana\_binaries) | ../../../modules/ibmcloud-cos | n/a |
+| [ibmcloud\_cos\_download\_monitoring\_binaries](#module\_ibmcloud\_cos\_download\_monitoring\_binaries) | ../../../modules/ibmcloud-cos | n/a |
+| [ibmcloud\_cos\_download\_netweaver\_binaries](#module\_ibmcloud\_cos\_download\_netweaver\_binaries) | ../../../modules/ibmcloud-cos | n/a |
+| [sap\_system](#module\_sap\_system) | ../../../modules/pi-sap-system-type1 | n/a |
+| [standard](#module\_standard) | terraform-ibm-modules/powervs-infrastructure/ibm//modules/powervs-vpc-landing-zone | 10.2.1 |
+
+### Resources
+
+| Name | Type |
+|------|------|
+| [ibm_iam_auth_token.auth_token](https://registry.terraform.io/providers/IBM-Cloud/ibm/1.84.1/docs/data-sources/iam_auth_token) | data source |
+
+### Inputs
+
+| Name | Description | Type | Default | Required |
+|------|-------------|------|---------|:--------:|
+| [ansible\_vault\_password](#input\_ansible\_vault\_password) | Vault password to encrypt ansible playbooks that contain sensitive information. Required when SCC workload Protection is enabled. Password requirements: 15-100 characters and at least one uppercase letter, one lowercase letter, one number, and one special character. Allowed characters: A-Z, a-z, 0-9, !#$%&()*+-.:;<=>?@[]\_{\|}~. | `string` | n/a | yes |
+| [client\_to\_site\_vpn](#input\_client\_to\_site\_vpn) | VPN configuration - the client ip pool and list of users email ids to access the environment. If enabled, then a Secret Manager instance is also provisioned with certificates generated. See optional parameters to reuse an existing Secrets manager instance. | object({
enable = bool
client_ip_pool = string
vpn_client_access_group_users = list(string)
}) | {
"client_ip_pool": "192.168.0.0/16",
"enable": true,
"vpn_client_access_group_users": []
} | no |
+| [enable\_monitoring](#input\_enable\_monitoring) | Specify whether Monitoring will be enabled. This includes the creation of an IBM Cloud Monitoring Instance and an Intel Monitoring Instance to host the services. | `bool` | n/a | yes |
+| [enable\_scc\_wp](#input\_enable\_scc\_wp) | Set to true to enable SCC Workload Protection and install and configure the SCC Workload Protection agent on all VSIs and PowerVS instances in this deployment. | `bool` | n/a | yes |
+| [existing\_sm\_instance\_guid](#input\_existing\_sm\_instance\_guid) | An existing Secrets Manager GUID. If not provided a new instance will be provisioned. | `string` | `null` | no |
+| [existing\_sm\_instance\_region](#input\_existing\_sm\_instance\_region) | Required if value is passed into `var.existing_sm_instance_guid`. | `string` | `null` | no |
+| [external\_access\_ip](#input\_external\_access\_ip) | Specify the IP address or CIDR to login through SSH to the environment after deployment. Access to this environment will be allowed only from this IP address. | `string` | n/a | yes |
+| [ibmcloud\_api\_key](#input\_ibmcloud\_api\_key) | IBM Cloud platform API key needed to deploy IAM enabled resources. | `string` | n/a | yes |
+| [ibmcloud\_cos\_configuration](#input\_ibmcloud\_cos\_configuration) | Cloud Object Storage instance containing SAP installation files that will be downloaded to NFS share. 'cos\_hana\_software\_path' must contain only binaries required for HANA DB installation. 'cos\_solution\_software\_path' must contain only binaries required for S/4HANA or BW/4HANA installation and must not contain any IMDB files. 'cos\_monitoring\_software\_path' is optional and must contain x86\_64 SAPCAR and SAP HANA client binaries required for configuring monitoring instance. The binaries required for installation can be found [here](https://github.com/terraform-ibm-modules/terraform-ibm-powervs-sap/blob/main/solutions/ibm-catalog/sap-s4hana-bw4hana/docs/s4hana23_bw4hana21_binaries.md) If you have an optional stack xml file (maintenance planner), place it under the 'cos\_solution\_software\_path' directory. Avoid inserting '/' at the beginning for 'cos\_hana\_software\_path', 'cos\_solution\_software\_path' and 'cos\_monitoring\_software\_path'. | object({
cos_region = string
cos_bucket_name = string
cos_hana_software_path = string
cos_solution_software_path = string
cos_monitoring_software_path = optional(string)
cos_swpm_mp_stack_file_name = string
}) | {
"cos_bucket_name": "powervs-automation",
"cos_hana_software_path": "HANA_DB/rev87",
"cos_monitoring_software_path": "HANA_CLIENT/x86_64",
"cos_region": "eu-geo",
"cos_solution_software_path": "S4HANA_2023",
"cos_swpm_mp_stack_file_name": ""
} | no |
+| [ibmcloud\_cos\_service\_credentials](#input\_ibmcloud\_cos\_service\_credentials) | IBM Cloud Object Storage instance service credentials to access the bucket in the instance.[json example of service credential](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-service-credentials) | `string` | n/a | yes |
+| [nfs\_server\_config](#input\_nfs\_server\_config) | Configuration for the NFS server. 'size' is in GB, 'iops' is maximum input/output operation performance bandwidth per second, 'mount\_path' defines the target mount point on os. Set 'configure\_nfs\_server' to false to ignore creating file storage share. | object({
size = number
iops = number
mount_path = string
}) | {
"iops": 600,
"mount_path": "/nfs",
"size": 200
} | no |
+| [powervs\_custom\_image\_cos\_configuration](#input\_powervs\_custom\_image\_cos\_configuration) | Cloud Object Storage bucket containing custom PowerVS images. bucket\_name: string, name of the COS bucket. bucket\_access: string, possible values: public, private (private requires powervs\_custom\_image\_cos\_service\_credentials). bucket\_region: string, COS bucket region | object({
bucket_name = string
bucket_access = string
bucket_region = string
}) | {
"bucket_access": "",
"bucket_name": "",
"bucket_region": ""
} | no |
+| [powervs\_custom\_image\_cos\_service\_credentials](#input\_powervs\_custom\_image\_cos\_service\_credentials) | Service credentials for the Cloud Object Storage bucket containing the custom PowerVS images. The bucket must have HMAC credentials enabled. Click [here](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-service-credentials) for a json example of a service credential. | `string` | `null` | no |
+| [powervs\_custom\_images](#input\_powervs\_custom\_images) | Optionally import up to three custom images from Cloud Object Storage into PowerVS workspace. Requires 'powervs\_custom\_image\_cos\_configuration' to be set. image\_name: string, must be unique. Name of image inside PowerVS workspace. file\_name: string, object key of image inside COS bucket. storage\_tier: string, storage tier which image will be stored in after import. Supported values: tier0, tier1, tier3, tier5k. sap\_type: optional string, Supported values: Hana and Netweaver | object({
powervs_custom_image1 = object({
image_name = string
file_name = string
storage_tier = string
sap_type = optional(string)
}),
powervs_custom_image2 = object({
image_name = string
file_name = string
storage_tier = string
sap_type = optional(string)
})
}) | {
"powervs_custom_image1": {
"file_name": "",
"image_name": "",
"sap_type": "Hana",
"storage_tier": ""
},
"powervs_custom_image2": {
"file_name": "",
"image_name": "",
"sap_type": "Netweaver",
"storage_tier": ""
}
} | no |
+| [powervs\_default\_sap\_images](#input\_powervs\_default\_sap\_images) | Default Red Hat Linux Full Linux subscription images to use for PowerVS SAP HANA and SAP NetWeaver instances. If you're using a byol or a custom RHEL image, additionally specify the optional values for 'powervs\_os\_registration\_username', 'powervs\_os\_registration\_password' and 'ansible\_vault\_password' | object({
rhel_hana_image = string
rhel_nw_image = string
}) | {
"rhel_hana_image": "RHEL9-SP4-SAP",
"rhel_nw_image": "RHEL9-SP4-SAP-NETWEAVER"
} | no |
+| [powervs\_hana\_instance\_additional\_storage\_config](#input\_powervs\_hana\_instance\_additional\_storage\_config) | Additional File systems to be created and attached to PowerVS SAP HANA instance. 'size' is in GB. 'count' specify over how many storage volumes the file system will be striped. 'tier' specifies the storage tier in PowerVS workspace. 'mount' specifies the target mount point on OS. | list(object({
name = string
size = string
count = string
tier = string
mount = string
})) | [| no | +| [powervs\_hana\_instance\_custom\_storage\_config](#input\_powervs\_hana\_instance\_custom\_storage\_config) | Custom file systems to be created and attached to PowerVS SAP HANA instance. 'size' is in GB. 'count' specify over how many storage volumes the file system will be striped. 'tier' specifies the storage tier in PowerVS workspace. 'mount' specifies the target mount point on OS. If not specified, volumes for '/hana/data', '/hana/log', '/hana/shared' are automatically calculated and created. |
{
"count": "1",
"mount": "/usr/sap",
"name": "usrsap",
"size": "50",
"tier": "tier3"
}
]
list(object({
name = string
size = string
count = string
tier = string
mount = string
pool = optional(string)
})) | [| no | +| [powervs\_hana\_instance\_sap\_profile\_id](#input\_powervs\_hana\_instance\_sap\_profile\_id) | PowerVS SAP HANA instance profile to use. Must be one of the supported profiles. See [here](https://cloud.ibm.com/docs/sap?topic=sap-hana-iaas-offerings-profiles-power-vs). File system sizes are automatically calculated. Override automatic calculation by setting values in optional parameter 'powervs\_hana\_instance\_custom\_storage\_config'. | `string` | `"sh2-4x256"` | no | +| [powervs\_netweaver\_cpu\_number](#input\_powervs\_netweaver\_cpu\_number) | Number of CPUs for PowerVS SAP NetWeaver instance. | `string` | `"3"` | no | +| [powervs\_netweaver\_instance\_storage\_config](#input\_powervs\_netweaver\_instance\_storage\_config) | File systems to be created and attached to PowerVS SAP NetWeaver instance. 'size' is in GB. 'count' specifies over how many storage volumes the file system will be striped. 'tier' specifies the storage tier in PowerVS workspace. 'mount' specifies the target mount point on OS. |
{
"count": "",
"mount": "",
"name": "",
"size": "",
"tier": ""
}
]
list(object({
name = string
size = string
count = string
tier = string
mount = string
pool = optional(string)
})) | [| no | +| [powervs\_netweaver\_memory\_size](#input\_powervs\_netweaver\_memory\_size) | Memory size for PowerVS SAP NetWeaver instance. | `string` | `"32"` | no | +| [powervs\_os\_registration\_password](#input\_powervs\_os\_registration\_password) | If you're using a byol or a custom RHEL image for SAP HANA and Netweaver you need to provide your OS registration credentials here. Leave empty if you're using an IBM provided subscription (FLS). | `string` | `""` | no | +| [powervs\_os\_registration\_username](#input\_powervs\_os\_registration\_username) | If you're using a byol or a custom RHEL image for SAP HANA and Netweaver you need to provide your OS registration credentials here. Leave empty if you're using an IBM provided subscription (FLS). | `string` | `""` | no | +| [powervs\_resource\_group\_name](#input\_powervs\_resource\_group\_name) | Existing IBM Cloud resource group name. | `string` | n/a | yes | +| [powervs\_sap\_network\_cidr](#input\_powervs\_sap\_network\_cidr) | Network range for dedicated SAP network. Used for communication between SAP Application servers with SAP HANA Database. E.g., '10.51.0.0/24' | `string` | `"10.51.0.0/24"` | no | +| [powervs\_zone](#input\_powervs\_zone) | IBM Cloud data center location where IBM PowerVS infrastructure will be created. | `string` | n/a | yes | +| [prefix](#input\_prefix) | Unique prefix for resources to be created (e.g., SAP system name). Must be an alphanumeric string with maximum length of 8 characters. | `string` | n/a | yes | +| [sap\_domain](#input\_sap\_domain) | SAP network domain name. | `string` | `"sap.com"` | no | +| [sap\_hana\_master\_password](#input\_sap\_hana\_master\_password) | SAP HANA master password. | `string` | n/a | yes | +| [sap\_hana\_vars](#input\_sap\_hana\_vars) | SAP HANA SID and instance number. |
{
"count": "1",
"mount": "/usr/sap",
"name": "usrsap",
"size": "50",
"tier": "tier3"
}
]
object({
sap_hana_install_sid = string
sap_hana_install_number = string
}) | {
"sap_hana_install_number": "02",
"sap_hana_install_sid": "HDB"
} | no |
+| [sap\_monitoring\_vars](#input\_sap\_monitoring\_vars) | Configuration details for SAP monitoring dashboard. Takes effect only when a monitoring instance was deployed as part of Power Virtual Server with VPC landing zone deployment. If 'config\_override' is true, an existing configuration will be overwritten, 'sap\_monitoring\_nr' Two-digit incremental number starting with 01 up to 99. This is not a existing SAP ID, but a pure virtual number and 'sap\_monitoring\_solution\_name' is a virtual arbitrary short name to recognize SAP System. | object({
config_override = bool
sap_monitoring_nr = string
sap_monitoring_solution_name = string
}) | {
"config_override": false,
"sap_monitoring_nr": "01",
"sap_monitoring_solution_name": ""
} | no |
+| [sap\_solution](#input\_sap\_solution) | SAP Solution to be installed on Power Virtual Server. | `string` | n/a | yes |
+| [sap\_solution\_vars](#input\_sap\_solution\_vars) | SAP SID, ASCS and PAS instance numbers and service/protectedwebmethods parameters. | object({
sap_swpm_sid = string
sap_swpm_ascs_instance_nr = string
sap_swpm_pas_instance_nr = string
sap_swpm_service_protectedwebmethods = string
}) | {
"sap_swpm_ascs_instance_nr": "00",
"sap_swpm_pas_instance_nr": "01",
"sap_swpm_service_protectedwebmethods": "SDEFAULT -GetQueueStatistic -ABAPGetWPTable -EnqGetStatistic -GetProcessList -GetEnvironment -BAPGetSystemWPTable",
"sap_swpm_sid": "S4H"
} | no |
+| [sap\_swpm\_master\_password](#input\_sap\_swpm\_master\_password) | SAP SWPM master password. | `string` | n/a | yes |
+| [sm\_service\_plan](#input\_sm\_service\_plan) | The service/pricing plan to use when provisioning a new Secrets Manager instance. Allowed values: `standard` and `trial`. Only used if `existing_sm_instance_guid` is set to null. | `string` | `"standard"` | no |
+| [ssh\_private\_key](#input\_ssh\_private\_key) | Private SSH key (RSA format) used to login to IBM PowerVS instances. Should match to uploaded public SSH key referenced by 'ssh\_public\_key' which was created previously. The key is temporarily stored and deleted. For more information about SSH keys, see [SSH keys](https://cloud.ibm.com/docs/vpc?topic=vpc-ssh-keys). | `string` | n/a | yes |
+| [ssh\_public\_key](#input\_ssh\_public\_key) | Public SSH Key for VSI creation. Must be an RSA key with a key size of either 2048 bits or 4096 bits (recommended). Must be a valid SSH key that does not already exist in the deployment region. | `string` | n/a | yes |
+| [tags](#input\_tags) | List of tag names for the IBM Cloud resources created. | `list(string)` | `[]` | no |
+| [vpc\_intel\_images](#input\_vpc\_intel\_images) | Stock OS image names for creating VPC landing zone VSI instances: RHEL (management and network services) and SLES (monitoring). | object({
rhel_image = string
sles_image = string
}) | {
"rhel_image": "ibm-redhat-9-6-amd64-sap-applications-1",
"sles_image": "ibm-sles-15-7-amd64-sap-applications-1"
} | no |
+| [vpc\_subnet\_cidrs](#input\_vpc\_subnet\_cidrs) | CIDR values for the VPC subnets to be created. It's customer responsibility that none of the defined networks collide, including the PowerVS subnets and VPN client pool. | object({
vpn = string
mgmt = string
vpe = string
edge = string
}) | {
"edge": "10.30.40.0/24",
"mgmt": "10.30.20.0/24",
"vpe": "10.30.30.0/24",
"vpn": "10.30.10.0/24"
} | no |
+
+### Outputs
+
+| Name | Description |
+|------|-------------|
+| [access\_host\_or\_ip](#output\_access\_host\_or\_ip) | Public IP of Provided Bastion/JumpServer Host. |
+| [infrastructure\_data](#output\_infrastructure\_data) | PowerVS infrastructure details. |
+| [powervs\_hana\_instance\_ips](#output\_powervs\_hana\_instance\_ips) | All private IPS of HANA instance. |
+| [powervs\_hana\_instance\_management\_ip](#output\_powervs\_hana\_instance\_management\_ip) | Management IP of HANA Instance. |
+| [powervs\_lpars\_data](#output\_powervs\_lpars\_data) | All private IPS of PowerVS instances and Jump IP to access the host. |
+| [powervs\_netweaver\_instance\_ips](#output\_powervs\_netweaver\_instance\_ips) | All private IPs of NetWeaver instance. |
+| [powervs\_netweaver\_instance\_management\_ip](#output\_powervs\_netweaver\_instance\_management\_ip) | Management IP of NetWeaver instance. |
+| [sap\_hana\_vars](#output\_sap\_hana\_vars) | SAP HANA system details. |
+| [sap\_monitoring\_vars](#output\_sap\_monitoring\_vars) | SAP Monitoring Instance details. |
+| [sap\_solution\_vars](#output\_sap\_solution\_vars) | SAP NetWeaver system details. |
+
diff --git a/solutions/ibm-catalog/sap-s4hana-bw4hana/docs/s4hana23_bw4hana21_binaries.md b/solutions/ibm-catalog/sap-s4hana-bw4hana/docs/s4hana23_bw4hana21_binaries.md
new file mode 100644
index 00000000..f5aaf7b2
--- /dev/null
+++ b/solutions/ibm-catalog/sap-s4hana-bw4hana/docs/s4hana23_bw4hana21_binaries.md
@@ -0,0 +1,47 @@
+| SAP HANA rev78 Binaries |
+|-----------------------------------|
+| IMDB_AFL20_078_0-80002045.SAR |
+| IMDB_CLIENT20_020_23-80002095.SAR |
+| IMDB_LCAPPS_2078_0-80002183.SAR |
+| IMDB_SERVER20_078_0-80002046.SAR |
+| SAPCAR_1115-70006238.EXE |
+
+
+| S/4HANA 2023 Binaries |
+|-------------------------------------------------------------|
+| IMDB_CLIENT20_020_23-80002095.SAR |
+| KD75888.SAR (Required when using stack xml file) |
+| R3trans_85-70007832.SAR |
+| S4CORE108_INST_EXPORT_1.zip .. S4CORE108_INST_EXPORT_30.zip |
+| S4HANAOP108_ERP_LANG_EN.SAR |
+| SAPCAR_1115-70006238.EXE |
+| SAPEXEDB_51-70007831.SAR |
+| SAPEXE_51-70007832.SAR |
+| SAPHOSTAGENT64_64-80004831.SAR |
+| SUM20SP20_0-80002470.SAR |
+| SWPM20SP18_0-80003426.SAR |
+| igsexe_4-70005446.sar |
+| igshelper_17-10010245.sar |
+
+
+| BW/4HANA Binaries 2021 |
+|--------------------------------------------------------------|
+| BW4HANA300_INST_EXPORT_1.zip .. BW4HANA300_INST_EXPORT_8.zip |
+| IMDB_CLIENT20_015_19-80002095.SAR |
+| KD75685.SAR(Required when using stack xml file) |
+| BW4HANA300_NW_LANG_EN.SAR |
+| R3trans_121-70006667.SAR |
+| SAPCAR_1115-70006238.EXE |
+| SAPEXEDB_100-70006666.SAR |
+| SAPEXE_100-70006667.SAR |
+| SAPHOSTAGENT60_60-80004831.SAR |
+| SUM20SP17_1-80002470.SAR |
+| SWPM20SP15_1-80003426.SAR |
+| igsexe_3-70005446.sar |
+| igshelper_17-10010245.sar |
+
+
+| SAP x86_64 binaries for monitoring host|
+|-----------------------------------|
+| IMDB_CLIENT20_020_23-80002082.SAR |
+| SAPCAR_1300-70007716.EXE |
diff --git a/solutions/ibm-catalog/sap-s4hana-bw4hana/images.tf b/solutions/ibm-catalog/sap-s4hana-bw4hana/images.tf
new file mode 100644
index 00000000..e942057b
--- /dev/null
+++ b/solutions/ibm-catalog/sap-s4hana-bw4hana/images.tf
@@ -0,0 +1,56 @@
+###############################################################################
+# PowerVS Custom / Stock Image Logic
+###############################################################################
+
+locals {
+ # --------------------------------------------------------------------------
+ # Determine how many valid custom images exist
+ # --------------------------------------------------------------------------
+ custom_image_count = length([for _, img in module.standard.powervs_images : img if img.image_license_type == "byol"])
+ use_custom_images = local.custom_image_count > 0
+
+ # --------------------------------------------------------------------------
+ # Set image names
+ # --------------------------------------------------------------------------
+ selected_hana_image = local.use_custom_images ? (
+ length(trim(var.powervs_custom_images.powervs_custom_image1.image_name, " ")) > 0 ?
+ var.powervs_custom_images.powervs_custom_image1.image_name :
+ ""
+ ) : var.powervs_default_sap_images.rhel_hana_image
+
+ selected_netweaver_image = local.use_custom_images ? (
+ length(trim(var.powervs_custom_images.powervs_custom_image2.image_name, " ")) > 0 ?
+ var.powervs_custom_images.powervs_custom_image2.image_name :
+ var.powervs_custom_images.powervs_custom_image1.image_name
+ ) : var.powervs_default_sap_images.rhel_nw_image
+
+ fls_image_types = ["stock-sap-fls", "stock-sap-netweaver-fls"]
+ selected_hana_image_type = local.use_custom_images || strcontains(local.selected_hana_image, "BYOL") ? "byol" : "stock-sap-fls"
+ selected_netweaver_image_type = local.use_custom_images || strcontains(local.selected_netweaver_image, "BYOL") ? "byol" : "stock-sap-netweaver-fls"
+
+ # --------------------------------------------------------------------------
+ # FLS and BYOL logic
+ # --------------------------------------------------------------------------
+ hana_is_fls = contains(local.fls_image_types, local.selected_hana_image_type)
+ netweaver_is_fls = contains(local.fls_image_types, local.selected_netweaver_image_type)
+ images_mixed = local.hana_is_fls != local.netweaver_is_fls
+ use_fls = local.hana_is_fls && local.netweaver_is_fls
+ has_byol_creds = length(var.powervs_os_registration_username) > 0 && length(var.powervs_os_registration_password) > 0
+ byol_and_fls = local.use_fls && local.has_byol_creds
+ missing_byol_creds = !local.use_fls && !local.has_byol_creds
+
+ # --------------------------------------------------------------------------
+ # Validation messages
+ # --------------------------------------------------------------------------
+ images_mixed_msg = "You've selected an FLS image and a BYOL image for HANA and NetWeaver. Using BYOL on one and FLS on another is not supported."
+ # tflint-ignore: terraform_unused_declarations
+ validate_images_mixed = regex("^${local.images_mixed_msg}$", (local.images_mixed ? "" : local.images_mixed_msg))
+
+ missing_byol_msg = "Missing BYOL credentials for activation of Linux subscription."
+ # tflint-ignore: terraform_unused_declarations
+ validate_byol_provided = regex("^${local.missing_byol_msg}$", (local.missing_byol_creds ? "" : local.missing_byol_msg))
+
+ byol_and_fls_msg = "FLS images and user-provided Linux subscription detected. Can't use both at the same time."
+ # tflint-ignore: terraform_unused_declarations
+ validate_byol_and_fls = regex("^${local.byol_and_fls_msg}$", (local.byol_and_fls ? "" : local.byol_and_fls_msg))
+}
diff --git a/solutions/ibm-catalog/sap-s4hana-bw4hana/locals.tf b/solutions/ibm-catalog/sap-s4hana-bw4hana/locals.tf
new file mode 100644
index 00000000..04ba4b62
--- /dev/null
+++ b/solutions/ibm-catalog/sap-s4hana-bw4hana/locals.tf
@@ -0,0 +1,52 @@
+locals {
+ powervs_hana_instance = {
+ name = "hana"
+ image_id = local.selected_hana_image
+ sap_profile_id = var.powervs_hana_instance_sap_profile_id
+ additional_storage_config = var.powervs_hana_instance_additional_storage_config
+ }
+
+ powervs_netweaver_instance = {
+ instance_count = 1
+ name = "nw"
+ image_id = local.selected_netweaver_image
+ processors = var.powervs_netweaver_cpu_number
+ memory = var.powervs_netweaver_memory_size
+ proc_type = "shared"
+ storage_config = var.powervs_netweaver_instance_storage_config
+ }
+
+ powervs_instance_init_linux = {
+ enable = true
+ bastion_host_ip = module.standard.access_host_or_ip
+ ansible_host_or_ip = module.standard.ansible_host_or_ip
+ ssh_private_key = var.ssh_private_key
+ custom_os_registration = local.use_fls ? null : {
+ "username" : var.powervs_os_registration_username,
+ "password" : var.powervs_os_registration_password
+ }
+ }
+
+ powervs_network_services_config = {
+ squid = {
+ enable = true
+ squid_server_ip_port = module.standard.proxy_host_or_ip_port
+ no_proxy_hosts = "161.0.0.0/8,10.0.0.0/8"
+ }
+ nfs = {
+ enable = true
+ nfs_server_path = module.standard.nfs_host_or_ip_path
+ nfs_client_path = var.nfs_server_config.mount_path
+ opts = module.standard.network_services_config.nfs.opts
+ fstype = module.standard.network_services_config.nfs.fstype
+ }
+ dns = {
+ enable = true
+ dns_server_ip = module.standard.dns_host_or_ip
+ }
+ ntp = {
+ enable = module.standard.ntp_host_or_ip != "" ? true : false
+ ntp_server_ip = module.standard.ntp_host_or_ip
+ }
+ }
+}
diff --git a/solutions/ibm-catalog/sap-s4hana-bw4hana/main.tf b/solutions/ibm-catalog/sap-s4hana-bw4hana/main.tf
new file mode 100644
index 00000000..47ebe16d
--- /dev/null
+++ b/solutions/ibm-catalog/sap-s4hana-bw4hana/main.tf
@@ -0,0 +1,299 @@
+#######################################################
+# Power Virtual Server with VPC landing zone module
+# VPC landing zone
+# PowerVS Workspace
+#######################################################
+
+module "standard" {
+ source = "terraform-ibm-modules/powervs-infrastructure/ibm//modules/powervs-vpc-landing-zone"
+ version = "10.2.1"
+
+ providers = {
+ ibm.ibm-is = ibm.ibm-is
+ ibm.ibm-pi = ibm.ibm-pi
+ ibm.ibm-sm = ibm.ibm-sm
+ }
+
+ powervs_zone = var.powervs_zone
+ powervs_resource_group_name = var.powervs_resource_group_name
+ prefix = var.prefix
+ external_access_ip = var.external_access_ip
+ vpc_intel_images = var.vpc_intel_images
+ ssh_public_key = var.ssh_public_key
+ ssh_private_key = var.ssh_private_key
+ powervs_management_network = { name = "${var.prefix}-sap-net", cidr = var.powervs_sap_network_cidr }
+ powervs_backup_network = null
+ configure_dns_forwarder = true
+ configure_ntp_forwarder = true
+ configure_nfs_server = true
+ nfs_server_config = var.nfs_server_config
+ dns_forwarder_config = { "dns_servers" : "161.26.0.7; 161.26.0.8; 9.9.9.9;" }
+ tags = var.tags
+ powervs_custom_images = merge(var.powervs_custom_images, { powervs_custom_image3 = {
+ image_name = "",
+ file_name = "",
+ storage_tier = "",
+ sap_type = null
+ } })
+ powervs_custom_image_cos_configuration = var.powervs_custom_image_cos_configuration
+ powervs_custom_image_cos_service_credentials = var.powervs_custom_image_cos_service_credentials
+ client_to_site_vpn = var.client_to_site_vpn
+ sm_service_plan = var.sm_service_plan
+ existing_sm_instance_guid = var.existing_sm_instance_guid
+ existing_sm_instance_region = var.existing_sm_instance_region
+ enable_monitoring = var.enable_monitoring
+ enable_monitoring_host = var.enable_monitoring
+ enable_scc_wp = var.enable_scc_wp
+ ansible_vault_password = var.ansible_vault_password
+ vpc_subnet_cidrs = var.vpc_subnet_cidrs
+}
+
+######################################################
+# Deploy SAP S/4HANA or SAP BW/4HANA
+# 1 HANA instance
+# 1 NetWeaver Instance
+######################################################
+
+module "sap_system" {
+ source = "../../../modules/pi-sap-system-type1"
+ depends_on = [module.standard]
+
+ providers = { ibm = ibm.ibm-pi }
+
+ prefix = var.prefix
+ pi_workspace_guid = module.standard.powervs_workspace_guid
+ pi_region = var.powervs_zone
+ pi_ssh_public_key_name = module.standard.powervs_ssh_public_key.name
+ pi_networks = [module.standard.powervs_management_subnet]
+ pi_hana_instance = local.powervs_hana_instance
+ pi_hana_instance_custom_storage_config = var.powervs_hana_instance_custom_storage_config
+ pi_netweaver_instance = local.powervs_netweaver_instance
+ pi_instance_init_linux = local.powervs_instance_init_linux
+ sap_network_services_config = local.powervs_network_services_config
+ sap_domain = var.sap_domain
+ ansible_vault_password = var.ansible_vault_password
+}
+
+
+######################################################
+# COS Service credentials
+# Download HANA binaries and SAP Solution binaries
+# from IBM Cloud Object Storage(COS) to Ansible host
+# host NFS mount point
+######################################################
+
+locals {
+ cos_service_credentials = jsondecode(var.ibmcloud_cos_service_credentials)
+ cos_apikey = local.cos_service_credentials.apikey
+ cos_resource_instance_id = local.cos_service_credentials.resource_instance_id
+}
+
+locals {
+
+ ibmcloud_cos_hana_configuration = {
+ cos_apikey = local.cos_apikey
+ cos_region = var.ibmcloud_cos_configuration.cos_region
+ cos_resource_instance_id = local.cos_resource_instance_id
+ cos_bucket_name = var.ibmcloud_cos_configuration.cos_bucket_name
+ cos_dir_name = var.ibmcloud_cos_configuration.cos_hana_software_path
+ download_dir_path = local.powervs_network_services_config.nfs.nfs_client_path
+ }
+
+ ibmcloud_cos_solution_configuration = {
+ cos_apikey = local.cos_apikey
+ cos_region = var.ibmcloud_cos_configuration.cos_region
+ cos_resource_instance_id = local.cos_resource_instance_id
+ cos_bucket_name = var.ibmcloud_cos_configuration.cos_bucket_name
+ cos_dir_name = var.ibmcloud_cos_configuration.cos_solution_software_path
+ download_dir_path = local.powervs_network_services_config.nfs.nfs_client_path
+ }
+
+ ibmcloud_cos_monitoring_configuration = {
+ cos_apikey = local.cos_apikey
+ cos_region = var.ibmcloud_cos_configuration.cos_region
+ cos_resource_instance_id = local.cos_resource_instance_id
+ cos_bucket_name = var.ibmcloud_cos_configuration.cos_bucket_name
+ cos_dir_name = var.ibmcloud_cos_configuration.cos_monitoring_software_path
+ download_dir_path = local.powervs_network_services_config.nfs.nfs_client_path
+ }
+}
+
+module "ibmcloud_cos_download_hana_binaries" {
+ source = "../../../modules/ibmcloud-cos"
+ depends_on = [module.standard]
+
+ access_host_or_ip = module.standard.access_host_or_ip
+ target_server_ip = module.standard.ansible_host_or_ip
+ ssh_private_key = var.ssh_private_key
+ ibmcloud_cos_configuration = local.ibmcloud_cos_hana_configuration
+}
+
+module "ibmcloud_cos_download_netweaver_binaries" {
+ source = "../../../modules/ibmcloud-cos"
+ depends_on = [module.ibmcloud_cos_download_hana_binaries]
+
+ access_host_or_ip = module.standard.access_host_or_ip
+ target_server_ip = module.standard.ansible_host_or_ip
+ ssh_private_key = var.ssh_private_key
+ ibmcloud_cos_configuration = local.ibmcloud_cos_solution_configuration
+}
+
+locals {
+ monitoring_instance = module.standard.monitoring_instance
+}
+
+module "ibmcloud_cos_download_monitoring_binaries" {
+ source = "../../../modules/ibmcloud-cos"
+ depends_on = [module.ibmcloud_cos_download_netweaver_binaries]
+ count = local.monitoring_instance.enable ? 1 : 0
+
+ access_host_or_ip = module.standard.access_host_or_ip
+ target_server_ip = module.standard.ansible_host_or_ip
+ ssh_private_key = var.ssh_private_key
+ ibmcloud_cos_configuration = local.ibmcloud_cos_monitoring_configuration
+}
+
+
+#####################################################
+# Ansible Install HANA DB
+#####################################################
+
+locals {
+ ansible_sap_hana_playbook_vars = merge(var.sap_hana_vars,
+ {
+ sap_hana_install_software_directory = "${var.nfs_server_config.mount_path}/${var.ibmcloud_cos_configuration.cos_hana_software_path}",
+ sap_hana_install_master_password = var.sap_hana_master_password
+ }
+ )
+}
+
+module "ansible_sap_install_hana" {
+
+ source = "../../../modules/ansible"
+ depends_on = [module.ibmcloud_cos_download_hana_binaries, module.sap_system]
+
+ bastion_host_ip = module.standard.access_host_or_ip
+ ansible_host_or_ip = module.standard.ansible_host_or_ip
+ ssh_private_key = var.ssh_private_key
+ configure_ansible_host = false
+ ansible_vault_password = var.ansible_vault_password
+
+ src_script_template_name = "hanadb/install_hana.sh.tftpl"
+ dst_script_file_name = "${var.prefix}-${local.powervs_hana_instance.name}_install_hana.sh"
+
+ src_playbook_template_name = "hanadb/playbook-sap-hana-install.yml.tftpl"
+ dst_playbook_file_name = "${var.prefix}-${local.powervs_hana_instance.name}-playbook-sap-hana-install.yml"
+ playbook_template_vars = local.ansible_sap_hana_playbook_vars
+
+ src_inventory_template_name = "pi-instance-inventory.tftpl"
+ dst_inventory_file_name = "${var.prefix}-${local.powervs_hana_instance.name}-instance-inventory"
+ inventory_template_vars = { "pi_instance_management_ip" : module.sap_system.pi_hana_instance_management_ip }
+}
+
+####################################################
+# Ansible Install NetWeaver solution
+#####################################################
+
+locals {
+ product_catalog_map = {
+ "s4hana-2020" = "NW_ABAP_OneHost:S4HANA2020.CORE.HDB.ABAP"
+ "s4hana-2021" = "NW_ABAP_OneHost:S4HANA2021.CORE.HDB.ABAP"
+ "s4hana-2022" = "NW_ABAP_OneHost:S4HANA2022.CORE.HDB.ABAP"
+ "s4hana-2023" = "NW_ABAP_OneHost:S4HANA2023.CORE.HDB.ABAP"
+ "bw4hana-2021" = "NW_ABAP_OneHost:BW4HANA2021.CORE.HDB.ABAP"
+ }
+
+ ansible_sap_solution_playbook_vars = merge(var.sap_solution_vars,
+ {
+ sap_swpm_product_catalog_id = lookup(local.product_catalog_map, var.sap_solution, null)
+ sap_install_media_detect_directory = "${var.nfs_server_config.mount_path}/${var.ibmcloud_cos_configuration.cos_solution_software_path}"
+ sap_swpm_mp_stack_file_name = var.ibmcloud_cos_configuration.cos_swpm_mp_stack_file_name
+ sap_swpm_master_password = var.sap_swpm_master_password
+ sap_swpm_ascs_instance_hostname = "${var.prefix}-${local.powervs_netweaver_instance.name}-1"
+ sap_domain = var.sap_domain
+ sap_swpm_db_host = "${var.prefix}-${local.powervs_hana_instance.name}"
+ sap_swpm_db_ip = module.sap_system.pi_hana_instance_management_ip
+ sap_swpm_db_sid = var.sap_hana_vars.sap_hana_install_sid
+ sap_swpm_db_instance_nr = var.sap_hana_vars.sap_hana_install_number
+ sap_swpm_db_master_password = var.sap_hana_master_password
+ }
+ )
+}
+
+module "ansible_sap_install_solution" {
+
+ source = "../../../modules/ansible"
+ depends_on = [module.ibmcloud_cos_download_netweaver_binaries, module.ansible_sap_install_hana]
+
+ bastion_host_ip = module.standard.access_host_or_ip
+ ansible_host_or_ip = module.standard.ansible_host_or_ip
+ ssh_private_key = var.ssh_private_key
+ configure_ansible_host = false
+ ansible_vault_password = var.ansible_vault_password
+
+ src_script_template_name = "s4hanab4hana-solution/install_swpm.sh.tftpl"
+ dst_script_file_name = "${var.prefix}-${local.powervs_netweaver_instance.name}_install_swpm.sh"
+
+ src_playbook_template_name = "s4hanab4hana-solution/playbook-sap-swpm-install.yml.tftpl"
+ dst_playbook_file_name = "${var.prefix}-${local.powervs_netweaver_instance.name}-playbook-sap-swpm-install.yml"
+ playbook_template_vars = local.ansible_sap_solution_playbook_vars
+
+ src_inventory_template_name = "pi-instance-inventory.tftpl"
+ dst_inventory_file_name = "${var.prefix}-${local.powervs_netweaver_instance.name}-instance-inventory"
+ inventory_template_vars = { "pi_instance_management_ip" : module.sap_system.pi_netweaver_instance_management_ips }
+}
+
+####################################################
+# Ansible Install Monitoring SAP solution
+#####################################################
+
+locals {
+
+ ansible_monitoring_solution_playbook_vars = merge(var.sap_monitoring_vars,
+ {
+ sap_monitoring_action = "add"
+ sap_tools_directory = "${var.nfs_server_config.mount_path}/${var.ibmcloud_cos_configuration.cos_monitoring_software_path}"
+ sap_hana_ip = module.sap_system.pi_hana_instance_management_ip
+ sap_hana_http_port = "5${var.sap_hana_vars.sap_hana_install_number}13"
+ sap_hana_sql_systemdb_port = "3${var.sap_hana_vars.sap_hana_install_number}13"
+ sap_hana_sql_systemdb_user = "system"
+ sap_hana_sql_systemdb_password = var.sap_hana_master_password
+ sap_ascs_ip = module.sap_system.pi_netweaver_instance_management_ips
+ sap_ascs_http_port = "5${var.sap_solution_vars.sap_swpm_ascs_instance_nr}13"
+ sap_app_server = jsonencode([
+ {
+ sap_app_server_nr = "01"
+ ip = module.sap_system.pi_netweaver_instance_management_ips
+ port = "5${var.sap_solution_vars.sap_swpm_pas_instance_nr}13"
+ }]
+ )
+ ibmcloud_monitoring_instance_url = "https://ingest.prws.private.${local.monitoring_instance.location}.monitoring.cloud.ibm.com/prometheus/remote/write"
+ ibmcloud_monitoring_request_credential_url = "https://${local.monitoring_instance.location}.monitoring.cloud.ibm.com/api/token"
+ ibmcloud_monitoring_instance_guid = local.monitoring_instance.guid
+ }
+ )
+}
+
+
+module "ansible_monitoring_sap_install_solution" {
+ source = "../../../modules/ansible"
+ count = local.monitoring_instance.enable ? 1 : 0
+ depends_on = [module.ibmcloud_cos_download_monitoring_binaries, module.ansible_sap_install_hana, module.ansible_sap_install_solution]
+
+ bastion_host_ip = module.standard.access_host_or_ip
+ ansible_host_or_ip = module.standard.ansible_host_or_ip
+ ssh_private_key = var.ssh_private_key
+ ansible_vault_password = var.ansible_vault_password
+ configure_ansible_host = false
+ ibmcloud_api_key = var.ibmcloud_api_key
+
+ src_script_template_name = "configure-monitoring-sap/ansible_configure_monitoring.sh.tftpl"
+ dst_script_file_name = "${var.prefix}-configure_monitoring.sh"
+
+ src_playbook_template_name = "configure-monitoring-sap/playbook-configure-monitoring-sap.yml.tftpl"
+ dst_playbook_file_name = "${var.prefix}-playbook-configure-monitoring-sap.yml"
+ playbook_template_vars = local.ansible_monitoring_solution_playbook_vars
+ src_inventory_template_name = "monitoring-inventory.tftpl"
+ dst_inventory_file_name = "${var.prefix}-monitoring-instance-inventory"
+ inventory_template_vars = { "monitoring_host_ip" : local.monitoring_instance.monitoring_host_ip }
+}
diff --git a/solutions/ibm-catalog/sap-s4hana-bw4hana/outputs.tf b/solutions/ibm-catalog/sap-s4hana-bw4hana/outputs.tf
new file mode 100644
index 00000000..534ccfec
--- /dev/null
+++ b/solutions/ibm-catalog/sap-s4hana-bw4hana/outputs.tf
@@ -0,0 +1,49 @@
+output "infrastructure_data" {
+ description = "PowerVS infrastructure details."
+ value = { for k, v in module.standard : k => v }
+}
+
+output "access_host_or_ip" {
+ description = "Public IP of Provided Bastion/JumpServer Host."
+ value = module.standard.access_host_or_ip
+}
+
+output "powervs_hana_instance_ips" {
+ description = "All private IPS of HANA instance."
+ value = module.sap_system.pi_hana_instance_ips
+}
+
+output "powervs_hana_instance_management_ip" {
+ description = "Management IP of HANA Instance."
+ value = module.sap_system.pi_hana_instance_management_ip
+}
+
+output "powervs_netweaver_instance_ips" {
+ description = "All private IPs of NetWeaver instance."
+ value = module.sap_system.pi_netweaver_instance_ips
+}
+
+output "powervs_netweaver_instance_management_ip" {
+ description = "Management IP of NetWeaver instance."
+ value = module.sap_system.pi_netweaver_instance_management_ips
+}
+
+output "powervs_lpars_data" {
+ description = "All private IPS of PowerVS instances and Jump IP to access the host."
+ value = module.sap_system.pi_lpars_data
+}
+
+output "sap_hana_vars" {
+ description = "SAP HANA system details."
+ value = var.sap_hana_vars
+}
+
+output "sap_solution_vars" {
+ description = "SAP NetWeaver system details."
+ value = var.sap_solution_vars
+}
+
+output "sap_monitoring_vars" {
+ description = "SAP Monitoring Instance details."
+ value = merge(var.sap_monitoring_vars, module.standard.monitoring_instance)
+}
diff --git a/solutions/ibm-catalog/sap-s4hana-bw4hana/provider.tf b/solutions/ibm-catalog/sap-s4hana-bw4hana/provider.tf
new file mode 100644
index 00000000..4cfe25c0
--- /dev/null
+++ b/solutions/ibm-catalog/sap-s4hana-bw4hana/provider.tf
@@ -0,0 +1,83 @@
+locals {
+ ibm_powervs_zone_region_map = {
+ "syd04" = "syd"
+ "syd05" = "syd"
+ "sao01" = "sao"
+ "sao04" = "sao"
+ "tor01" = "tor"
+ "mon01" = "mon"
+ "eu-de-1" = "eu-de"
+ "eu-de-2" = "eu-de"
+ "mad02" = "mad"
+ "mad04" = "mad"
+ "lon04" = "lon"
+ "lon06" = "lon"
+ "osa21" = "osa"
+ "tok04" = "tok"
+ "us-south" = "us-south"
+ "dal10" = "us-south"
+ "dal12" = "us-south"
+ "dal14" = "us-south"
+ "us-east" = "us-east"
+ "wdc06" = "us-east"
+ "wdc07" = "us-east"
+ }
+
+ ibm_powervs_zone_cloud_region_map = {
+ "syd04" = "au-syd"
+ "syd05" = "au-syd"
+ "sao01" = "br-sao"
+ "sao04" = "br-sao"
+ "tor01" = "ca-tor"
+ "mon01" = "ca-tor"
+ "eu-de-1" = "eu-de"
+ "eu-de-2" = "eu-de"
+ "mad02" = "eu-es"
+ "mad04" = "eu-es"
+ "lon04" = "eu-gb"
+ "lon06" = "eu-gb"
+ "osa21" = "jp-osa"
+ "tok04" = "jp-tok"
+ "us-south" = "us-south"
+ "dal10" = "us-south"
+ "dal12" = "us-south"
+ "dal14" = "us-south"
+ "us-east" = "us-east"
+ "wdc06" = "us-east"
+ "wdc07" = "us-east"
+ }
+}
+
+# There are discrepancies between the region inputs on the powervs terraform resource, and the vpc ("is") resources
+provider "ibm" {
+ alias = "ibm-pi"
+ region = lookup(local.ibm_powervs_zone_region_map, var.powervs_zone, null)
+ zone = var.powervs_zone
+ ibmcloud_api_key = var.ibmcloud_api_key != null ? var.ibmcloud_api_key : null
+}
+
+provider "ibm" {
+ alias = "ibm-is"
+ region = lookup(local.ibm_powervs_zone_cloud_region_map, var.powervs_zone, null)
+ zone = var.powervs_zone
+ ibmcloud_api_key = var.ibmcloud_api_key != null ? var.ibmcloud_api_key : null
+}
+
+provider "ibm" {
+ alias = "ibm-sm"
+ region = lookup(local.ibm_powervs_zone_cloud_region_map, var.powervs_zone, null)
+ zone = var.powervs_zone
+ ibmcloud_api_key = var.ibmcloud_api_key != null ? var.ibmcloud_api_key : null
+}
+
+data "ibm_iam_auth_token" "auth_token" {
+ provider = ibm.ibm-is
+}
+
+provider "restapi" {
+ uri = "https://resource-controller.cloud.ibm.com"
+ headers = {
+ Authorization = data.ibm_iam_auth_token.auth_token.iam_access_token
+ }
+ write_returns_object = true
+}
diff --git a/solutions/ibm-catalog/sap-s4hana-bw4hana/variables.tf b/solutions/ibm-catalog/sap-s4hana-bw4hana/variables.tf
new file mode 100644
index 00000000..df19c71f
--- /dev/null
+++ b/solutions/ibm-catalog/sap-s4hana-bw4hana/variables.tf
@@ -0,0 +1,480 @@
+variable "ibmcloud_api_key" {
+ description = "IBM Cloud platform API key needed to deploy IAM enabled resources."
+ type = string
+ sensitive = true
+}
+
+variable "powervs_zone" {
+ description = "IBM Cloud data center location where IBM PowerVS infrastructure will be created."
+ type = string
+}
+
+variable "powervs_resource_group_name" {
+ description = "Existing IBM Cloud resource group name."
+ type = string
+}
+
+variable "prefix" {
+ description = "Unique prefix for resources to be created (e.g., SAP system name). Must be an alphanumeric string with maximum length of 8 characters."
+ type = string
+ validation {
+ condition = (
+ var.prefix != null &&
+ var.prefix != "" &&
+ length(var.prefix) <= 8 &&
+ can(regex("^[a-z0-9-]+$", var.prefix))
+ )
+ error_message = "Prefix must be up to 8 characters long and may include lowercase letters, numbers, and hyphens only."
+ }
+}
+
+variable "powervs_sap_network_cidr" {
+ description = "Network range for dedicated SAP network. Used for communication between SAP Application servers with SAP HANA Database. E.g., '10.51.0.0/24'"
+ type = string
+ default = "10.51.0.0/24"
+}
+
+variable "external_access_ip" {
+ description = "Specify the IP address or CIDR to login through SSH to the environment after deployment. Access to this environment will be allowed only from this IP address."
+ type = string
+}
+
+#####################################################
+# PowerVS HANA Instance parameters
+#####################################################
+
+variable "powervs_hana_instance_sap_profile_id" {
+ description = "PowerVS SAP HANA instance profile to use. Must be one of the supported profiles. See [here](https://cloud.ibm.com/docs/sap?topic=sap-hana-iaas-offerings-profiles-power-vs). File system sizes are automatically calculated. Override automatic calculation by setting values in optional parameter 'powervs_hana_instance_custom_storage_config'."
+ type = string
+ default = "sh2-4x256"
+}
+
+variable "powervs_hana_instance_custom_storage_config" {
+ description = "Custom file systems to be created and attached to PowerVS SAP HANA instance. 'size' is in GB. 'count' specify over how many storage volumes the file system will be striped. 'tier' specifies the storage tier in PowerVS workspace. 'mount' specifies the target mount point on OS. If not specified, volumes for '/hana/data', '/hana/log', '/hana/shared' are automatically calculated and created."
+ type = list(object({
+ name = string
+ size = string
+ count = string
+ tier = string
+ mount = string
+ pool = optional(string)
+ }))
+ default = [{
+ "name" : "",
+ "size" : "",
+ "count" : "",
+ "tier" : "",
+ "mount" : ""
+ }]
+}
+
+variable "powervs_hana_instance_additional_storage_config" {
+ description = "Additional File systems to be created and attached to PowerVS SAP HANA instance. 'size' is in GB. 'count' specify over how many storage volumes the file system will be striped. 'tier' specifies the storage tier in PowerVS workspace. 'mount' specifies the target mount point on OS."
+ type = list(object({
+ name = string
+ size = string
+ count = string
+ tier = string
+ mount = string
+ }))
+ default = [{
+ "name" : "usrsap",
+ "size" : "50",
+ "count" : "1",
+ "tier" : "tier3",
+ "mount" : "/usr/sap"
+
+ }]
+}
+
+#####################################################
+# PowerVS NetWeaver Instance parameters
+#####################################################
+
+variable "powervs_netweaver_cpu_number" {
+ description = "Number of CPUs for PowerVS SAP NetWeaver instance."
+ type = string
+ default = "3"
+}
+
+variable "powervs_netweaver_memory_size" {
+ description = "Memory size for PowerVS SAP NetWeaver instance."
+ type = string
+ default = "32"
+}
+
+variable "powervs_netweaver_instance_storage_config" {
+ description = "File systems to be created and attached to PowerVS SAP NetWeaver instance. 'size' is in GB. 'count' specifies over how many storage volumes the file system will be striped. 'tier' specifies the storage tier in PowerVS workspace. 'mount' specifies the target mount point on OS."
+ type = list(object({
+ name = string
+ size = string
+ count = string
+ tier = string
+ mount = string
+ pool = optional(string)
+ }))
+ default = [
+ {
+ "name" : "usrsap",
+ "size" : "50",
+ "count" : "1",
+ "tier" : "tier3",
+ "mount" : "/usr/sap"
+ }
+ ]
+}
+
+#####################################################
+# OS parameters
+#####################################################
+
+variable "ssh_public_key" {
+ description = "Public SSH Key for VSI creation. Must be an RSA key with a key size of either 2048 bits or 4096 bits (recommended). Must be a valid SSH key that does not already exist in the deployment region."
+ type = string
+}
+
+variable "ssh_private_key" {
+ description = "Private SSH key (RSA format) used to login to IBM PowerVS instances. Should match to uploaded public SSH key referenced by 'ssh_public_key' which was created previously. The key is temporarily stored and deleted. For more information about SSH keys, see [SSH keys](https://cloud.ibm.com/docs/vpc?topic=vpc-ssh-keys)."
+ type = string
+ sensitive = true
+}
+
+variable "sap_domain" {
+ description = "SAP network domain name."
+ type = string
+ default = "sap.com"
+}
+
+variable "nfs_server_config" {
+ description = "Configuration for the NFS server. 'size' is in GB, 'iops' is maximum input/output operation performance bandwidth per second, 'mount_path' defines the target mount point on os. Set 'configure_nfs_server' to false to ignore creating file storage share."
+ type = object({
+ size = number
+ iops = number
+ mount_path = string
+ })
+
+ default = {
+ "size" : 200,
+ "iops" : 600,
+ "mount_path" : "/nfs"
+ }
+}
+
+#####################################################
+# Parameters for Image
+#####################################################
+
+variable "vpc_intel_images" {
+ description = "Stock OS image names for creating VPC landing zone VSI instances: RHEL (management and network services) and SLES (monitoring)."
+ type = object({
+ rhel_image = string
+ sles_image = string
+ })
+ default = {
+ "rhel_image" : "ibm-redhat-9-6-amd64-sap-applications-1"
+ "sles_image" : "ibm-sles-15-7-amd64-sap-applications-1"
+ }
+}
+
+variable "powervs_default_sap_images" {
+ description = "Default Red Hat Linux Full Linux subscription images to use for PowerVS SAP HANA and SAP NetWeaver instances. If you're using a byol or a custom RHEL image, additionally specify the optional values for 'powervs_os_registration_username', 'powervs_os_registration_password' and 'ansible_vault_password'"
+ type = object({
+ rhel_hana_image = string
+ rhel_nw_image = string
+ })
+ default = {
+ "rhel_hana_image" : "RHEL9-SP4-SAP",
+ "rhel_nw_image" : "RHEL9-SP4-SAP-NETWEAVER"
+ }
+}
+
+variable "powervs_os_registration_username" {
+ description = "If you're using a byol or a custom RHEL image for SAP HANA and Netweaver you need to provide your OS registration credentials here. Leave empty if you're using an IBM provided subscription (FLS)."
+ type = string
+ default = ""
+}
+
+variable "powervs_os_registration_password" {
+ description = "If you're using a byol or a custom RHEL image for SAP HANA and Netweaver you need to provide your OS registration credentials here. Leave empty if you're using an IBM provided subscription (FLS)."
+ type = string
+ sensitive = true
+ default = ""
+}
+
+variable "powervs_custom_images" {
+ description = "Optionally import up to three custom images from Cloud Object Storage into PowerVS workspace. Requires 'powervs_custom_image_cos_configuration' to be set. image_name: string, must be unique. Name of image inside PowerVS workspace. file_name: string, object key of image inside COS bucket. storage_tier: string, storage tier which image will be stored in after import. Supported values: tier0, tier1, tier3, tier5k. sap_type: optional string, Supported values: Hana and Netweaver"
+ type = object({
+ powervs_custom_image1 = object({
+ image_name = string
+ file_name = string
+ storage_tier = string
+ sap_type = optional(string)
+ }),
+ powervs_custom_image2 = object({
+ image_name = string
+ file_name = string
+ storage_tier = string
+ sap_type = optional(string)
+ })
+ })
+
+ default = {
+ "powervs_custom_image1" : {
+ "image_name" : "",
+ "file_name" : "",
+ "storage_tier" : "",
+ "sap_type" : "Hana"
+ },
+ "powervs_custom_image2" : {
+ "image_name" : "",
+ "file_name" : "",
+ "storage_tier" : "",
+ "sap_type" : "Netweaver"
+ }
+ }
+}
+
+variable "powervs_custom_image_cos_configuration" {
+ description = "Cloud Object Storage bucket containing custom PowerVS images. bucket_name: string, name of the COS bucket. bucket_access: string, possible values: public, private (private requires powervs_custom_image_cos_service_credentials). bucket_region: string, COS bucket region"
+ type = object({
+ bucket_name = string
+ bucket_access = string
+ bucket_region = string
+ })
+ default = {
+ "bucket_name" : "",
+ "bucket_access" : "",
+ "bucket_region" : ""
+ }
+}
+
+variable "powervs_custom_image_cos_service_credentials" {
+ description = "Service credentials for the Cloud Object Storage bucket containing the custom PowerVS images. The bucket must have HMAC credentials enabled. Click [here](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-service-credentials) for a json example of a service credential."
+ type = string
+ sensitive = true
+ default = null
+}
+
+#####################################################
+# Parameters for SAP Installation
+#####################################################
+
+variable "sap_solution" {
+ description = "SAP Solution to be installed on Power Virtual Server."
+ type = string
+ validation {
+ condition = contains(["s4hana-2023", "s4hana-2022", "s4hana-2021", "s4hana-2020", "bw4hana-2021"], var.sap_solution) ? true : false
+ error_message = "Solution value has to be one of 's4hana-2023', 's4hana-2022', 's4hana-2021', 's4hana-2020', 'bw4hana-2021'"
+ }
+}
+
+variable "ibmcloud_cos_configuration" {
+ description = "Cloud Object Storage instance containing SAP installation files that will be downloaded to NFS share. 'cos_hana_software_path' must contain only binaries required for HANA DB installation. 'cos_solution_software_path' must contain only binaries required for S/4HANA or BW/4HANA installation and must not contain any IMDB files. 'cos_monitoring_software_path' is optional and must contain x86_64 SAPCAR and SAP HANA client binaries required for configuring monitoring instance. The binaries required for installation can be found [here](https://github.com/terraform-ibm-modules/terraform-ibm-powervs-sap/blob/main/solutions/ibm-catalog/sap-s4hana-bw4hana/docs/s4hana23_bw4hana21_binaries.md) If you have an optional stack xml file (maintenance planner), place it under the 'cos_solution_software_path' directory. Avoid inserting '/' at the beginning for 'cos_hana_software_path', 'cos_solution_software_path' and 'cos_monitoring_software_path'."
+ type = object({
+ cos_region = string
+ cos_bucket_name = string
+ cos_hana_software_path = string
+ cos_solution_software_path = string
+ cos_monitoring_software_path = optional(string)
+ cos_swpm_mp_stack_file_name = string
+ })
+ default = {
+ "cos_region" : "eu-geo",
+ "cos_bucket_name" : "powervs-automation",
+ "cos_hana_software_path" : "HANA_DB/rev87",
+ "cos_solution_software_path" : "S4HANA_2023",
+ "cos_monitoring_software_path" : "HANA_CLIENT/x86_64",
+ "cos_swpm_mp_stack_file_name" : ""
+ }
+}
+
+variable "ibmcloud_cos_service_credentials" {
+ description = "IBM Cloud Object Storage instance service credentials to access the bucket in the instance.[json example of service credential](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-service-credentials)"
+ type = string
+ sensitive = true
+}
+
+variable "sap_hana_master_password" {
+ description = "SAP HANA master password."
+ type = string
+ sensitive = true
+
+ validation {
+ condition = length(var.sap_hana_master_password) >= 8 && length(var.sap_hana_master_password) <= 30 && can(regex("[A-Z]", var.sap_hana_master_password)) && can(regex("[a-z]", var.sap_hana_master_password)) && can(regex("[0-9]", var.sap_hana_master_password)) && !can(regex("[\\\\\"]", var.sap_hana_master_password))
+ error_message = "The SAP HANA master password must be 8-30 characters long containing at least one lower character (a-z), one upper character (A-Z) and one digit (0-9), and must not include a backslash (\\) or double quote (\")."
+ }
+}
+
+variable "sap_hana_vars" {
+ description = "SAP HANA SID and instance number."
+ type = object({
+ sap_hana_install_sid = string
+ sap_hana_install_number = string
+ })
+ default = {
+ "sap_hana_install_sid" : "HDB",
+ "sap_hana_install_number" : "02"
+ }
+ validation {
+ condition = can(regex("^[A-Z][A-Z0-9]{2}$", var.sap_hana_vars.sap_hana_install_sid))
+ error_message = "The provided sap_hana_vars configuration is invalid. The sap_hana_install_sid value must consist of exactly three alphanumeric characters, all uppercase, and the first character must be a letter."
+ }
+ validation {
+ condition = can(regex("^[0-9]{2}$", var.sap_hana_vars.sap_hana_install_number))
+ error_message = "The sap_hana_install_number must be a numeric value between 00 and 99. For single-digit numbers, append a leading zero."
+ }
+ validation {
+ condition = length(distinct([
+ var.sap_hana_vars.sap_hana_install_number,
+ var.sap_solution_vars.sap_swpm_ascs_instance_nr,
+ var.sap_solution_vars.sap_swpm_pas_instance_nr
+ ])) == 3
+
+ error_message = "HANA (sap_hana_install_number), ASCS (sap_swpm_ascs_instance_nr), and PAS (sap_swpm_pas_instance_nr) instance numbers must not be the same."
+ }
+}
+
+variable "sap_swpm_master_password" {
+ description = "SAP SWPM master password."
+ type = string
+ sensitive = true
+ validation {
+ condition = length(var.sap_swpm_master_password) >= 8 && length(var.sap_swpm_master_password) <= 30 && can(regex("[A-Z]", var.sap_swpm_master_password)) && can(regex("[a-z]", var.sap_swpm_master_password)) && can(regex("[0-9]", var.sap_swpm_master_password)) && !can(regex("[\\\\\"]", var.sap_swpm_master_password))
+ error_message = "The SAP Software Provisioning Manager master password must be 8-30 characters long containing at least one lower character (a-z), one upper character (A-Z) and one digit (0-9), and must not include a backslash (\\) or double quote (\")."
+ }
+}
+
+variable "sap_solution_vars" {
+ description = "SAP SID, ASCS and PAS instance numbers and service/protectedwebmethods parameters."
+ type = object({
+ sap_swpm_sid = string
+ sap_swpm_ascs_instance_nr = string
+ sap_swpm_pas_instance_nr = string
+ sap_swpm_service_protectedwebmethods = string
+
+ })
+ default = {
+ "sap_swpm_sid" : "S4H",
+ "sap_swpm_ascs_instance_nr" : "00",
+ "sap_swpm_pas_instance_nr" : "01",
+ "sap_swpm_service_protectedwebmethods" : "SDEFAULT -GetQueueStatistic -ABAPGetWPTable -EnqGetStatistic -GetProcessList -GetEnvironment -BAPGetSystemWPTable"
+ }
+ validation {
+ condition = var.sap_solution_vars.sap_swpm_ascs_instance_nr != var.sap_solution_vars.sap_swpm_pas_instance_nr
+ error_message = "ASCS and PAS instance number must not be same"
+ }
+}
+
+#####################################################
+# Optional Parameters VPN and Secrets Manager
+#####################################################
+
+variable "client_to_site_vpn" {
+ description = "VPN configuration - the client ip pool and list of users email ids to access the environment. If enabled, then a Secret Manager instance is also provisioned with certificates generated. See optional parameters to reuse an existing Secrets manager instance."
+ type = object({
+ enable = bool
+ client_ip_pool = string
+ vpn_client_access_group_users = list(string)
+ })
+
+ default = {
+ "enable" : true,
+ "client_ip_pool" : "192.168.0.0/16",
+ "vpn_client_access_group_users" : []
+ }
+}
+
+variable "sm_service_plan" {
+ type = string
+ description = "The service/pricing plan to use when provisioning a new Secrets Manager instance. Allowed values: `standard` and `trial`. Only used if `existing_sm_instance_guid` is set to null."
+ default = "standard"
+}
+
+variable "existing_sm_instance_guid" {
+ type = string
+ description = "An existing Secrets Manager GUID. If not provided a new instance will be provisioned."
+ default = null
+}
+
+variable "existing_sm_instance_region" {
+ type = string
+ description = "Required if value is passed into `var.existing_sm_instance_guid`."
+ default = null
+
+}
+
+#####################################################
+# Parameters for Monitoring
+#####################################################
+
+variable "enable_monitoring" {
+ description = "Specify whether Monitoring will be enabled. This includes the creation of an IBM Cloud Monitoring Instance and an Intel Monitoring Instance to host the services."
+ type = bool
+}
+
+variable "sap_monitoring_vars" {
+ description = "Configuration details for SAP monitoring dashboard. Takes effect only when a monitoring instance was deployed as part of Power Virtual Server with VPC landing zone deployment. If 'config_override' is true, an existing configuration will be overwritten, 'sap_monitoring_nr' Two-digit incremental number starting with 01 up to 99. This is not a existing SAP ID, but a pure virtual number and 'sap_monitoring_solution_name' is a virtual arbitrary short name to recognize SAP System."
+ type = object({
+ config_override = bool
+ sap_monitoring_nr = string
+ sap_monitoring_solution_name = string
+ })
+ default = {
+ "config_override" : false,
+ "sap_monitoring_nr" : "01",
+ "sap_monitoring_solution_name" : ""
+ }
+ validation {
+ condition = (length(var.sap_monitoring_vars.sap_monitoring_nr) == 2 && tonumber(var.sap_monitoring_vars.sap_monitoring_nr) >= 0 && tonumber(var.sap_monitoring_vars.sap_monitoring_nr) <= 99) || var.sap_monitoring_vars.sap_monitoring_nr == ""
+ error_message = "sap_monitoring_nr should be a 2-digit number between 00 and 99. or empty"
+ }
+}
+
+#################################################
+# Parameters SCC Workload Protection
+#################################################
+
+variable "enable_scc_wp" {
+ description = "Set to true to enable SCC Workload Protection and install and configure the SCC Workload Protection agent on all VSIs and PowerVS instances in this deployment."
+ type = bool
+}
+
+#####################################################
+# Other Parameters
+#####################################################
+
+variable "ansible_vault_password" {
+ description = "Vault password to encrypt ansible playbooks that contain sensitive information. Required when SCC workload Protection is enabled. Password requirements: 15-100 characters and at least one uppercase letter, one lowercase letter, one number, and one special character. Allowed characters: A-Z, a-z, 0-9, !#$%&()*+-.:;<=>?@[]_{|}~."
+ type = string
+ sensitive = true
+ validation {
+ condition = length(var.ansible_vault_password) >= 0
+ error_message = "ansible_vault_password is required."
+ }
+}
+
+variable "tags" {
+ description = "List of tag names for the IBM Cloud resources created."
+ type = list(string)
+ default = []
+}
+
+#####################################################
+# Optional Parameters VPC subnets
+#####################################################
+
+variable "vpc_subnet_cidrs" {
+ description = "CIDR values for the VPC subnets to be created. It's customer responsibility that none of the defined networks collide, including the PowerVS subnets and VPN client pool."
+ type = object({
+ vpn = string
+ mgmt = string
+ vpe = string
+ edge = string
+ })
+ default = {
+ "vpn" = "10.30.10.0/24"
+ "mgmt" = "10.30.20.0/24"
+ "vpe" = "10.30.30.0/24"
+ "edge" = "10.30.40.0/24"
+ }
+}
diff --git a/solutions/ibm-catalog/sap-s4hana-bw4hana/version.tf b/solutions/ibm-catalog/sap-s4hana-bw4hana/version.tf
new file mode 100644
index 00000000..8173ec85
--- /dev/null
+++ b/solutions/ibm-catalog/sap-s4hana-bw4hana/version.tf
@@ -0,0 +1,17 @@
+#####################################################
+# PowerVs SAP Instance Module
+#####################################################
+
+terraform {
+ required_version = ">= 1.9.0"
+ required_providers {
+ ibm = {
+ source = "IBM-Cloud/ibm"
+ version = "1.84.1"
+ }
+ restapi = {
+ source = "Mastercard/restapi"
+ version = "2.0.1"
+ }
+ }
+}
diff --git a/tests/pr_test.go b/tests/pr_test.go
index 5b31006b..769c419e 100644
--- a/tests/pr_test.go
+++ b/tests/pr_test.go
@@ -2,6 +2,7 @@
package test
import (
+ "log"
"os"
"strings"
"testing"
@@ -9,6 +10,7 @@ import (
"github.com/gruntwork-io/terratest/modules/ssh"
"github.com/stretchr/testify/assert"
"github.com/terraform-ibm-modules/ibmcloud-terratest-wrapper/cloudinfo"
+ "github.com/terraform-ibm-modules/ibmcloud-terratest-wrapper/common"
"github.com/terraform-ibm-modules/ibmcloud-terratest-wrapper/testhelper"
)
@@ -16,6 +18,11 @@ import (
const resourceGroup = "geretain-test-resources"
const defaultExampleTerraformDir = "solutions/ibm-catalog/sap-ready-to-go"
+// Define a struct with fields that match the structure of the YAML data
+const yamlLocation = "../common-dev-assets/common-go-assets/common-permanent-resources.yaml"
+
+var permanentResources map[string]interface{}
+
var sharedInfoSvc *cloudinfo.CloudInfoService
// TestMain will be run before any parallel tests, used to set up a shared InfoService object to track region usage
@@ -24,6 +31,12 @@ var sharedInfoSvc *cloudinfo.CloudInfoService
func TestMain(m *testing.M) {
sharedInfoSvc, _ = cloudinfo.NewCloudInfoServiceFromEnv("TF_VAR_ibmcloud_api_key", cloudinfo.CloudInfoServiceOptions{})
+ var err error
+ permanentResources, err = common.LoadMapFromYaml(yamlLocation)
+ if err != nil {
+ log.Fatal(err)
+ }
+
// creating ssh keys
tSsh := new(testing.T)
rsaKeyPair, _ := ssh.GenerateRSAKeyPairE(tSsh, 4096)
@@ -60,6 +73,8 @@ func setupOptions(t *testing.T, prefix string, powervs_zone string) *testhelper.
"powervs_resource_group_name": options.ResourceGroup,
"external_access_ip": "0.0.0.0/0",
"os_image_distro": "SLES",
+ "existing_sm_instance_guid": permanentResources["secretsManagerGuid"],
+ "existing_sm_instance_region": permanentResources["secretsManagerRegion"],
"enable_monitoring": false,
"enable_scc_wp": true,
"ansible_vault_password": "SecurePassw0rd!",