200 Commits

Author SHA1 Message Date
Manuel Romero
8c5650f334 revert 2022-10-05 16:01:16 +02:00
Manuel Romero
7d957013ba revert 2022-10-05 15:09:47 +02:00
Manuel Romero
30ccc0e79a winrm insecure 2022-10-05 14:55:38 +02:00
Manuel Romero
bfb865cf1d conditional wincommon 2022-10-05 14:43:43 +02:00
Manuel Romero
3507ef2470 conditional wincommon 2022-10-05 14:37:56 +02:00
Manuel Romero
19c009546f conditional wincommon 2022-10-05 14:07:04 +02:00
Manuel Romero
1497221318 install repl comp 2022-10-05 12:36:55 +02:00
Manuel Romero
76d2e6f1da install repl comp 2022-10-05 11:33:45 +02:00
Manuel Romero
9d6748d352 fromsnap 2022-10-05 11:05:49 +02:00
Manuel Romero
40f2344e34 fromsnap 2022-10-05 11:03:37 +02:00
Manuel Romero
9d642599ba fromsnap 2022-10-05 10:59:31 +02:00
Manuel Romero
332eeaf884 alerting 2022-10-05 10:57:04 +02:00
Manuel Romero
fda20a7312 alerting 2022-10-05 10:39:23 +02:00
Manuel Romero
1b02ad1d0d alerting 2022-10-05 10:32:06 +02:00
Manuel Romero
b697607c88 bricks) 2022-10-05 10:14:34 +02:00
Manuel Romero
f4ba3d95c1 redshift 2022-10-05 10:08:25 +02:00
Manuel Romero
9553c7de64 redshoft 2022-10-05 09:58:08 +02:00
Manuel Romero
e88277bc75 synap 2022-10-05 09:51:48 +02:00
Manuel Romero
fbabeb35e0 synap 2022-10-05 09:48:20 +02:00
Manuel Romero
c17c01eda3 awsrds 2022-10-05 09:38:23 +02:00
Manuel Romero
e41f783169 azrds 2022-10-05 09:36:15 +02:00
Manuel Romero
e3272d6568 awsrds 2022-10-05 09:32:50 +02:00
Manuel Romero
c3ae2f11da database 2022-10-05 04:59:51 +02:00
Manuel Romero
6e802d294b dbs 2022-10-05 04:56:20 +02:00
Manuel Romero
ce4bffa4ca qv 2022-10-05 04:52:39 +02:00
Manuel Romero
855575a84f wn-bl 2022-10-05 04:30:59 +02:00
Manuel Romero
87c0e9c5d6 qdc 2022-10-05 04:22:52 +02:00
Manuel Romero
daabb30341 qdc 2022-10-05 04:19:24 +02:00
Manuel Romero
9532239240 qdc 2022-10-05 04:16:17 +02:00
Manuel Romero
1716e2fb29 qdc 2022-10-05 04:12:01 +02:00
Manuel Romero
da1db39acc qdc 2022-10-05 04:09:55 +02:00
Manuel Romero
74154351ee qs 2022-10-05 04:06:12 +02:00
Manuel Romero
837bea5722 qs 2022-10-05 04:05:26 +02:00
Manuel Romero
25c2bdde85 qs 2022-10-05 04:01:44 +02:00
Manuel Romero
e562151517 qs 2022-10-05 03:48:29 +02:00
Manuel Romero
97cb7d71a2 qs 2022-10-05 03:46:01 +02:00
Manuel Romero
e5621a7b5c qs 2022-10-05 03:36:52 +02:00
Manuel Romero
3db03c4ee7 execs out of 2022-10-04 17:39:01 +02:00
Manuel Romero
364e648c4b execs out of 2022-10-04 17:29:01 +02:00
Manuel Romero
fca1cdafd1 execs out of 2022-10-04 17:25:46 +02:00
Manuel Romero
306edce019 execs out of 2022-10-04 17:14:45 +02:00
Manuel Romero
b34555e5bf nonesensitive 2022-10-04 17:06:10 +02:00
Manuel Romero
e9ca65f03f linux-common home folder 2022-10-04 16:55:28 +02:00
Manuel Romero
403231a3c2 linux-common home folder 2022-10-04 16:53:05 +02:00
Manuel Romero
2d55d3e414 linux-common home folder 2022-10-04 16:52:02 +02:00
Manuel Romero
638a5b43d5 sensitive 2022-10-04 16:45:26 +02:00
Manuel Romero
1e024c7993 sensitive 2022-10-04 16:29:41 +02:00
Manuel Romero
007f95a4c3 tags 2022-10-04 14:44:44 +02:00
Manuel Romero
6563cbca2d tags 2022-10-04 14:42:07 +02:00
Manuel Romero
92ea2ee599 redshift tag name 2022-10-04 14:38:05 +02:00
Manuel Romero
43481a04e2 kinessis Project tag 2022-10-04 14:35:36 +02:00
Manuel Romero
320f73f98b kinessis Project tag 2022-10-04 14:25:48 +02:00
Manuel Romero
1cbb97796b fix resize, doing it asjob 2022-10-04 13:51:00 +02:00
Manuel Romero
a47fd5a20e redshift no provider 2022-09-29 12:23:42 +02:00
Manuel Romero
564feba2b5 kinesis no provider 2022-09-29 12:18:24 +02:00
Manuel Romero
7e8237d089 no provider 2022-09-29 12:10:04 +02:00
Manuel Romero
a35bc7a563 remove enabled var 2022-09-29 12:03:37 +02:00
Manuel Romero
4ab2153f19 remove enabled var 2022-09-29 11:58:11 +02:00
Manuel Romero
121dd4ad4f passing provider 2022-09-29 11:34:45 +02:00
Manuel Romero
e3492ccbe1 delete archived 2022-09-26 09:59:10 +02:00
Manuel Romero
c171430424 password 2022-09-23 15:59:57 +02:00
Manuel Romero
f86e14bafa comeon 2022-09-23 13:35:12 +02:00
Manuel Romero
fc8442b156 More basic 2022-09-23 13:23:20 +02:00
Manuel Romero
781c3b7599 More basic 2022-09-23 13:23:04 +02:00
Manuel Romero
d86602aca0 Executions logs 2022-09-23 12:25:39 +02:00
Manuel Romero
c17b27a989 raw qdc 2022-09-23 11:12:42 +02:00
Manuel Romero
fd7055b87e fix 2022-09-22 17:38:25 +02:00
Manuel Romero
33d65569c7 back to normal 2022-09-22 17:28:51 +02:00
Manuel Romero
4832d5ad9b fix 2022-09-22 17:21:19 +02:00
Manuel Romero
20454340ce back to normal 2022-09-22 17:08:42 +02:00
Manuel Romero
28ba162595 fix 2022-09-22 16:58:33 +02:00
Manuel Romero
34d8165feb fix 2022-09-22 16:46:29 +02:00
Manuel Romero
4eb0ce7131 fix 2022-09-22 16:20:37 +02:00
Manuel Romero
ed73767d68 back to normal 2022-09-22 15:55:22 +02:00
Manuel Romero
9a1454a710 dev 2022-09-22 12:32:06 +02:00
Manuel Romero
56889333d3 setenv.sh 2022-09-22 12:24:46 +02:00
Manuel Romero
3dbd31db69 password postgres 2022-09-22 11:09:51 +02:00
Manuel Romero
1530c3a13d Jars and stuff 2022-09-21 16:41:05 +02:00
Manuel Romero
67d9310a5f Fix csv copy 2022-09-21 16:32:24 +02:00
Manuel Romero
e63b320745 Some fixes on libraries 2022-09-21 15:49:36 +02:00
Manuel Romero
82aa02642c Fixes and new jars 2022-09-21 15:42:55 +02:00
Manuel Romero
1a0990ab07 fix 2022-09-21 15:19:08 +02:00
Manuel Romero
7e4cb57570 fix 2022-09-21 15:05:56 +02:00
Manuel Romero
ab13cc61b2 fix 2022-09-21 14:42:14 +02:00
Manuel Romero
121441fbde no logs 2022-09-21 14:28:50 +02:00
Manuel Romero
f9e05f832d fix3 2022-09-21 14:12:00 +02:00
Manuel Romero
06bd553bbe fix2 2022-09-21 14:07:43 +02:00
Manuel Romero
4d45de5a9a fix 2022-09-21 14:04:10 +02:00
Manuel Romero
a116a398bd Connection string for QDC podium dist 2022-09-21 13:28:30 +02:00
Manuel Romero
161c8c250a using postgres password 2022-09-20 17:16:59 +02:00
Manuel Romero
55fa5a3a13 Change postgres password 2022-09-20 17:10:16 +02:00
Manuel Romero
a016fe4069 using just feb2022 2022-09-20 16:51:05 +02:00
Manuel Romero
5d8caa948d back to old passwd 2022-09-20 16:31:02 +02:00
Manuel Romero
0935315dbf back to old passwd 2022-09-20 16:30:42 +02:00
Manuel Romero
0c03e43f34 fix 2022-09-20 16:19:28 +02:00
Manuel Romero
9113836f1f fix datascripts 2022-09-20 16:00:49 +02:00
Manuel Romero
16956d8e22 Using password for mysql 2022-09-20 15:43:57 +02:00
Manuel Romero
07b824df61 fix falcon centos 2022-09-20 12:21:40 +02:00
Manuel Romero
0cf9c11da9 fix falcon centos 2022-09-20 12:21:15 +02:00
Manuel Romero
685085165b centos 8 falcon 2022-09-20 12:12:43 +02:00
Manuel Romero
43ac9058c3 vm centos with versions 2022-09-20 11:44:27 +02:00
Manuel Romero
f5bcc2d34a sa impl contiuation 2022-09-20 11:30:39 +02:00
Manuel Romero
60759b72b1 start service 2022-09-20 11:12:06 +02:00
Manuel Romero
9fb6d6c387 Tenable linuz 2022-09-20 09:53:30 +02:00
Manuel Romero
95bb012dfd enable tenable 2022-09-19 15:15:37 +02:00
Manuel Romero
87062aee0a fix 2022-09-19 15:14:40 +02:00
Manuel Romero
15ddd1f60f Install tenable 2022-09-19 13:32:34 +02:00
Manuel Romero
72fc17210b Merge branch 'master' of gitlab.com:qmi/qmi-cloud-tf-modules 2022-08-09 09:23:59 +02:00
Manuel Romero
12831518c0 adding nobest to yum 2022-08-09 09:23:47 +02:00
Vincenzo
e2926ea3e9 Added Oracle Linux 81 2022-08-08 20:52:56 +02:00
Vincenzo
0633464e02 Add CentOs 8.4 2022-08-08 17:19:37 +02:00
Vincenzo
525b315de3 Add CentOs 8.4 2022-08-08 17:15:22 +02:00
Vincenzo
6b45debc92 Add CentOs 8.5 2022-08-08 16:51:43 +02:00
Vincenzo
ccaba79395 Added CentoOs8.5 2022-08-08 16:31:32 +02:00
Vincenzo
30ce58ef9b Added CentoOs8.5 2022-08-08 16:30:49 +02:00
Manuel Romero
305ab66625 Added singapore QCS fo synapse 2022-07-26 11:14:49 +02:00
Manuel Romero
917ddaf0ab fix dbricks 2022-06-23 10:20:48 +02:00
Manuel Romero
972a3353cc remove old azuresql 2022-06-21 16:20:08 +02:00
Manuel Romero
dd7768902f conf for postgres cdc 2022-06-21 16:15:58 +02:00
Manuel Romero
68b7d33536 log_statement all 2022-06-21 16:06:14 +02:00
Manuel Romero
ec555d0f5b renamed 2022-06-21 15:48:22 +02:00
Manuel Romero
642b4c980c mssql 2022-06-21 15:40:48 +02:00
Manuel Romero
012984fe82 mssql 2022-06-21 15:35:17 +02:00
Manuel Romero
e46bbbee3f postgres flex 2022-06-21 15:23:45 +02:00
Manuel Romero
6f3ce45da8 postgres flex 2022-06-21 15:19:18 +02:00
Manuel Romero
774f20260a adding min numeric 2022-06-21 13:21:00 +02:00
Manuel Romero
a0f2946d12 adding min numeric 2022-06-21 13:16:24 +02:00
Manuel Romero
c05e4c2bc7 do not install onedrive 2022-06-21 13:06:00 +02:00
Manuel Romero
b44abe8e29 full bin log 2022-06-20 17:07:05 +02:00
Manuel Romero
258a09ad40 full bin log 2022-06-20 16:46:33 +02:00
Manuel Romero
e1acdeaaff postgres fix 2022-06-20 16:37:21 +02:00
Manuel Romero
e1e5b47a5f fix 2022-06-20 16:28:02 +02:00
Manuel Romero
e985eb449b fix 2022-06-20 16:24:31 +02:00
Manuel Romero
fb25b595c3 fix 2022-06-20 15:48:00 +02:00
Manuel Romero
9eff8f08c0 fix 2022-06-20 15:16:34 +02:00
Manuel Romero
90b9dcc23e fix 2022-06-20 15:09:06 +02:00
Manuel Romero
3ef7bd75e5 fix 2022-06-20 15:07:19 +02:00
Manuel Romero
3a3d854cc4 flex az mysql 2022-06-20 14:59:22 +02:00
Manuel Romero
4361d9fc37 webconnectors fix 2022-06-08 13:34:13 +02:00
Manuel Romero
4a491668de fix 2022-06-08 10:26:13 +02:00
Manuel Romero
4112e41617 fix 2022-06-08 10:23:32 +02:00
Manuel Romero
3f712b9b17 fix 2022-06-08 10:22:31 +02:00
Manuel Romero
c401881070 adding try catch 2022-06-08 10:16:40 +02:00
Manuel Romero
fd8cc875fc adding try catch 2022-06-08 10:15:43 +02:00
Manuel Romero
8590c53c2e adding try catch 2022-06-08 10:14:56 +02:00
Manuel Romero
3e72c1c5e4 adding try catch 2022-06-08 10:06:22 +02:00
Manuel Romero
31ef78621c V2 for compose Windows 10 Pro 2022-06-08 09:21:28 +02:00
Manuel Romero
459bf82e15 test 2022-06-07 17:23:27 +02:00
Manuel Romero
e695ef5dc1 V2 2022-06-07 17:03:05 +02:00
Manuel Romero
089db45c15 win2 2022-06-07 16:07:46 +02:00
Manuel Romero
1575c07c97 runWinCommon variables 2022-06-07 12:50:59 +02:00
Manuel Romero
a9c13f3fed runWinCommon variables 2022-06-07 12:33:32 +02:00
Manuel Romero
8b707cdb66 runWinCommon variables 2022-06-07 12:15:03 +02:00
Manuel Romero
efa7ec59d7 fix 2022-05-31 15:32:28 +02:00
Manuel Romero
68f016e00d fix redshift 2022-05-31 10:20:36 +02:00
Manuel Romero
5cb1157069 fortvirtualhost 2022-05-31 10:02:02 +02:00
Manuel Romero
6fe1bbf034 uppercase fort prefix 2022-05-23 13:01:37 +02:00
Manuel Romero
5d0347dc8e fix 2022-05-20 11:26:23 +02:00
Manuel Romero
01d72e3033 remove no needed variables 2022-05-20 11:15:05 +02:00
Manuel Romero
5cebc24cdd kinesis and redshoft using module aws creds 2022-05-20 10:54:13 +02:00
Manuel Romero
de4ad7b679 s3 bucket using module credentials 2022-05-20 10:50:58 +02:00
Manuel Romero
f876098fd5 using module aws creds 2022-05-20 10:45:34 +02:00
Manuel Romero
a2c2a6bb86 using module aws creds 2022-05-20 10:44:23 +02:00
Manuel Romero
7f2485e5c1 using module aws creds 2022-05-20 10:43:34 +02:00
Manuel Romero
0d8c792e9f change name 2022-05-18 12:57:50 +02:00
Manuel Romero
ba78baf7da Ubuntu 20.04 2022-05-18 12:48:38 +02:00
Manuel Romero
d226082c8d ubuntu 20.04 2022-05-18 12:39:37 +02:00
Manuel Romero
3a80543097 lowercase fort prefix 2022-05-13 14:58:14 +02:00
Manuel Romero
112ca59a48 Chrome as default 2022-05-11 12:33:00 +02:00
Manuel Romero
e815fe15c0 install chrome first 2022-05-11 11:50:15 +02:00
Manuel Romero
5a1344fb8e using image 2022-05-11 11:29:08 +02:00
Manuel Romero
b839bae693 google chrome install ignore checksum 2022-05-11 11:24:00 +02:00
Manuel Romero
1dec0dced4 added unattended winrm 2022-05-11 11:15:47 +02:00
Manuel Romero
d8bf486a30 unattended 2022-05-11 11:04:26 +02:00
Manuel Romero
1a034fdd29 vm-win2 2022-05-11 10:41:10 +02:00
Manuel Romero
da261ce43f revert 2022-05-11 10:31:27 +02:00
Manuel Romero
b60a06afb6 disable windows updates 2022-05-11 10:24:51 +02:00
Manuel Romero
87e241bea2 enable ssh for forts 2022-05-03 13:25:02 +02:00
Manuel Romero
9c1a8f4203 fix 2022-05-03 12:46:40 +02:00
Manuel Romero
14e8b134d2 backslash 2022-05-03 12:14:00 +02:00
Manuel Romero
8820405b16 Update Webconnectors 2022-05-03 10:42:45 +02:00
Manuel Romero
4c8eb2d682 removed archived 2022-05-03 10:36:05 +02:00
Manuel Romero
ef72aac27d Fix 2022-05-03 10:34:39 +02:00
Manuel Romero
8be11ee087 Adding secure vms 2022-05-03 10:26:42 +02:00
Manuel Romero
2ee07d8df6 remove old qppgw files 2022-05-03 10:17:57 +02:00
Manuel Romero
4379d54f03 Adding win-commong to win from snapshot 2022-04-28 15:32:51 +02:00
Manuel Romero
1d4cca8d70 Adding win-commong to win from snapshot 2022-04-28 15:29:10 +02:00
Manuel Romero
0a3c94800e install crowdstrike sensor 2022-04-28 15:21:43 +02:00
Manuel Romero
f71f479c6a install crowdstrike sensor 2022-04-28 15:12:08 +02:00
Manuel Romero
2987feb750 uninstall carbon black 2022-04-28 14:48:18 +02:00
Manuel Romero
058122c10e uninstall carbon black 2022-04-28 14:13:07 +02:00
Manuel Romero
7d8676885a disable 920270 920271 manage policies for NP 2022-04-28 12:23:57 +02:00
Manuel Romero
a0f6a81fb4 fix tomcat home 2022-04-28 11:27:22 +02:00
Manuel Romero
8c2a4481ee fix 4.13.0 2022-04-28 11:25:39 +02:00
Manuel Romero
80819e10c0 fix 4.13.0 2022-04-28 11:25:10 +02:00
Manuel Romero
f8fc2b06b5 fix 2022-04-28 11:00:25 +02:00
Manuel Romero
2d09ea84dc fix 2022-04-28 10:59:10 +02:00
Manuel Romero
8221c18302 remove no needed stuff 2022-04-28 10:54:05 +02:00
Manuel Romero
3a07cc55f3 fixes 2022-04-28 10:43:38 +02:00
Manuel Romero
df7877c42c feb22 files 2022-04-28 09:59:05 +02:00
207 changed files with 22077 additions and 30328 deletions

View File

@@ -1,444 +0,0 @@
locals {
appgw_hostname = "${var.appgw_hostname}.${var.domain}"
appgw_name = "qmi-appgw-qdc-qs"
# Qlik Sense
backend_address_pool_qs = "${var.appgw_hostname}-qs-bp"
http_setting_name_443 = "${var.appgw_hostname}-http-setting"
listener_name_http = "${var.appgw_hostname}-http"
listener_name_https = "${var.appgw_hostname}-https"
qs_probe_name = "${var.appgw_hostname}-probe"
request_routing_rule_https = "${var.appgw_hostname}-https-rule"
request_routing_rule_http = "${var.appgw_hostname}-http-rule"
redirect_configuration_80 = "${var.appgw_hostname}-80redirect"
# NPrinting
http_setting_name_4993 = "${var.appgw_hostname}-4993-setting"
http_setting_name_4994 = "${var.appgw_hostname}-4994-setting"
listener_name_4993 = "${var.appgw_hostname}-4993"
listener_name_4994 = "${var.appgw_hostname}-4994"
request_routing_rule_4993 = "${var.appgw_hostname}-4993-rule"
request_routing_rule_4994 = "${var.appgw_hostname}-4994-rule"
# QIB
http_setting_name_4435 = "${var.appgw_hostname}-4435-setting"
qs_probe_name_4435 = "${var.appgw_hostname}-probe-4435"
listener_name_4435 = "${var.appgw_hostname}-4435"
request_routing_rule_4435 = "${var.appgw_hostname}-4435-rule"
# QDC
backend_address_pool_qdc = "${var.appgw_hostname}-qdc-bp"
http_setting_name_8443 = "${var.appgw_hostname}-8443-setting"
qdc_probe_name = "${var.appgw_hostname}-qdcprobe"
listener_name_8080 = "${var.appgw_hostname}-8080"
listener_name_8443 = "${var.appgw_hostname}-8443"
request_routing_rule_8443 = "${var.appgw_hostname}-8443-rule"
request_routing_rule_8080 = "${var.appgw_hostname}-8080-rule"
redirect_configuration_8080 = "${var.appgw_hostname}-8080redirect"
}
data "azurerm_key_vault_secret" "cert-password" {
name = "star-qmi-qlikpoc-com-password"
key_vault_id = var.key_vault_id
}
data "azurerm_key_vault_secret" "cert-data" {
name = "star-qmi-qlikpoc-com-data"
key_vault_id = var.key_vault_id
}
resource "azurerm_public_ip" "appgw-ip" {
name = "${local.appgw_name}-ip-${var.provision_id}"
resource_group_name = var.app_gw_rg
sku = "Standard"
location = var.location
allocation_method = "Static"
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
}
resource "azurerm_application_gateway" "qmi-app-gw" {
name = "${local.appgw_name}-${var.provision_id}"
resource_group_name = var.app_gw_rg
location = var.location
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
sku {
name = "WAF_v2"
tier = "WAF_v2"
capacity = 1
}
gateway_ip_configuration {
name = "app-gw-subnet"
subnet_id = var.app_gw_subnet
}
waf_configuration {
enabled = true
firewall_mode = "Prevention"
rule_set_type = "OWASP"
rule_set_version = "3.0"
file_upload_limit_mb = "500"
exclusion {
match_variable = "RequestCookieNames"
selector_match_operator = "Equals"
selector = "qvla_invite"
}
exclusion {
match_variable = "RequestCookieNames"
selector_match_operator = "Contains"
selector = "parsely"
}
exclusion {
match_variable = "RequestCookieNames"
selector_match_operator = "Contains"
selector = "mixpanel"
}
exclusion {
match_variable = "RequestCookieNames"
selector_match_operator = "Contains"
selector = "optimizely"
}
exclusion {
match_variable = "RequestArgNames"
selector_match_operator = "Equals"
selector = "reloadUri"
}
exclusion {
match_variable = "RequestCookieNames"
selector_match_operator = "Contains"
selector = "NPWEBCONSOLE"
}
exclusion {
match_variable = "RequestCookieNames"
selector_match_operator = "Contains"
selector = "NPNEWSSTAND"
}
exclusion {
match_variable = "RequestCookieNames"
selector_match_operator = "Contains"
selector = "Vizlib"
}
# This is needed for NPrinting
/*disabled_rule_group {
rule_group_name = "REQUEST-920-PROTOCOL-ENFORCEMENT"
rules = ["920270", "920271"]
}*/
}
# Qlik Sense fe ports
frontend_port {
name = "443"
port = 443
}
frontend_port {
name = "80"
port = 80
}
# NPrinting fe ports
frontend_port {
name = "4993"
port = 4993
}
frontend_port {
name = "4994"
port = 4994
}
# QIB fe ports
frontend_port {
name = "4435"
port = 4435
}
# QDC fe ports
frontend_port {
name = "8443"
port = 8443
}
frontend_port {
name = "8080"
port = 8080
}
frontend_ip_configuration {
name = "app-gw-front-end-ip-config"
public_ip_address_id = azurerm_public_ip.appgw-ip.id
}
ssl_certificate {
name = var.cert_name
password = data.azurerm_key_vault_secret.cert-password.value
data = data.azurerm_key_vault_secret.cert-data.value
}
ssl_policy {
policy_type = "Predefined"
policy_name = "AppGwSslPolicy20170401"
}
# Backend pool for QS, QIB and NP
backend_address_pool {
name = local.backend_address_pool_qs
}
# Backend pool for QDC
backend_address_pool {
name = local.backend_address_pool_qdc
}
# Qlik Sense
backend_http_settings {
name = local.http_setting_name_443
cookie_based_affinity = "Disabled"
port = 443
protocol = "Https"
request_timeout = 7600
probe_name = local.qs_probe_name
}
# NPrinting
backend_http_settings {
name = local.http_setting_name_4993
cookie_based_affinity = "Disabled"
port = 4993
protocol = "Https"
request_timeout = 7600
probe_name = local.qs_probe_name
}
backend_http_settings {
name = local.http_setting_name_4994
cookie_based_affinity = "Disabled"
port = 4994
protocol = "Https"
request_timeout = 7600
probe_name = local.qs_probe_name
}
# QIB
backend_http_settings {
name = local.http_setting_name_4435
cookie_based_affinity = "Disabled"
port = 4435
protocol = "Https"
request_timeout = 7600
probe_name = local.qs_probe_name_4435
}
# QDC
backend_http_settings {
name = local.http_setting_name_8443
cookie_based_affinity = "Disabled"
port = 8080
protocol = "Http"
request_timeout = 7600
probe_name = local.qdc_probe_name
}
# QS Prob
probe {
name = local.qs_probe_name
protocol = "Https"
host = local.appgw_hostname
interval = 30
path = "/"
timeout = 30
unhealthy_threshold = 3
}
# QDC Prob
probe {
name = local.qdc_probe_name
protocol = "Http"
host = local.appgw_hostname
interval = 30
path = "/qdc"
timeout = 30
unhealthy_threshold = 3
}
# QIB Probe
probe {
name = local.qs_probe_name_4435
protocol = "Https"
host = local.appgw_hostname
interval = 30
path = "/"
timeout = 30
unhealthy_threshold = 3
match {
status_code = ["200-401"]
}
}
# Qlik Sense listener
http_listener {
name = local.listener_name_https
host_name = local.appgw_hostname
ssl_certificate_name = var.cert_name
frontend_ip_configuration_name = "app-gw-front-end-ip-config"
frontend_port_name = "443"
protocol = "Https"
}
http_listener {
name = local.listener_name_http
host_name = local.appgw_hostname
frontend_ip_configuration_name = "app-gw-front-end-ip-config"
frontend_port_name = "80"
protocol = "Http"
}
# NPrinting listeners
http_listener {
name = local.listener_name_4993
ssl_certificate_name = var.cert_name
host_name = local.appgw_hostname
frontend_ip_configuration_name = "app-gw-front-end-ip-config"
frontend_port_name = "4993"
protocol = "Https"
}
http_listener {
name = local.listener_name_4994
ssl_certificate_name = var.cert_name
host_name = local.appgw_hostname
frontend_ip_configuration_name = "app-gw-front-end-ip-config"
frontend_port_name = "4994"
protocol = "Https"
}
# QIB listener
http_listener {
name = local.listener_name_4435
ssl_certificate_name = var.cert_name
frontend_ip_configuration_name = "app-gw-front-end-ip-config"
frontend_port_name = "4435"
protocol = "Https"
}
# QDC listeners
http_listener {
name = local.listener_name_8443
ssl_certificate_name = var.cert_name
host_name = local.appgw_hostname
frontend_ip_configuration_name = "app-gw-front-end-ip-config"
frontend_port_name = "8443"
protocol = "Https"
}
http_listener {
name = local.listener_name_8080
host_name = local.appgw_hostname
frontend_ip_configuration_name = "app-gw-front-end-ip-config"
frontend_port_name = "8080"
protocol = "Http"
}
# Qlik Sense routing rules
request_routing_rule {
name = local.request_routing_rule_https
rule_type = "Basic"
http_listener_name = local.listener_name_https
backend_address_pool_name = local.backend_address_pool_qs
backend_http_settings_name = local.http_setting_name_443
}
# QDC routing rules
request_routing_rule {
name = local.request_routing_rule_8443
rule_type = "Basic"
http_listener_name = local.listener_name_8443
backend_address_pool_name = local.backend_address_pool_qdc
backend_http_settings_name = local.http_setting_name_8443
}
# NPrinting routing rules
request_routing_rule {
name = local.request_routing_rule_4993
rule_type = "Basic"
http_listener_name = local.listener_name_4993
backend_address_pool_name = local.backend_address_pool_qs
backend_http_settings_name = local.http_setting_name_4993
}
request_routing_rule {
name = local.request_routing_rule_4994
rule_type = "Basic"
http_listener_name = local.listener_name_4994
backend_address_pool_name = local.backend_address_pool_qs
backend_http_settings_name = local.http_setting_name_4994
}
# QIB routing rule
request_routing_rule {
name = local.request_routing_rule_4435
rule_type = "Basic"
http_listener_name = local.listener_name_4435
backend_address_pool_name = local.backend_address_pool_qs
backend_http_settings_name = local.http_setting_name_4435
}
# Redirect QS 80 to 443
redirect_configuration {
name = local.redirect_configuration_80
target_listener_name = local.listener_name_https
redirect_type = "Permanent"
include_path = true
include_query_string = true
}
request_routing_rule {
name = local.request_routing_rule_http
rule_type = "Basic"
http_listener_name = local.listener_name_http
redirect_configuration_name = local.redirect_configuration_80
}
# Redirect QDC 8080 to 8443
redirect_configuration {
name = local.redirect_configuration_8080
target_listener_name = local.listener_name_8443
redirect_type = "Permanent"
include_path = true
include_query_string = true
}
request_routing_rule {
name = local.request_routing_rule_8080
rule_type = "Basic"
http_listener_name = local.listener_name_8080
redirect_configuration_name = local.redirect_configuration_8080
}
}

View File

@@ -11,9 +11,9 @@ output "appgw_public_ip" {
}
output "appgw_backend_address_pool_0_id" {
value = azurerm_application_gateway.qmi-app-gw.backend_address_pool[0].id
value = tolist(azurerm_application_gateway.qmi-app-gw.backend_address_pool).0.id
}
output "appgw_backend_address_pool_1_id" {
value = azurerm_application_gateway.qmi-app-gw.backend_address_pool[1].id
value = tolist(azurerm_application_gateway.qmi-app-gw.backend_address_pool).1.id
}

View File

@@ -1,167 +0,0 @@
locals {
appgw_hostname = "${var.appgw_hostname}.${var.domain}"
appgw_name = "qmi-appgw-qdc"
backend_address_pool_qdc = "${var.appgw_hostname}-qdc-bp"
http_setting_name_8443 = "${var.appgw_hostname}-8443-setting"
qdc_probe_name = "${var.appgw_hostname}-qdcprobe"
listener_name_8080 = "${var.appgw_hostname}-8080"
listener_name_8443 = "${var.appgw_hostname}-8443"
request_routing_rule_https = "${var.appgw_hostname}-https-rule"
request_routing_rule_8443 = "${var.appgw_hostname}-8443-rule"
redirect_configuration_8080 = "${var.appgw_hostname}-8080redirect"
request_routing_rule_8080 = "${var.appgw_hostname}-8080-rule"
}
data "azurerm_key_vault_secret" "cert-password" {
name = "star-qmi-qlikpoc-com-password"
key_vault_id = var.key_vault_id
}
data "azurerm_key_vault_secret" "cert-data" {
name = "star-qmi-qlikpoc-com-data"
key_vault_id = var.key_vault_id
}
resource "azurerm_public_ip" "appgw-ip" {
name = "${local.appgw_name}-ip-${var.provision_id}"
resource_group_name = var.app_gw_rg
sku = "Standard"
location = var.location
allocation_method = "Static"
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
}
resource "azurerm_application_gateway" "qmi-app-gw" {
name = "${local.appgw_name}-${var.provision_id}"
resource_group_name = var.app_gw_rg
location = var.location
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
sku {
name = "WAF_v2"
tier = "WAF_v2"
capacity = 1
}
waf_configuration {
enabled = true
firewall_mode = "Prevention"
rule_set_type = "OWASP"
rule_set_version = "3.0"
}
gateway_ip_configuration {
name = "app-gw-subnet"
subnet_id = var.app_gw_subnet
}
frontend_port {
name = "8443"
port = 8443
}
frontend_port {
name = "8080"
port = 8080
}
frontend_ip_configuration {
name = "app-gw-front-end-ip-config"
public_ip_address_id = azurerm_public_ip.appgw-ip.id
}
ssl_certificate {
name = var.cert_name
password = data.azurerm_key_vault_secret.cert-password.value
data = data.azurerm_key_vault_secret.cert-data.value
}
ssl_policy {
policy_type = "Predefined"
policy_name = "AppGwSslPolicy20170401"
}
backend_address_pool {
name = local.backend_address_pool_qdc
}
backend_http_settings {
name = local.http_setting_name_8443
cookie_based_affinity = "Disabled"
port = 8080
protocol = "Http"
request_timeout = 7600
probe_name = local.qdc_probe_name
}
probe {
name = local.qdc_probe_name
protocol = "Http"
host = local.appgw_hostname
interval = 30
path = "/qdc"
timeout = 30
unhealthy_threshold = 3
}
http_listener {
name = local.listener_name_8443
ssl_certificate_name = var.cert_name
host_name = local.appgw_hostname
frontend_ip_configuration_name = "app-gw-front-end-ip-config"
frontend_port_name = "8443"
protocol = "Https"
}
http_listener {
name = local.listener_name_8080
host_name = local.appgw_hostname
frontend_ip_configuration_name = "app-gw-front-end-ip-config"
frontend_port_name = "8080"
protocol = "Http"
}
request_routing_rule {
name = local.request_routing_rule_8443
rule_type = "Basic"
http_listener_name = local.listener_name_8443
backend_address_pool_name = local.backend_address_pool_qdc
backend_http_settings_name = local.http_setting_name_8443
}
redirect_configuration {
name = local.redirect_configuration_8080
target_listener_name = local.listener_name_8443
redirect_type = "Permanent"
include_path = true
include_query_string = true
}
request_routing_rule {
name = local.request_routing_rule_8080
rule_type = "Basic"
http_listener_name = local.listener_name_8080
redirect_configuration_name = local.redirect_configuration_8080
}
}

View File

@@ -11,6 +11,6 @@ output "appgw_public_ip" {
}
output "appgw_backend_address_pool_0_id" {
value = azurerm_application_gateway.qmi-app-gw.backend_address_pool[0].id
value = tolist(azurerm_application_gateway.qmi-app-gw.backend_address_pool).0.id
}

View File

@@ -139,10 +139,10 @@ resource "azurerm_application_gateway" "qmi-app-gw" {
}
# This is needed for NPrinting
/*disabled_rule_group {
disabled_rule_group {
rule_group_name = "REQUEST-920-PROTOCOL-ENFORCEMENT"
rules = ["920270", "920271"]
}*/
}
}

View File

@@ -11,5 +11,5 @@ output "appgw_public_ip" {
}
output "appgw_backend_address_pool_0_id" {
value = azurerm_application_gateway.qmi-app-gw.backend_address_pool[0].id
value = tolist(azurerm_application_gateway.qmi-app-gw.backend_address_pool).0.id
}

View File

@@ -1,169 +0,0 @@
resource "random_id" "randomMachineId" {
keepers = {
# Generate a new ID only when a new resource group is defined
resource_group = var.resource_group_name
}
byte_length = 2
}
resource "random_password" "password" {
length = 16
special = true
override_special = "_!@"
upper = true
lower = true
min_lower = 2
min_upper = 2
min_special = 2
}
locals {
virtual_machine_name = (var.virtual_machine_name != null)? var.virtual_machine_name : "${var.prefix}-${random_id.randomMachineId.hex}"
admin_username = var.admin_username
admin_password = random_password.password.result
notrename = (var.notrename != null)? "-NotApply" : ""
storage_account_id = var.location == "westeurope"? "/subscriptions/62ebff8f-c40b-41be-9239-252d6c0c8ad9/resourceGroups/QMI-Machines/providers/Microsoft.Storage/storageAccounts/machinesnapshotsweu" : "/subscriptions/62ebff8f-c40b-41be-9239-252d6c0c8ad9/resourceGroups/QMI-Machines/providers/Microsoft.Storage/storageAccounts/machinesnapshots"
}
resource "azurerm_managed_disk" "copy" {
name = "Disk-${var.prefix}-${random_id.randomMachineId.hex}"
location = var.location
resource_group_name = var.resource_group_name
storage_account_type = "Premium_LRS"
create_option = "Import"
storage_account_id = local.storage_account_id
source_uri = var.snapshot_id
disk_size_gb = var.disk_size_gb
tags = {
"Deployment" = "QMI PoC"
"Cost Center" = "3100"
"QMI_user" = var.user_id != null? var.user_id : null
}
}
module "qmi-nic" {
source = "git::https://gitlab.com/qmi/qmi-cloud-tf-modules.git//qmi-nic"
prefix = local.virtual_machine_name
location = var.location
subnet_id = var.subnet_id
resource_group_name = var.resource_group_name
user_id = var.user_id
}
resource "azurerm_virtual_machine" "vm" {
name = local.virtual_machine_name
location = var.location
resource_group_name = var.resource_group_name
network_interface_ids = [ module.qmi-nic.id ]
vm_size = var.vm_type
storage_os_disk {
name = azurerm_managed_disk.copy.name
os_type = "Windows"
managed_disk_id = azurerm_managed_disk.copy.id
managed_disk_type = "Premium_LRS"
create_option = "Attach"
}
os_profile_windows_config {
provision_vm_agent = true
enable_automatic_upgrades = false
winrm {
protocol = "http"
}
}
identity {
type = "SystemAssigned"
}
/*os_profile {
computer_name = local.virtual_machine_name
admin_username = local.admin_username
}*/
tags = {
"Deployment" = "QMI PoC"
"Cost Center" = "3100"
"ProvId" = var.provId != null? var.provId : null
"QMI_user" = var.user_id != null? var.user_id : null
"24x7" = var.is_24x7 == true? "" : null
"ShutdownTime": var.is_24x7 == false? var.shutdownTime : null
"StartupTime": var.is_24x7 == false? var.startupTime : null
}
}
resource "null_resource" "post-vm-fromsnapshot-win" {
count = var.initial_password != null? 1 : 0
depends_on = [
azurerm_virtual_machine.vm
]
provisioner "file" {
connection {
type = "winrm"
host = module.qmi-nic.private_ip_address
user = local.admin_username
password = var.initial_password
port = 5985
https = false
timeout = "10m"
}
source = "${path.module}/scripts"
destination = "C:/tmp/provision"
}
provisioner "remote-exec" {
connection {
type = "winrm"
host = module.qmi-nic.private_ip_address
user = local.admin_username
password = var.initial_password
port = 5985
https = false
timeout = "10m"
}
inline = [
"powershell.exe -File C:/tmp/provision/bootstrap.ps1",
"powershell.exe -File C:/tmp/provision/password.ps1 -Username ${local.admin_username} -Pass ${local.admin_password}"
]
}
# Rename Computer
provisioner "remote-exec" {
connection {
type = "winrm"
host = module.qmi-nic.private_ip_address
user = local.admin_username
password = local.admin_password
port = 5985
https = false
timeout = "10m"
}
inline = [
"powershell.exe -File C:/tmp/provision/RenameComputer.ps1 -NewName ${local.virtual_machine_name} ${local.notrename}"
]
on_failure = continue
}
provisioner "local-exec" {
command = "sleep 30"
}
}

View File

@@ -1,14 +0,0 @@
Param(
[string] $NewName,
[switch] $NotApply = $False
)
if ($NotApply){
Write-Host "Not renaming machine"
} else {
Write-Host "Machine is going to be renamed as $NewName"
Rename-Computer -NewName $NewName -PassThru -Force -Restart
}

View File

@@ -1,12 +0,0 @@
Param(
[string] $Username,
[string] $Pass
)
Import-Module "Carbon"
$secpasswd = ConvertTo-SecureString $Pass -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($Username, $secpasswd)
Install-CUser -Credential $cred
Write-Log "Done! Setting new password to user $Username"

View File

@@ -1,29 +0,0 @@
Write-Log "Starting q-user-setup.ps1"
Trap {
Write-Log -Message $_.Exception.Message -Severity "Error"
Break
}
### Install Carbon PowerShell Module
Write-Log -Message "Installing carbon"
choco install carbon -y | Out-Null
Import-Module "Carbon"
### create Qlik User
Write-Log -Message "Creating Qlik account"
$cred = New-MyCredential -user "Qlik" -pass "Qlik1234"
Install-CUser -Credential $cred
### Grant Remote Admin Rights to Qlik User
Write-Log -Message "Granting Qlik account Remote Interactive Logon Right"
Grant-Privilege -Identity $env:COMPUTERNAME\qlik -Privilege SeRemoteInteractiveLogonRight
Write-Log -Message "Adding Qlik user to Remote Desktop Users"
Add-GroupMember -Name 'Remote Desktop Users' -Member $env:COMPUTERNAME\qlik
Write-Log -Message "Adding Qlik user to local Administrators"
Add-GroupMember -Name 'Administrators' -Member $env:COMPUTERNAME\qlik
$regPath = "HKLM:\SYSTEM\CurrentControlSet\Control"
Set-ItemProperty $regPath -Name "ServicesPipeTimeout" -Type DWord -Value 180000

View File

@@ -1,4 +0,0 @@
Import-Module Qlik-Cli
Write-Log -Message "Restart Qlik ServiceDistpacher..."
Restart-Service QlikSenseServiceDispatcher -Force

File diff suppressed because one or more lines are too long

View File

@@ -1,11 +0,0 @@
# Shared variables here
Write-Log -Message "Setting shared variables for scenario"
# Dec 2019
#$PROXY_ARTIFACTS = "https://d7ipctdjxxii4.cloudfront.net/others/qdc/qdc-dec-2019/qdc_proxy_artifacts.zip"
# April 2020
#$PROXY_ARTIFACTS = "https://da3hntz84uekx.cloudfront.net/QlikDataCatalyst/4.5/0/_MSI/qdc_proxy_artifacts.zip"
# June 2020
$PROXY_ARTIFACTS = "https://da3hntz84uekx.cloudfront.net/QlikDataCatalyst/4.6/0/_MSI/qdc_proxy_artifacts.zip"

View File

@@ -1,100 +0,0 @@
Param(
[string] $QDC_HOST = "QMI-QDC-SN"
)
function New-Credential($u,$p) {
$secpasswd = ConvertTo-SecureString $p -AsPlainText -Force
return New-Object System.Management.Automation.PSCredential ($u, $secpasswd)
}
Write-Log -Message "Setting up QDC pre-requisites in Qlik Sense"
Import-Module Qlik-Cli
### Connect to the Qlik Sense Repository Service with Qlik-Cli
do {write-log -Message "Connecting to Qlik Sense Repository..."; start-sleep 15}
While( (Connect-Qlik $($env:COMPUTERNAME) -TrustAllCerts -UseDefaultCredentials -ErrorAction SilentlyContinue).length -eq 0 )
### Add the Qlik local user to Qlik Sense
$json = (@{userId = "qlik-data-catalyst";
userDirectory = "QLIK-EXTERNAL-SERVICE";
name = "qlik-data-catalyst";
} | ConvertTo-Json -Compress -Depth 10 )
Write-Log -Message "Adding Qlik Service user."
try {
Invoke-QlikPost "/qrs/user" $json | Out-Null
} catch {
Write-Log -Message $_.Exception.Message -Severity "Error"
}
try {
Write-Log -Message "Set 'qlik-data-catalyst' as AuditAdmin"
Update-QlikUser -id $(Get-QlikUser -filter "name eq 'qlik-data-catalyst'").id -roles AuditAdmin | Out-Null
} catch {
Write-Log -Message $_.Exception.Message -Severity "Error"
}
# C:\QVDs SMB FOLDER
Write-Log -Message "Creating 'C:\QVDs' folder and set SMB"
New-Item "C:\QVDs" -type directory | Out-Null
New-SMBShare -Name "qvds" -Path "C:\QVDs" | Out-Null
Grant-SmbShareAccess -Name qvds -AccountName Everyone -AccessRight Change -Force | Out-Null
# certs needed for qdc
Write-Log -Message "SMB Qlik Sense certificates folder"
New-SMBShare -Name "certs" -Path "C:\ProgramData\Qlik\Sense\Repository\Exported Certificates\.Local Certificates" | Out-Null
Grant-SmbShareAccess -Name certs -AccountName Everyone -AccessRight Read -Force | Out-Null
Write-Log -Message "Creating 'QVD Catalog' tag"
New-QlikTag -name "QVD Catalog" | Out-Null
# create podium user
Import-Module "Carbon"
Write-Log -Message "Adding 'podium' user to Windows system"
$cred = New-Credential "podium" "Qlik1234"
Install-CUser -Credential $cred | Out-Null
Write-Log -Message "Creating Qlik Sense data connection for C:\QVDs"
# ---- Workaround qlik-cli QS April 2020
# Qlik CLI New-QlikDataConnection fails with only 1 tag, that's why I create and use FakeTag too.
New-QlikTag -name "FakeTag" | Out-Null
$qvdsDC = New-QlikDataConnection -connectionstring "\\$($env:COMPUTERNAME)\qvds" -name "QVDs" -tags "QVD Catalog","FakeTag" -type "folder"
# ----
Write-Log -Message "Grant access to all user to this connection"
New-QlikRule -name "QVDs allow to all" -comment "Allow QVDs Connection to all users" -category "Security" -resourceFilter "DataConnection_$($qvdsDC.id)" -actions 23 -rule '((user.name like "*"))' | Out-Null
Write-Log -Message "Setting firewall rules for QDC"
New-NetFirewallRule -DisplayName "QDC QVD Metadata" -Action allow -LocalPort 7007 -Protocol TCP | Out-Null
New-NetFirewallRule -DisplayName "pub2qlik" -Action allow -LocalPort 4243,4747 -Protocol TCP | Out-Null
Write-Log -Message "Creating 'podium_dist' postgres connection"
$cred = New-Credential "postgres" "postgres"
$podiumDistDC = New-QlikDataConnection -connectionstring "'CUSTOM CONNECT TO `"provider=QvOdbcConnectorPackage.exe;driver=postgres;host=$QDC_HOST;port=5432;db=podium_dist;SSLMode=prefer;UseSystemTrustStore=false;ByteaAsLongVarBinary=0;TextAsLongVarchar=0;UseUnicode=1;FetchTSWTZasTimestamp=1;MaxVarcharSize=262144;UseDeclareFetch=1;Fetch=200;EnableTableTypes=1;MoneyAsDecimal=1;QueryTimeout=30;`"" `
-name podium_dist -type 'QvOdbcConnectorPackage.exe' -Credential $cred
Write-Log -Message "Grant access to all user to this connection"
New-QlikRule -name "Podium_Dist allow to all" -comment "Allow Podium_Dist Connection to all users" -category "Security" -resourceFilter "DataConnection_$($podiumDistDC.id)" -actions 23 -rule '((user.name like "*"))' | Out-Null
Write-Log "Copy Sample QVDs into C:/QVDs folder"
Copy-Item $PSScriptRoot\*.qvd C:\QVDs
$x=1
$files = Get-ChildItem C:\QVDs\*.qvd|sort LastWriteTime
foreach ($file in $files) #{ echo $file }
{
if ($x -lt 3) {
Set-ItemProperty -Path $file -Name LastWriteTime -Value (get-date)
sleep 2
}
$x= $x +1
}
Write-Log "QDC Config Completed."

View File

@@ -1,150 +0,0 @@
Param(
[string] $QDC_HOST = "QMI-QDC-SN",
[string] $QDC_PUBLIC_HOST
)
function New-Credential($u,$p) {
$secpasswd = ConvertTo-SecureString $p -AsPlainText -Force
return New-Object System.Management.Automation.PSCredential ($u, $secpasswd)
}
Write-Log -Message "Setting up QDC pre-requisites in Qlik Sense"
Import-Module Qlik-Cli
### Connect to the Qlik Sense Repository Service with Qlik-Cli
do {write-log -Message "Connecting to Qlik Sense Repository..."; start-sleep 15}
While( (Connect-Qlik $($env:COMPUTERNAME) -TrustAllCerts -UseDefaultCredentials -ErrorAction SilentlyContinue).length -eq 0 )
#-----------
# Load variables
. $PSScriptRoot\qdc-scenario-config.ps1
Write-Log -Message "Creating QDC virtual proxy"
$jwtcert = Get-Content -raw 'C:\ProgramData\Qlik\Sense\Repository\Exported Certificates\.Local Certificates\server.pem'
New-QlikVirtualProxy -description "Qlik Data Catalyst" -sessionCookieHeaderName "X-Qlik-QDC-Session" -authenticationMethod JWT `
-prefix qdc -loadBalancingServerNodes $(Get-QlikNode -filter "name eq 'Central'").id `
-jwtAttributeUserDirectory "[QLIK-EXTERNAL-SERVICE]" -jwtAttributeUserId "name" -jwtPublicKeyCertificate $jwtcert -websocketCrossOriginWhiteList $QDC_PUBLIC_HOST | Out-Null
Add-QlikProxy -ProxyId $(Get-QlikProxy -filter "serverNodeConfiguration.hostName eq '$($env:COMPUTERNAME)'").id -VirtualProxyId $(Get-QlikVirtualProxy -filter "description eq 'Qlik Data Catalyst'").id | Out-Null
Start-Sleep -s 10
Write-Log -Message "Downloading qdc_proxy_artifacts - This will create 'qlik-data-catalyst' qliksense user"
Write-Log -Message "PROXY_ARTIFACTS = $PROXY_ARTIFACTS"
$ENV:PATH += ";C:\Program Files\Qlik\Sense\ServiceDispatcher\Node"
cd $env:TEMP
(New-Object System.Net.WebClient).DownloadFile($PROXY_ARTIFACTS, "$env:TEMP\qdc_proxy_artifacts.zip")
#Invoke-WebRequest -UseBasicParsing -OutFile qdc_proxy_artifacts.zip -Uri $PROXY_ARTIFACTS
Expand-Archive .\qdc_proxy_artifacts.zip .
cd qs-virtual-proxy
(Get-Content .\check-proxy.js).replace("ducks-sense1.ad.podiumdata.net", "$($env:COMPUTERNAME)") | Set-Content .\check-proxy.js
Copy-Item "C:\ProgramData\Qlik\Sense\Repository\Exported Certificates\.Local Certificates\qdc.jwt" .
ls
Get-QlikUser
node .\check-proxy.js
Get-QlikUser -filter "name eq 'qlik-data-catalyst'"
Write-Log -Message "Waiting 20 secs"
Start-Sleep -s 20
Write-Log -Message "Set 'qlik-data-catalyst' as AuditAdmin"
Update-QlikUser -id $(Get-QlikUser -filter "name eq 'qlik-data-catalyst'").id -roles AuditAdmin | Out-Null
Write-Log -Message "Creating security rule for access by QLIK-EXTERNAL-SERVICE"
New-QlikRule -Name "Security rule for access by QLIK-EXTERNAL-SERVICE" -resourceFilter "DataConnection_*,App_*" `
-actions 2 -rule '((user.userDirectory="QLIK-EXTERNAL-SERVICE"))' -rulecontext both -category Security | Out-Null
Write-Log -Message "Adding qvd-mock to service dispatcher"
$dir = pwd
cd "C:\Program Files\Qlik\Sense"
Expand-Archive $dir\qvd-mock.zip .
Copy-Item $dir\qvd-mock.json "C:\Program Files\Qlik\Sense\BrokerService\service-configs\"
$mock=@"
[qvd-mock]
Identity=Qlik.qvd-mock
DisplayName=QVD Mock
ExePath=Node\node.exe
Script=..\qvd-mock\server.js
"@
Add-Content "C:\Program Files\Qlik\Sense\ServiceDispatcher\services.conf" $mock
Restart-Service QlikSenseServiceDispatcher
Write-Log -Message "Creating 'QVD Catalog' tag"
New-QlikTag -name "QVD Catalog" | Out-Null
Write-Log -Message "Creating 'c:\QVDs' folder and set SMB"
New-Item "C:\QVDs" -type directory | Out-Null
New-SMBShare -Name "qvds" -Path "C:\QVDs" | Out-Null
Grant-SmbShareAccess -Name qvds -AccountName Everyone -AccessRight Change -Force | Out-Null
Write-Log -Message "Creating Qlik Sense data connection for C:\QVDs"
# ---- Workaround qlik-cli QS April 2020
# Qlik CLI New-QlikDataConnection fails with only 1 tag, that's why I create and use FakeTag too.
New-QlikTag -name "FakeTag" | Out-Null
$qvdsDC = New-QlikDataConnection -connectionstring "\\$($env:COMPUTERNAME)\qvds" -name "QVDs" -tags "QVD Catalog","FakeTag" -type "folder"
# ----
Write-Log -Message "Grant access to all user to this connection"
New-QlikRule -name "QVDs allow to all" -comment "Allow QVDs Connection to all users" -category "Security" -resourceFilter "DataConnection_$($qvdsDC.id)" -actions 23 -rule '((user.name like "*"))' | Out-Null
Write-Log -Message "Setting firewall rules for QDC"
New-NetFirewallRule -DisplayName "QDC QVD Metadata" -Action allow -LocalPort 7007 -Protocol TCP | Out-Null
New-NetFirewallRule -DisplayName "pub2qlik" -Action allow -LocalPort 4243,4747 -Protocol TCP | Out-Null
# certs needed for qdc
Write-Log -Message "SMB Qlik Sense certificates folder"
New-SMBShare -Name "certs" -Path "C:\ProgramData\Qlik\Sense\Repository\Exported Certificates\.Local Certificates" | Out-Null
Grant-SmbShareAccess -Name certs -AccountName Everyone -AccessRight Read -Force | Out-Null
# create podium user
Import-Module "Carbon"
Write-Log -Message "Adding 'podium' user to Windows system"
$cred = New-Credential "podium" "Qlik1234"
Install-CUser -Credential $cred | Out-Null
#gci cert:\CurrentUser\My | where {$_.issuer -eq $cert} | Connect-Qlik -Username $env:COMPUTERNAME\podium -Computername $env:COMPUTERNAME
#gci cert:\CurrentUser\My | where {$_.issuer -eq $cert} | Connect-Qlik -Computername $env:COMPUTERNAME
#Update-QlikUser -id $(Get-QlikUser -filter "name eq 'podium'").id -roles RootAdmin
#gci cert:\CurrentUser\My | where {$_.issuer -eq $cert} | Connect-Qlik -Username $env:COMPUTERNAME\podium -Computername $env:COMPUTERNAME
Write-Log -Message "Creating 'podium_dist' postgres connection"
$cred = New-Credential "postgres" "postgres"
$podiumDistDC = New-QlikDataConnection -connectionstring "'CUSTOM CONNECT TO `"provider=QvOdbcConnectorPackage.exe;driver=postgres;host=$QDC_HOST;port=5432;db=podium_dist;SSLMode=prefer;UseSystemTrustStore=false;ByteaAsLongVarBinary=0;TextAsLongVarchar=0;UseUnicode=1;FetchTSWTZasTimestamp=1;MaxVarcharSize=262144;UseDeclareFetch=1;Fetch=200;EnableTableTypes=1;MoneyAsDecimal=1;QueryTimeout=30;`"" `
-name podium_dist -type 'QvOdbcConnectorPackage.exe' -Credential $cred
Write-Log -Message "Grant access to all user to this connection"
New-QlikRule -name "Podium_Dist allow to all" -comment "Allow Podium_Dist Connection to all users" -category "Security" -resourceFilter "DataConnection_$($podiumDistDC.id)" -actions 23 -rule '((user.name like "*"))' | Out-Null
Write-Log "Copy Sample QVDs into C:/QVDs folder"
Copy-Item $PSScriptRoot\*.qvd C:\QVDs
$x=1
$files = Get-ChildItem C:\QVDs\*.qvd|sort LastWriteTime
foreach ($file in $files) #{ echo $file }
{
if ($x -lt 3) {
Set-ItemProperty -Path $file -Name LastWriteTime -Value (get-date)
sleep 2
}
$x= $x +1
}
Write-Log "QDC Config Completed."

View File

@@ -1,131 +0,0 @@
Param(
[string] $ModuleName = "vm-qs"
)
Write-Log "Resize Partition C to max size"
$size = Get-PartitionSupportedSize -DriveLetter C
Resize-Partition -DriveLetter C -Size $size.SizeMax | Out-Null
# Helper Functions
# ----------------
function New-Credential($u,$p) {
$secpasswd = ConvertTo-SecureString $p -AsPlainText -Force
return New-Object System.Management.Automation.PSCredential ($u, $secpasswd)
}
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f
#Write-Log "Deleting old certificates files..."
#Get-ChildItem "$($env:ProgramData)\Qlik\Sense\Repository\Exported Certificates\" | Remove-Item -Recurse
Set-Service -Name "QlikLoggingService" -StartupType Automatic
Set-Service -Name "QlikSenseServiceDispatcher" -StartupType Automatic
Set-Service -Name "QlikSenseProxyService" -StartupType Automatic
Set-Service -Name "QlikSenseEngineService" -StartupType Automatic
Set-Service -Name "QlikSensePrintingService" -StartupType Automatic
Set-Service -Name "QlikSenseSchedulerService" -StartupType Automatic
Set-Service -Name "QlikSenseRepositoryService" -StartupType Automatic
Set-Service -Name "QlikSenseRepositoryDatabase" -StartupType Automatic
Write-Log "Starting QlikSenseRepositoryDatabase and QlikSenseServiceDispatcher..."
Start-Service QlikSenseRepositoryDatabase
Start-Service QlikSenseServiceDispatcher
#Delete certificates
Write-Log "Deleting old certificates from keyStore..."
$Certs = Get-ChildItem cert:"CurrentUser\My"
$Certs | ForEach-Object{Remove-Item -path $_.PSPath -recurse -Force}
$Certs = Get-ChildItem cert:"LocalMachine\My"
$Certs | ForEach-Object{Remove-Item -path $_.PSPath -recurse -Force}
$Certs = Get-ChildItem cert:"LocalMachine\Root" | Where-Object { $_.Subject -match 'GEN-QS' -or $_.Subject -match 'QMI-QS' -or $_.Subject -match 'QMI-E2E' }
$Certs | ForEach-Object{Remove-Item -path $_.PSPath -recurse -Force}
Write-Log "Setting new hostname ($($env:computername)) in to Host.cfg file..."
$enchostname = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("$($env:computername)"))
Set-Content -Path C:\ProgramData\Qlik\Sense\Host.cfg -Value $enchostname
Write-Log "Bootstraping Qlik Sense ..."
Write-Log "Executing ... Repository.exe -bootstrap -standalone -restorehostname"
$waiting=20
if ( $env:USERNAME -eq "qservice" ) {
$waiting=50
Write-Log "The user executing this script is already 'qservice'"
Start-Process powershell.exe -ArgumentList "Start-Process cmd.exe -Verb runAs -ArgumentList '/k C:\PROGRA~1\Qlik\Sense\Repository\Repository.exe -bootstrap -standalone -restorehostname'"
} else {
Write-Log "The user executing this script is NOT 'qservice'"
$cred = New-Credential "qservice" "Qlik1234"
Start-Process powershell.exe -Credential $cred -ArgumentList "Start-Process cmd.exe -Verb runAs -ArgumentList '/k C:\PROGRA~1\Qlik\Sense\Repository\Repository.exe -bootstrap -standalone -restorehostname'"
}
$waiting=50
Write-Log "Waiting $waiting secs ..."
Start-Sleep -s $waiting
Write-Log "Restarting Service Dispatcher"
Restart-Service QlikSenseServiceDispatcher -Force
Start-Sleep -s 20
Write-Log "New Certs: CurrentUser\My"
Get-ChildItem cert:"CurrentUser\My"
Write-Log "New Certs: LocalMachine\My"
Get-ChildItem cert:"LocalMachine\My"
Write-Log "New Certs: LocalMachine\Root"
Get-ChildItem cert:"LocalMachine\Root" | Where-Object { $_.Subject -match 'QMI' }
$NewCerts = Get-ChildItem cert:"LocalMachine\Root" | Where-Object { $_.Subject -match 'QMI' }
if ($NewCerts) {
Write-Log "Restarting all Qlik Sense services"
Restart-Service QlikSenseServiceDispatcher -Force
Restart-Service QlikLoggingService -Force
Restart-Service QlikSenseRepositoryService -Force
Restart-Service QlikSenseProxyService -Force
Restart-Service QlikSenseEngineService -Force
Restart-Service QlikSenseSchedulerService -Force
Restart-Service QlikSensePrintingService -Force
if ( $ModuleName -ne "vm-qs" ) {
Start-Sleep -s 20
Write-Log "Recovering Qlik Sense users"
Start-Process powershell.exe -ArgumentList "Start-Process cmd.exe -Verb runAs -ArgumentList '/c $PSScriptRoot\qs-reset-users.bat'"
Restart-Service QlikSenseRepositoryService -Force
}
} else {
Write-Error "Error: Qlik Sense Certs not recreated!"
throw "Error: Qlik Sense Certs not recreated!"
}
#### Recreate QS desktop shortcuts
Write-Log "Recreate QS desktop shortcuts"
$sourcepath="C:\Users\Public\Desktop\Qlik Management Console.lnk"
$destination="C:\Users\Public\Desktop\Qlik Management Console2.lnk"
Copy-Item $sourcepath $destination ## Get the lnk we want to use as a template
Remove-Item -Path $sourcepath -Force
$shell = New-Object -COM WScript.Shell
$shortcut = $shell.CreateShortcut($destination) ## Open the lnk
$shortcut.TargetPath = "https://$env:computername/qmc" ## Make changes
$shortcut.Save() ## Save
Rename-Item -Path $destination -NewName "Qlik Management Console.lnk"
$sourcepath="C:\Users\Public\Desktop\Qlik Sense Hub.lnk"
$destination="C:\Users\Public\Desktop\Qlik Sense Hub2.lnk"
Copy-Item $sourcepath $destination ## Get the lnk we want to use as a template
Remove-Item -Path $sourcepath -Force
$shell = New-Object -COM WScript.Shell
$shortcut = $shell.CreateShortcut($destination) ## Open the lnk
$shortcut.TargetPath = "https://$env:computername/hub" ## Make changes
$shortcut.Save() ## Save
Rename-Item -Path $destination -NewName "Qlik Sense Hub.lnk"
####
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 5 /f

View File

@@ -1,185 +0,0 @@
<#
Module: qs-post-cfg
Author: Clint Carr
Modified by: -
Modification History:
- Fixed connect as user logic (qlik-cli change)
- Added logic to accomodate for Professional/Analyzer or User licenses
- Added a loop into the Connect-Qlik statement to remove an abort error
- Added Logging
- Added comments
- Error checking
- Modified service connection for Qlik Sense from endless loop to a set number of attempts.
- Added a service restart at the end of the Central Node (seems to resolve an issue with April 2018)
last updated: 10/18/2019
Intent: Configure the Qlik Sense environment with applications and Security Rules.
#>
Param(
[string] $Hostname,
[string] $CertPwd,
[string] $QlikUserPwd
)
Import-Module Qlik-Cli
Import-Module "Carbon"
# Helper Functions
# ----------------
function New-Credential($u,$p) {
$secpasswd = ConvertTo-SecureString $p -AsPlainText -Force
return New-Object System.Management.Automation.PSCredential ($u, $secpasswd)
}
Write-Log -Message "Creating Qlik account"
$cred = New-Credential "Qlik" $QlikUserPwd
Install-CUser -Credential $cred
Write-Log -Message "Starting qs-post-cfg.ps1"
### Waiting for Qlik Sense installation to complete
#-----------
Function restartQse
{
Write-Log "Checking Engine Service has started..."
$qse = get-service QlikSenseEngineService
write-log -Message "The engine is currently $($qse.Status)"
if ($qse.Status -eq "Stopped") {
Write-Log -Message "Starting Qlik Sense Engine and waiting 120 seconds" -Severity "Warn";
Start-Service QlikSenseEngineService ;
Restart-Service QlikSenseServiceDispatcher;
start-sleep -s 120
}
write-log -Message "The engine is currently $($qse.Status)"
}
Function connQSR
{
$i = 1
$statusCode = 0
while ($statusCode -ne 200 -and $i -le 10)
{
try {$statusCode = (Invoke-WebRequest https://$($env:COMPUTERNAME)/qps/user -UseBasicParsing).statusCode }
catch
{
$i++
write-log -Message "QSR on $env:COMPUTERNAME not responding attempt $i of 10..." -Severity "Warn"
start-sleep -s 20
}
}
}
Function restartServices
{
write-log -Message "Restarting Qlik Sense Services on $env:COMPUTERNAME" -Severity "Warn"
Restart-Service QlikSenseRepositoryDatabase -Force
Restart-Service QlikLoggingService -Force
Restart-Service QlikSenseServiceDispatcher -Force
Restart-Service QlikSenseRepositoryService -Force
Restart-Service QlikSenseProxyService -Force
Restart-Service QlikSenseEngineService -Force
Restart-Service QlikSensePrintingService -Force
Restart-Service QlikSenseSchedulerService -Force
}
Function qlikSenseUserAccess
{
$userAccessGroup = (@{name = "License Everyone";} | ConvertTo-Json -Compress -Depth 10)
$licenseId = Invoke-QlikPost "/qrs/License/UserAccessGroup" $userAccessGroup
$systemRuleJson = (@{
name = "Grant Everyone a token";
category = "License";
rule = '((user.name like "*"))';
type = "Custom";
resourceFilter = "License.UserAccessGroup_" + $licenseId.id;
actions = 1;
ruleContext = "QlikSenseOnly";
disabled = $false;
comment = "Rule to set up automatic user access";} | ConvertTo-Json -Compress -Depth 10)
Write-Log -Message "Adding user license rule to grant Everyone Tokens."
try {
Invoke-QlikPost "/qrs/SystemRule" $systemRuleJson | Out-Null
} catch {
Write-Log -Message $_.Exception.Message -Severity "Error"
}
}
Function qlikSenseProfessionalAccess
{
$professionalAccessGroup = (@{name = "License Everyone";} | ConvertTo-Json -Compress -Depth 10)
$licenseId = Invoke-QlikPost "/qrs/License/ProfessionalAccessGroup" $professionalAccessGroup
$systemRuleJson = (@{
name = "Grant Everyone Professional Access";
category = "License";
rule = '((user.name like "*"))';
type = "Custom";
resourceFilter = "License.ProfessionalAccessGroup_" + $licenseId.id;
actions = 1;
ruleContext = "QlikSenseOnly";
disabled = $false;
comment = "Rule to set up automatic user access";} | ConvertTo-Json -Compress -Depth 10)
Write-Log -Message "Adding user license rule to grant Everyone access as Professional."
try {
Invoke-QlikPost "/qrs/SystemRule" $systemRuleJson | Out-Null
} catch {
Write-Log -Message $_.Exception.Message -Severity "Error"
}
}
#-----------
write-log -Message "Waiting 1 minute for Qlik Sense installation to complete"
start-sleep -s 60
### wait for Qlik Sense Proxy service to respond with an HTTP 200 status before proceeding
connQSR
$statusCode = (Invoke-WebRequest https://$($env:COMPUTERNAME)/qps/user -UseBasicParsing).statusCode
if ($statusCode -ne 200)
{
Write-Log -Message "Waiting 25 seconds before next pass" -Severity "Warn"
restartServices
Write-Log -Message "Waiting 45 seconds for Services to ensure they are ready" -Severity "Warn"
start-sleep -s 45
connQSR
}
$statusCode = (Invoke-WebRequest https://$($env:COMPUTERNAME)/qps/user -UseBasicParsing).statusCode
if ($statusCode -ne 200) {
Write-Log -Message "Provisioning failed" -Severity "Error"
Exit
}
Write-Log -Message "Qlik Sense Proxy responding on $env:COMPUTERNAME, status code: $statusCode"
Write-Log -Message "Connecting to Qlik Sense Repository Service on $env:COMPUTERNAME"
restartQse
### Connect to the Qlik Sense Repository Service with Qlik-Cli
do {write-log -Message "Connecting to Qlik Sense Repository"; start-sleep 15}
While( (Connect-Qlik $($env:COMPUTERNAME) -TrustAllCerts -UseDefaultCredentials -ErrorAction SilentlyContinue).length -eq 0 )
### Enabling HTTP
#Write-Log -Message "Enabling HTTP access on Central Node proxy"
#try {
# Get-QlikProxy -filter "serverNodeConfiguration.Name eq 'Central'" | Update-QlikProxy -AllowHttp 1 | Out-Null
#} catch {
# Write-Log -Message $_.Exception.Message -Severity "Error"
#}
#Start-Sleep -s 10
### Install qlik-poc_com certificate
Write-Log -Message "Install 'qmi.qlik-poc.com' certificate, set thumbsprint and whitelist domain in QS central virtual proxy"
try {
$secpasswd = ConvertTo-SecureString $CertPwd -AsPlainText -Force
$sslCert=Import-PfxCertificate -FilePath C:/provision/wildcard_qmi_qlik-poc_com.pfx -CertStoreLocation Cert:\LocalMachine\My -Password $secpasswd
Update-QlikProxy -SslBrowserCertificateThumbprint $sslCert.Thumbprint -id (Get-QlikProxy).id | Out-Null
Start-Sleep -s 10
Connect-Qlik $($env:COMPUTERNAME) -TrustAllCerts -UseDefaultCredentials | Out-Null
Update-QlikVirtualProxy -id (Get-QlikVirtualProxy -filter "description eq 'Central Proxy (Default)'").id -websocketCrossOriginWhiteList $Hostname | Out-Null
Start-Sleep -s 10
} catch {
Write-Log -Message $_.Exception.Message -Severity "Error"
}

View File

@@ -1,10 +0,0 @@
@echo off
set host_name=localhost
set owner_name=postgres
set PGPASSWORD=Qlik1234
C: && cd "C:\Program Files\Qlik\Sense\Repository\PostgreSQL\9.6\bin" && psql -p 4432 -U %owner_name% -d QSR --command "UPDATE public.\"Users\" SET \"UserDirectory\" = '%COMPUTERNAME%', \"RolesString\" = 'RootAdmin' WHERE \"UserDirectory\" != 'INTERNAL';"
psql -p 4432 -U %owner_name% -d QSR --command "SELECT * FROM public.\"Users\" WHERE \"RolesString\" = 'RootAdmin';"
cd "C:\provision"
@echo off

View File

@@ -1,30 +0,0 @@
Write-Host "Delete any existing WinRM listeners"
winrm delete winrm/config/listener?Address=*+Transport=HTTP 2>$Null
#winrm delete winrm/config/listener?Address=*+Transport=HTTPS 2>$Null
Write-Host "Create a new WinRM listener and configure"
winrm create winrm/config/listener?Address=*+Transport=HTTP
#winrm set winrm/config/winrs "@{MaxMemoryPerShellMB=`"0`"}"
winrm set winrm/config "@{MaxTimeoutms=`"1800000`"}"
winrm set winrm/config/service "@{AllowUnencrypted=`"true`"}"
#winrm set winrm/config/service "@{MaxConcurrentOperationsPerUser=`"12000`"}"
winrm set winrm/config/service/auth "@{Basic=`"true`"}"
winrm set winrm/config/client/auth "@{Basic=`"true`"}"
Write-Host "Configure UAC to allow privilege elevation in remote shells"
$Key = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System'
$Setting = 'LocalAccountTokenFilterPolicy'
Set-ItemProperty -Path $Key -Name $Setting -Value 1 -Force
#Write-Host "turn off PowerShell execution policy restrictions"
#Set-ExecutionPolicy -ExecutionPolicy Unrestricted
Write-Host "Configure and restart the WinRM Service; Enable the required firewall exception"
net stop winrm
net start winrm
#Stop-Service -Name WinRM
#Set-Service -Name WinRM -StartupType Automatic
netsh advfirewall firewall set rule name="Windows Remote Management (HTTP-In)" new action=allow localip=any remoteip=any
#Start-Service -Name WinRM

View File

@@ -1,67 +0,0 @@
variable "prefix" {
default = "QMI"
}
variable "subnet_id" {
}
variable "location" {
}
variable "snapshot_id" {
}
variable "resource_group_name" {
}
variable "vm_type" {
default = "Standard_D4s_v3"
}
variable "managed_disk_type" {
default = "Premium_LRS"
}
variable "disk_size_gb" {
default = "128"
}
variable "admin_username" {
default = "scdemoadmin"
}
variable "initial_password" {
default = null
}
variable "virtual_machine_name" {
default = null
}
variable "user_id" {
default = null
}
variable "provId" {
default = null
}
variable "is_24x7"{
type = bool
default = null
}
variable "shutdownTime"{
default = null
}
variable "startupTime"{
default = null
}
variable "notrename" {
default = null
}

View File

@@ -1,148 +0,0 @@
resource "random_id" "randomMachineId" {
keepers = {
# Generate a new ID only when a new resource group is defined
resource_group = var.resource_group_name
}
byte_length = 2
}
resource "random_password" "password" {
length = 16
special = true
override_special = "_!@"
upper = true
lower = true
min_lower = 2
min_upper = 2
min_special = 2
}
locals {
virtual_machine_name = (var.virtual_machine_name != null)? var.virtual_machine_name : "${var.prefix}-${random_id.randomMachineId.hex}"
admin_username = var.admin_username
admin_password = random_password.password.result
notrename = (var.notrename != null)? "-NotApply" : ""
}
resource "azurerm_managed_disk" "copy" {
name = "Disk-${var.prefix}-${random_id.randomMachineId.hex}"
location = var.location
resource_group_name = var.resource_group_name
storage_account_type = "Premium_LRS"
create_option = "Copy"
source_resource_id = var.snapshot_id
disk_size_gb = var.disk_size_gb
tags = {
"Deployment" = "QMI PoC"
"Cost Center" = "3100"
"QMI_user" = var.user_id != null? var.user_id : null
}
}
module "qmi-nic" {
source = "git::https://gitlab.com/qmi/qmi-cloud-tf-modules.git//qmi-nic"
prefix = local.virtual_machine_name
location = var.location
subnet_id = var.subnet_id
resource_group_name = var.resource_group_name
user_id = var.user_id
}
resource "azurerm_virtual_machine" "vm" {
name = local.virtual_machine_name
location = var.location
resource_group_name = var.resource_group_name
network_interface_ids = [ module.qmi-nic.id ]
vm_size = var.vm_type
storage_os_disk {
name = azurerm_managed_disk.copy.name
os_type = "Windows"
managed_disk_id = azurerm_managed_disk.copy.id
managed_disk_type = "Premium_LRS"
create_option = "Attach"
}
os_profile_windows_config {
provision_vm_agent = true
enable_automatic_upgrades = false
winrm {
protocol = "http"
}
}
/*os_profile {
computer_name = local.virtual_machine_name
admin_username = local.admin_username
}*/
tags = {
"Deployment" = "QMI PoC"
"Cost Center" = "3100"
"ProvId" = var.provId != null? var.provId : null
"QMI_user" = var.user_id != null? var.user_id : null
"24x7" = var.is_24x7 == true? "" : null
"ShutdownTime": var.is_24x7 == false? var.shutdownTime : null
"StartupTime": var.is_24x7 == false? var.startupTime : null
}
provisioner "file" {
connection {
type = "winrm"
host = module.qmi-nic.private_ip_address
user = local.admin_username
password = var.initial_password
port = 5985
https = false
timeout = "10m"
}
source = "${path.module}/scripts"
destination = "C:/tmp/provision"
}
provisioner "remote-exec" {
connection {
type = "winrm"
host = module.qmi-nic.private_ip_address
user = local.admin_username
password = var.initial_password
port = 5985
https = false
timeout = "10m"
}
inline = [
"powershell.exe -File C:/tmp/provision/bootstrap.ps1",
"powershell.exe -File C:/tmp/provision/password.ps1 -Username ${local.admin_username} -Pass ${local.admin_password}"
]
}
# Rename Computer
provisioner "remote-exec" {
connection {
type = "winrm"
host = module.qmi-nic.private_ip_address
user = local.admin_username
password = local.admin_password
port = 5985
https = false
timeout = "10m"
}
inline = [
"powershell.exe -File C:/tmp/provision/RenameComputer.ps1 -NewName ${local.virtual_machine_name} ${local.notrename}"
]
on_failure = continue
}
}

View File

@@ -1,14 +0,0 @@
Param(
[string] $NewName,
[switch] $NotApply = $False
)
if ($NotApply){
Write-Host "Not renaming machine"
} else {
Write-Host "Machine is going to be renamed as $NewName"
Rename-Computer -NewName $NewName -Force -Restart
}

View File

@@ -1,30 +0,0 @@
New-Item -ItemType directory -Path C:\Windows\System32\WindowsPowerShell\v1.0\Modules\qmiCLI -force | Out-Null
Copy-Item $PSScriptRoot\qmiCLI.psm1 C:\Windows\System32\WindowsPowerShell\v1.0\Modules\qmiCLI\qmiCLI.psm1 | Out-Null
Import-Module qmiCLI.psm1 | Out-Null
#Importing Utils module
New-Item -ItemType directory -Path C:\Windows\System32\WindowsPowerShell\v1.0\Modules\qmiUtils -force | Out-Null
Copy-Item $PSScriptRoot\qmiUtils.psm1 C:\Windows\System32\WindowsPowerShell\v1.0\Modules\qmiUtils\qmiUtils.psm1 | Out-Null
Import-Module qmiUtils.psm1 | Out-Null
Write-Log "Scripts locations is: $PSScriptRoot"
#Install Chocolatey
#Write-Log "Install Chocolatey"
#Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
### Disable Password policy
secedit /export /cfg c:\secpol.cfg | Out-Null
(Get-Content C:\secpol.cfg).replace("PasswordComplexity = 1", "PasswordComplexity = 0") | Out-File C:\secpol.cfg | Out-Null
secedit /configure /db c:\windows\security\local.sdb /cfg c:\secpol.cfg /areas SECURITYPOLICY | Out-Null
rm -force c:\secpol.cfg -confirm:$false | Out-Null
#Write-Log "Resize Partition C to max size"
#$size = Get-PartitionSupportedSize -DriveLetter C
#Resize-Partition -DriveLetter C -Size $size.SizeMax | Out-Null

View File

@@ -1,12 +0,0 @@
Param(
[string] $Username,
[string] $Pass
)
Import-Module "Carbon"
$secpasswd = ConvertTo-SecureString $Pass -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($Username, $secpasswd)
Install-CUser -Credential $cred
Write-Log "Done! Setting new password to user $Username"

View File

@@ -1,189 +0,0 @@
<#
Module: QlikCLI
Author: Clint Carr
Byron Ainsworth
Modified by: -
last updated: 10/10/2017
Modification History:
-
Intent: Provide prepackaged commands to facilitate common QMI activities
Dependencies:
-
#>
function Write-Log
{
param (
[Parameter(Mandatory)]
[string]$Message,
[Parameter()]
[ValidateSet('Info','Warn','Error')]
[string]$Severity = 'Info'
)
$line = [pscustomobject]@{
'DateTime' = (Get-Date)
'Severity' = $Severity
'Message' = $Message
}
Write-Host "$($line.DateTime) [$($line.Severity)]: $($line.Message)"
$line | Export-Csv -Path c:\provision\QMIProvision.log -Append -NoTypeInformation
}
Function Backup-QMIAppsSerial
{
param (
[Parameter()]
[string]$Source = 'c:\QlikShare\apps\',
[Parameter()]
[string]$Destination = '\\VBOXSVR\shared-content\apps'
)
Write-Log -Message "Commencing export process for local Qlik Sense Apps repository" -Severity 'Info'
### Get Apps
Write-Log -Message "Identifying eligible local Qlik Sense Apps" -Severity 'Info'
$arrApps = Get-QlikApp | ? {$_.stream.name -ne 'monitoring apps'}
Write-Log -Message "Qlik Sense Apps identified: $($arrApps.Count)" -Severity 'Info'
Foreach($objApp in $arrApps){
If($objApp.Published -eq $True){
If(Test-Path -Path $($Destination + '\' + $objApp.stream.name)){
}
else{
Write-Log -Message "Identified new stream $($objApp.stream.name). Creating central stream repository" -Severity 'Info'
New-Item -ItemType Directory -Path $($Destination + '\' + $objApp.stream.name) -Force
}
$objApp | Export-QlikApp -filename $($Destination + '\' + $($objApp.stream.name) + '\' +$objApp.name + '.qvf')
Write-Log -Message "Qlik Sense Apps exported: $($objApp.Name)" -Severity 'Info'
}else{
$objApp | Export-QlikApp -filename $($Destination + '\' + $objApp.name + '.qvf')
Write-Log -Message "Qlik Sense Apps exported: $($objApp.Name)" -Severity 'Info'
}
}
Write-Log -Message "Concluding export process for local Qlik Sense Apps repository" -Severity 'Info'
}
Function Backup-QMIApps
{
param (
[Parameter()]
[string]$Source = 'c:\QlikShare\apps\',
[Parameter()]
[string]$Destination = '\\VBOXSVR\shared-content\apps'
)
Write-Log -Message "Commencing export process for local Qlik Sense Apps repository" -Severity 'Info'
}
Function Backup-QMIExtensions
{
param (
[Parameter()]
[string]$Source = 'C:\QlikShare\StaticContent\Extensions\',
[Parameter()]
[string]$Destination = '\\VBOXSVR\shared-content\extensions'
)
Write-Log -Message "Commencing export process for Extensions to from local $env:computername to central shared-content repository" -Severity 'Info'
## Verify source directory exists
If (Test-Path $Source){
Write-Log -Message "Confirmed local Extensions repository exists" -Severity 'Info'
Try
{
$arrExtensions = Get-ChildItem -Path $Source | ? {$_.Name -notlike "idevio*"}
foreach($objExtension in $arrExtensions){
Compress-Archive -Path $objExtension.FullName -DestinationPath $($Destination + '\' + $objExtension.name + '.zip' ) -CompressionLevel 'Optimal' -Force
}
#$arrObjects | Copy-Item -Destination $Destination -Recurse -Force -Verbose
Write-Log -Message "Concluding export process for Extensions repository" -Severity 'Info'
}
Catch
{
$_.Exception.Message
$_.Exception.ItemName
Write-Log -Message "Something went wrong with the file transfer. Confirm shared-content is available at $Destination" -Severity 'Error'
}
}else{
Write-Log -Message "Local Extensions repository does not exist. If you have placed your local repository in a location other than $Source you can leverage the Source argument to override" -Severity 'Error'
Exit
}
}
Function Backup-QMIReferenceData
{
param (
[Parameter()]
[string]$Source = 'c:\QlikShare\ReferenceData\',
[Parameter()]
[string]$Destination = '\\VBOXSVR\shared-content\ReferenceData'
)
Write-Log -Message "Commencing export process for ReferenceData to from local $env:computername to central shared-content repository" -Severity 'Info'
## Verify source directory exists
If (Test-Path $Source){
Write-Log -Message "Confirmed local ReferenceData repository exists" -Severity 'Info'
Try
{
$arrObjects = Get-ChildItem -Path $Source
$arrObjects | Copy-Item -Destination $Destination -Recurse -Force -Verbose
Write-Log -Message "Concluding export process for ReferenceData repository" -Severity 'Info'
}
Catch
{
Write-Log -Message "Something went wrong with the file transfer. Confirm shared-content is available at $Destination" -Severity 'Error'
}
}else{
Write-Log -Message "Local ReferenceData repository does not exist. If you have placed your local repository in a location other than $Source you can leverage the Source argument to override" -Severity 'Error'
Exit
}
}
Function Backup-QMIContentLibraries
{
param (
[Parameter()]
[string]$Source = 'C:\QlikShare\StaticContent\Content\',
[Parameter()]
[string]$Destination = '\\VBOXSVR\shared-content\ContentLibrary'
)
Write-Log -Message "Commencing export process for ContentLibraries to from local $env:computername to central shared-content repository" -Severity 'Info'
## Verify source directory exists
If (Test-Path $Source){
Write-Log -Message "Confirmed local ContentLibraries repository exists" -Severity 'Info'
Try
{
$arrObjects = Get-ChildItem -Path $Source
$arrObjects | Copy-Item -Destination $Destination -Recurse -Force -Verbose
Write-Log -Message "Concluding export process for ContentLibraries repository" -Severity 'Info'
}
Catch
{
Write-Log -Message "Something went wrong with the file transfer. Confirm shared-content is available at $Destination" -Severity 'Error'
}
}else{
Write-Log -Message "Local ContentLibraries repository does not exist. If you have placed your local repository in a location other than $Source you can leverage the Source argument to override" -Severity 'Error'
Exit
}
}

View File

@@ -1,92 +0,0 @@
<#
Module: UtilsQMI
Author: Manuel Romero
Clint Car
Modified by: -
last updated: 11/10/2017
Modification History:
-
Intent: One place for common functions across modules we don't want in qmiCLI
Dependencies:
-
#>
Function New-MyCredential
{
param (
[string] $user,
[string] $pass
)
PROCESS {
$secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force
return New-Object System.Management.Automation.PSCredential ($user, $secpasswd)
}
}
Function CreateOdagLink
{
param (
[string]$odagLinkName,
[string]$selectionAppName,
[string]$detailsAppName,
[string]$sheet2OpenName,
[string]$odagLinkExpression,
[int]$rowsLimit,
[int]$appsLimit,
[string]$retentionTime,
[string]$sheetEmbedName
)
PROCESS {
Trap {
Write-Log -Message "Error in function CreateOdagLink" -Severity "Error"
Write-Log -Message $_.Exception.Message -Severity "Error"
Break
}
Write-Log -Message "Installing NodeJs"
cinst nodejs.install --version 6.4.0 | Out-Null
if ( -Not (Test-Path C:\OdagEnigma) ) {
Write-Log -Message "Unzipping Node EnigmaJS"
Expand-Archive -LiteralPath C:\installation\EnigmaModule.zip -DestinationPath C:\OdagEnigma -Force | Out-Null
}
# Create ODAG Link
Write-Log -Message "Adding ODAG Link"
#$rawOutput = $true
$detailApp = $(Get-QlikApp -filter "name eq '$detailsAppName'").id
$selectionApp = $(Get-QlikApp -filter "name eq '$selectionAppName'").id
$sheetID = $(Invoke-QlikGet "/qrs/app/object" -filter "name eq '$sheet2OpenName' and objectType eq 'sheet'").engineObjectId
$data = (@{"name"=$odagLinkName;
"templateApp"=$detailApp;
"rowEstExpr"=$odagLinkExpression;
"properties"=@{
"rowEstRange"=@(@{"context"="*";"highBound"=$rowsLimit});
"genAppLimit"=@(@{"context"="User_*";"limit"=$appsLimit});
"appRetentionTime"=@(@{"context"="User_*";"retentionTime"=$retentionTime});
"targetSheet"=@(@{"context"="User_*";"sheetId"=$sheetID})};
"selectionApp"=$selectionApp}) | ConvertTo-Json -Compress -Depth 10
$result = $(Invoke-QlikPost "/api/odag/v1/links" $data)
$odagLinkRef = $result.objectDef.id
Write-Log -Message "ODAG link added $odagLinkRef"
$sheetSelectionID = $(invoke-qlikget "/qrs/app/object" -filter "name eq '$sheetEmbedName' and objectType eq 'sheet'").engineObjectId
# EnigmaJS to attach this link to apps and sheet using APIs
C:\OdagEnigma\run.bat $odagLinkRef $odagLinkName $sheetSelectionID $selectionAppName $detailsAppName
return $odagLinkRef
}
}

View File

@@ -1,66 +0,0 @@
variable "prefix" {
default = "QMI"
}
variable "subnet_id" {
}
variable "location" {
}
variable "snapshot_id" {
}
variable "resource_group_name" {
}
variable "vm_type" {
default = "Standard_D4s_v3"
}
variable "managed_disk_type" {
default = "Premium_LRS"
}
variable "disk_size_gb" {
default = "128"
}
variable "admin_username" {
default = "scdemoadmin"
}
variable "initial_password" {
}
variable "virtual_machine_name" {
default = null
}
variable "user_id" {
default = null
}
variable "provId" {
default = null
}
variable "is_24x7"{
type = bool
default = null
}
variable "shutdownTime"{
default = null
}
variable "startupTime"{
default = null
}
variable "notrename" {
default = null
}

View File

@@ -1,154 +0,0 @@
resource "random_id" "randomMachineId" {
keepers = {
# Generate a new ID only when a new resource group is defined
resource_group = var.resource_group_name
}
byte_length = 2
}
resource "random_password" "password" {
length = 16
special = true
override_special = "_!@"
upper = true
lower = true
min_lower = 2
min_upper = 2
min_special = 2
}
resource "random_password" "qlikpassword" {
length = 16
special = true
override_special = "_!@"
upper = true
lower = true
min_lower = 2
min_upper = 2
min_special = 2
}
locals {
virtual_machine_name = "${var.prefix}-${random_id.randomMachineId.hex}"
admin_username = var.admin_username
admin_password = random_password.password.result
}
data "azurerm_key_vault_secret" "cert-password" {
name = "star-qmi-qlikpoc-com-password"
key_vault_id = var.key_vault_id
}
data "azurerm_key_vault_secret" "sensorsettings" {
name = "carbonblack-sensorsettings"
key_vault_id = var.key_vault_id
}
module "qmi-nic" {
source = "git::https://gitlab.com/qmi/qmi-cloud-tf-modules.git//qmi-nic"
prefix = local.virtual_machine_name
location = var.location
subnet_id = var.subnet_id
resource_group_name = var.resource_group_name
user_id = var.user_id
}
resource "azurerm_virtual_machine" "vm" {
name = local.virtual_machine_name
location = var.location
resource_group_name = var.resource_group_name
network_interface_ids = [module.qmi-nic.id]
vm_size = var.vm_type
delete_os_disk_on_termination = true
delete_data_disks_on_termination = true
storage_image_reference {
id = var.image_reference
}
storage_os_disk {
name = "${local.virtual_machine_name}-osdisk"
caching = "ReadWrite"
create_option = "FromImage"
managed_disk_type = var.managed_disk_type
disk_size_gb = var.disk_size_gb
}
os_profile {
computer_name = local.virtual_machine_name
admin_username = local.admin_username
admin_password = local.admin_password
}
os_profile_windows_config {
provision_vm_agent = true
enable_automatic_upgrades = false
winrm {
protocol = "http"
}
}
provisioner "file" {
connection {
type = "winrm"
host = module.qmi-nic.private_ip_address
user = local.admin_username
password = local.admin_password
port = 5985
https = false
timeout = "3m"
}
source = "${path.module}/scripts"
destination = "C:/provision"
}
provisioner "remote-exec" {
connection {
type = "winrm"
host = module.qmi-nic.private_ip_address
user = "qservice"
password = "Qlik1234"
port = 5985
https = false
timeout = "3m"
}
inline = [
"powershell.exe -File C:/provision/resethostname.ps1"
]
}
provisioner "remote-exec" {
connection {
type = "winrm"
host = module.qmi-nic.private_ip_address
user = "qservice"
password = "Qlik1234"
port = 5985
https = false
timeout = "3m"
}
inline = [
"powershell.exe -File C:/provision/qs-post-cfg.ps1 -Hostname ${var.resource_group_name}.qmi.qlik-poc.com -CertPwd \"${data.azurerm_key_vault_secret.cert-password.value}\" -QlikUserPwd ${random_password.qlikpassword.result}",
"powershell.exe -File C:/provision/np-post.ps1"
]
}
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
"ProvId" = var.provId != null? var.provId : null
"QMI_user" = var.user_id != null? var.user_id : null
"24x7" = var.is_24x7 == true? "" : null
"ShutdownTime": var.is_24x7 == false? var.shutdownTime : null
"StartupTime": var.is_24x7 == false? var.startupTime : null
}
}

View File

@@ -1,16 +0,0 @@
Param(
[string] $SensorSettings
)
Write-Log -Message "Installing and configuring Carbon Black"
New-Item C:\provision\sensorsettings.ini | Out-Null
Set-Content C:\provision\sensorsettings.ini $SensorSettings | Out-Null
(Get-Content C:\provision\sensorsettings.ini) -replace ' ',"`r`n" | Set-Content C:\provision\sensorsettings.ini -Force
C:\provision\CarbonBlackClientSetup.exe /S
Write-Log -Message "Carbon Black is configure!"

View File

@@ -1,27 +0,0 @@
Function restartNPServices
{
write-log -Message "Starting NPrinting Services on $env:COMPUTERNAME"
Set-Service -Name QlikNPrintingEngine -StartupType Automatic
Set-Service -Name QlikNPrintingWebEngine -StartupType Automatic
Set-Service -Name QlikNPrintingScheduler -StartupType Automatic
Set-Service -Name QlikNPrintingMessagingService -StartupType Automatic
Set-Service -Name QlikNPrintingRepoService -StartupType Automatic
Set-Service -Name QlikNPrintingLicenseService -StartupType Automatic
Start-Service -InputObject QlikNPrintingRepoService -ErrorAction SilentlyContinue
Start-Service -InputObject QlikNPrintingMessagingService -ErrorAction SilentlyContinue
Start-Service -InputObject QlikNPrintingWebEngine -ErrorAction SilentlyContinue
Start-Service -InputObject QlikNPrintingEngine -ErrorAction SilentlyContinue
Start-Service -InputObject QlikNPrintingScheduler -ErrorAction SilentlyContinue
Start-Service -InputObject QlikNPrintingLicenseService -ErrorAction SilentlyContinue
}
Write-Log -Message "Exporting new certificates"
Export-QlikCertificate -machineNames "localhost" -includeSecretsKey -exportFormat "Windows"
Export-QlikCertificate -machineNames "localhost" -includeSecretsKey -exportFormat "Pem"
Copy-Item "C:\ProgramData\Qlik\Sense\Repository\Exported Certificates\localhost\client.pfx" -Destination "C:\Program Files\NPrintingServer\Settings\SenseCertificates" -Force
restartNPServices

View File

@@ -1,172 +0,0 @@
<#
Module: qs-post-cfg
Author: Clint Carr
Modified by: -
Modification History:
- Fixed connect as user logic (qlik-cli change)
- Added logic to accomodate for Professional/Analyzer or User licenses
- Added a loop into the Connect-Qlik statement to remove an abort error
- Added Logging
- Added comments
- Error checking
- Modified service connection for Qlik Sense from endless loop to a set number of attempts.
- Added a service restart at the end of the Central Node (seems to resolve an issue with April 2018)
last updated: 10/18/2019
Intent: Configure the Qlik Sense environment with applications and Security Rules.
#>
Param(
[string] $Hostname,
[string] $CertPwd,
[string] $QlikUserPwd
)
Import-Module Qlik-Cli
Import-Module "Carbon"
# Helper Functions
# ----------------
function New-Credential($u,$p) {
$secpasswd = ConvertTo-SecureString $p -AsPlainText -Force
return New-Object System.Management.Automation.PSCredential ($u, $secpasswd)
}
Write-Log -Message "Creating Qlik account"
$cred = New-Credential "Qlik" $QlikUserPwd
Install-CUser -Credential $cred
Write-Log -Message "Starting qs-post-cfg.ps1"
### Waiting for Qlik Sense installation to complete
#-----------
Function restartQse
{
Write-Log "Checking Engine Service has started..."
$qse = get-service QlikSenseEngineService
write-log -Message "The engine is currently $($qse.Status)"
if ($qse.Status -eq "Stopped") {
Write-Log -Message "Starting Qlik Sense Engine and waiting 120 seconds" -Severity "Warn";
Start-Service QlikSenseEngineService ;
Restart-Service QlikSenseServiceDispatcher;
start-sleep -s 120
}
write-log -Message "The engine is currently $($qse.Status)"
}
Function connQSR
{
$i = 1
$statusCode = 0
while ($statusCode -ne 200 -and $i -le 10)
{
try {$statusCode = (Invoke-WebRequest https://$($env:COMPUTERNAME)/qps/user -UseBasicParsing).statusCode }
catch
{
$i++
write-log -Message "QSR on $env:COMPUTERNAME not responding attempt $i of 10..." -Severity "Warn"
start-sleep -s 20
}
}
}
Function restartServices
{
write-log -Message "Restarting Qlik Sense Services on $env:COMPUTERNAME" -Severity "Warn"
Restart-Service QlikSenseRepositoryDatabase -Force
Restart-Service QlikLoggingService -Force
Restart-Service QlikSenseServiceDispatcher -Force
Restart-Service QlikSenseRepositoryService -Force
Restart-Service QlikSenseProxyService -Force
Restart-Service QlikSenseEngineService -Force
Restart-Service QlikSensePrintingService -Force
Restart-Service QlikSenseSchedulerService -Force
}
Function qlikSenseUserAccess
{
$userAccessGroup = (@{name = "License Everyone";} | ConvertTo-Json -Compress -Depth 10)
$licenseId = Invoke-QlikPost "/qrs/License/UserAccessGroup" $userAccessGroup
$systemRuleJson = (@{
name = "Grant Everyone a token";
category = "License";
rule = '((user.name like "*"))';
type = "Custom";
resourceFilter = "License.UserAccessGroup_" + $licenseId.id;
actions = 1;
ruleContext = "QlikSenseOnly";
disabled = $false;
comment = "Rule to set up automatic user access";} | ConvertTo-Json -Compress -Depth 10)
Write-Log -Message "Adding user license rule to grant Everyone Tokens."
try {
Invoke-QlikPost "/qrs/SystemRule" $systemRuleJson | Out-Null
} catch {
Write-Log -Message $_.Exception.Message -Severity "Error"
}
}
Function qlikSenseProfessionalAccess
{
$professionalAccessGroup = (@{name = "License Everyone";} | ConvertTo-Json -Compress -Depth 10)
$licenseId = Invoke-QlikPost "/qrs/License/ProfessionalAccessGroup" $professionalAccessGroup
$systemRuleJson = (@{
name = "Grant Everyone Professional Access";
category = "License";
rule = '((user.name like "*"))';
type = "Custom";
resourceFilter = "License.ProfessionalAccessGroup_" + $licenseId.id;
actions = 1;
ruleContext = "QlikSenseOnly";
disabled = $false;
comment = "Rule to set up automatic user access";} | ConvertTo-Json -Compress -Depth 10)
Write-Log -Message "Adding user license rule to grant Everyone access as Professional."
try {
Invoke-QlikPost "/qrs/SystemRule" $systemRuleJson | Out-Null
} catch {
Write-Log -Message $_.Exception.Message -Severity "Error"
}
}
#-----------
write-log -Message "Waiting 1 minute for Qlik Sense installation to complete"
start-sleep -s 60
### wait for Qlik Sense Proxy service to respond with an HTTP 200 status before proceeding
connQSR
$statusCode = (Invoke-WebRequest https://$($env:COMPUTERNAME)/qps/user -UseBasicParsing).statusCode
if ($statusCode -ne 200)
{
Write-Log -Message "Waiting 25 seconds before next pass" -Severity "Warn"
restartServices
Write-Log -Message "Waiting 45 seconds for Services to ensure they are ready" -Severity "Warn"
start-sleep -s 45
connQSR
}
$statusCode = (Invoke-WebRequest https://$($env:COMPUTERNAME)/qps/user -UseBasicParsing).statusCode
if ($statusCode -ne 200) {
Write-Log -Message "Provisioning failed" -Severity "Error"
Exit
}
Write-Log -Message "Qlik Sense Proxy responding on $env:COMPUTERNAME, status code: $statusCode"
Write-Log -Message "Connecting to Qlik Sense Repository Service on $env:COMPUTERNAME"
restartQse
### Connect to the Qlik Sense Repository Service with Qlik-Cli
do {write-log -Message "Connecting to Qlik Sense Repository"; start-sleep 15}
While( (Connect-Qlik $($env:COMPUTERNAME) -TrustAllCerts -UseDefaultCredentials -ErrorAction SilentlyContinue).length -eq 0 )
### Install qlik-poc_com certificate
Write-Log -Message "Install qlik-poc_com certificate"
try {
$secpasswd = ConvertTo-SecureString $CertPwd -AsPlainText -Force
$sslCert=Import-PfxCertificate -FilePath C:/provision/wildcard_qmi_qlik-poc_com.pfx -CertStoreLocation Cert:\LocalMachine\My -Password $secpasswd
Update-QlikProxy -SslBrowserCertificateThumbprint $sslCert.Thumbprint -id (Get-QlikProxy).id | Out-Null
Start-Sleep -s 10
Update-QlikVirtualProxy -id (Get-QlikVirtualProxy -filter "description eq 'Central Proxy (Default)'").id -websocketCrossOriginWhiteList $Hostname | Out-Null
} catch {
Write-Log -Message $_.Exception.Message -Severity "Error"
}

View File

@@ -1,97 +0,0 @@
Write-Log "Resize Partition C to max size"
$size = Get-PartitionSupportedSize -DriveLetter C
Resize-Partition -DriveLetter C -Size $size.SizeMax
# Helper Functions
# ----------------
function New-Credential($u,$p) {
$secpasswd = ConvertTo-SecureString $p -AsPlainText -Force
return New-Object System.Management.Automation.PSCredential ($u, $secpasswd)
}
$cred = New-Credential "qservice" "Qlik1234"
#import-module "Carbon"
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f
Set-Service -Name "QlikLoggingService" -StartupType Automatic
Set-Service -Name "QlikSenseServiceDispatcher" -StartupType Automatic
Set-Service -Name "QlikSenseProxyService" -StartupType Automatic
Set-Service -Name "QlikSenseEngineService" -StartupType Automatic
Set-Service -Name "QlikSensePrintingService" -StartupType Automatic
Set-Service -Name "QlikSenseSchedulerService" -StartupType Automatic
Set-Service -Name "QlikSenseRepositoryService" -StartupType Automatic
Set-Service -Name "QlikSenseRepositoryDatabase" -StartupType Automatic
Write-Log "Starting QlikSenseRepositoryDatabase and QlikSenseServiceDispatcher"
Start-Service QlikSenseRepositoryDatabase
Start-Service QlikSenseServiceDispatcher
#Delete certificates
Write-Log "Deleting old certificates"
#Get-ChildItem "$($env:ProgramData)\Qlik\Sense\Repository\Exported Certificates\" | Remove-Item -Recurse
$Certs = Get-ChildItem cert:"CurrentUser\My" | Where-Object { $_.Subject -match 'QlikClient' }
$Certs | ForEach-Object{Remove-Item -path $_.PSPath -recurse -Force}
$Certs = Get-ChildItem cert:"LocalMachine\My" | Where-Object { $_.Subject -match 'GEN-QS' -or $_.Subject -match 'QMI-QS' }
$Certs | ForEach-Object{Remove-Item -path $_.PSPath -recurse -Force}
$Certs = Get-ChildItem cert:"LocalMachine\Root" | Where-Object { $_.Subject -match 'GEN-QS' -or $_.Subject -match 'QMI-QS' }
$Certs | ForEach-Object{Remove-Item -path $_.PSPath -recurse -Force}
Write-Log "Setting new hostname to Host.cfg file"
Write-Log $($env:computername)
$enchostname = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("$($env:computername)"))
Set-Content -Path C:\ProgramData\Qlik\Sense\Host.cfg -Value $enchostname
Write-Log "Recreating Qlik Sense certificates"
# AS if qservice user
Start-Process powershell.exe -ArgumentList "Start-Process cmd.exe -Verb runAs -ArgumentList '/k C:\PROGRA~1\Qlik\Sense\Repository\Repository.exe -bootstrap -standalone -restorehostname'"
#From PS
#Start-Process -FilePath "C:\PROGRA~1\Qlik\Sense\Repository\Repository.exe" -ArgumentList "/bootstrap /standalone /restorehostname" -Verb runAs
#qs
#Start-Process powershell.exe -Credential $cred -ArgumentList "Start-Process cmd.exe -Verb runAs -ArgumentList '/k C:\PROGRA~1\Qlik\Sense\Repository\Repository.exe -bootstrap -standalone -restorehostname'"
$waiting=50
Write-Log "Waiting $waiting secs ..."
Start-Sleep -s $waiting
#- Wait 10 seconds
Write-Log "Restarting Service Dispatcher"
#- Restart Service Dispacher
Restart-Service QlikSenseServiceDispatcher -Force
#- Restart rest of the services
Start-Sleep -s 20
Write-Log "New Certs: CurrentUser\My"
Get-ChildItem cert:"CurrentUser\My"
Write-Log "New Certs: LocalMachine\My"
Get-ChildItem cert:"LocalMachine\My"
Write-Log "New Certs: LocalMachine\Root"
Get-ChildItem cert:"LocalMachine\Root" | Where-Object { $_.Subject -match 'QMI' }
$NewCerts = Get-ChildItem cert:"LocalMachine\Root" | Where-Object { $_.Subject -match 'QMI' }
if ($NewCerts) {
Write-Log "Restarting all Qlik Sense services"
Restart-Service QlikSenseServiceDispatcher -Force
Restart-Service QlikLoggingService -Force
Restart-Service QlikSenseRepositoryService -Force
Restart-Service QlikSenseProxyService -Force
Restart-Service QlikSenseEngineService -Force
Restart-Service QlikSenseSchedulerService -Force
Restart-Service QlikSensePrintingService -Force
Start-Sleep -s 20
Write-Log "Recovering Qlik Sense users"
Start-Process powershell.exe -ArgumentList "Start-Process cmd.exe -Verb runAs -ArgumentList '/c C:\provision\updatedir.bat'"
Restart-Service QlikSenseRepositoryService -Force
} else {
Write-Error "Error: Qlik Sense Certs not recreated!"
throw "Error: Qlik Sense Certs not recreated!"
}
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 5 /f

View File

@@ -1,10 +0,0 @@
@echo off
set host_name=localhost
set owner_name=postgres
set PGPASSWORD=Qlik1234
C: && cd "C:\Program Files\Qlik\Sense\Repository\PostgreSQL\9.6\bin" && psql -p 4432 -U %owner_name% -d QSR --command "UPDATE public.\"Users\" SET \"UserDirectory\" = '%COMPUTERNAME%', \"RolesString\" = 'RootAdmin' WHERE \"UserDirectory\" != 'INTERNAL';"
psql -p 4432 -U %owner_name% -d QSR --command "SELECT * FROM public.\"Users\" WHERE \"RolesString\" = 'RootAdmin';"
cd "C:\provision"
@echo off

19
aws-credentials/main.tf Normal file
View File

@@ -0,0 +1,19 @@
terraform {
required_version = ">= 0.13"
}
provider "azurerm" {
features {}
subscription_id = var.subscription_id
use_msi = true
}
data "azurerm_key_vault_secret" "qmi-aws-access-key" {
name = "qmi-aws-access-key"
key_vault_id = var.key_vault_id
}
data "azurerm_key_vault_secret" "qmi-aws-access-secret" {
name = "qmi-aws-access-secret"
key_vault_id = var.key_vault_id
}

View File

@@ -0,0 +1,7 @@
output "qmi-aws-access-key" {
value = data.azurerm_key_vault_secret.qmi-aws-access-key.value
}
output "qmi-aws-access-secret" {
value = data.azurerm_key_vault_secret.qmi-aws-access-secret.value
}

View File

@@ -0,0 +1,7 @@
variable "subscription_id" {
default = "62ebff8f-c40b-41be-9239-252d6c0c8ad9"
}
variable "key_vault_id" {
default = "/subscriptions/62ebff8f-c40b-41be-9239-252d6c0c8ad9/resourceGroups/QMI-Machines/providers/Microsoft.KeyVault/vaults/qmisecrets"
}

View File

@@ -14,7 +14,8 @@ data "azurerm_key_vault_secret" "cert-password" {
}
locals {
composeLicense = (var.c_version == "c4dw")? data.azurerm_key_vault_secret.c4dw.value : data.azurerm_key_vault_secret.compose-license.value
composeLicense = (var.c_version == "c4dw")? nonsensitive(data.azurerm_key_vault_secret.c4dw.value) : nonsensitive(data.azurerm_key_vault_secret.compose-license.value)
cert_password = nonsensitive(data.azurerm_key_vault_secret.cert-password.value)
}
# Install and configure Compose
@@ -50,7 +51,7 @@ resource "null_resource" "install" {
"powershell.exe -File C:/provision/compose-install/di-compose-getBinary.ps1 -url ${var.download_url}",
"powershell.exe -File C:/provision/compose-install/di-compose-install.ps1 -url ${var.download_url} -version ${var.c_version}",
"powershell.exe -File C:/provision/compose-install/di-compose-setlicense.ps1 -composeLicense \"${local.composeLicense}\" -version ${var.c_version}",
"powershell.exe -File C:/provision/compose-install/di-compose-installQMICertificate.ps1 -CertPwd \"${data.azurerm_key_vault_secret.cert-password.value}\" -version ${var.c_version}",
"powershell.exe -File C:/provision/compose-install/di-compose-installQMICertificate.ps1 -CertPwd \"${local.cert_password}\" -version ${var.c_version}",
]
}

View File

@@ -11,22 +11,6 @@ terraform {
}
}
provider "aws" {
region = var.region
access_key = var.aws_provider_access_key
secret_key = var.aws_provider_access_secret
}
provider "aws" {
region = var.region
access_key = var.aws_provider_access_key
secret_key = var.aws_provider_access_secret
alias = "myaws"
}
locals {
myRegex = "/[^[:alpha:]]/"
splitLower = split(" ", lower(var.user_id))
@@ -38,10 +22,17 @@ locals {
scnamelower = "${local.container_n1}${local.container_n2}${local.container_n3}"
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
ProvID = var.provision_id
Name = "qmi-${var.provision_id}"
}
}
resource "aws_kinesis_stream" "attrep_apply_exceptions" {
provider = aws.myaws
name = "${local.scnamelower}.attrep_apply_exceptions"
shard_count = 1
@@ -50,15 +41,10 @@ resource "aws_kinesis_stream" "attrep_apply_exceptions" {
stream_mode = "PROVISIONED"
}*/
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
tags = local.tags
}
resource "aws_kinesis_stream" "semployees" {
provider = aws.myaws
name = "${local.scnamelower}.EMPLOYEES"
shard_count = 3
@@ -67,15 +53,10 @@ resource "aws_kinesis_stream" "semployees" {
stream_mode = "PROVISIONED"
}*/
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
tags = local.tags
}
resource "aws_kinesis_stream" "sjobs" {
provider = aws.myaws
name = "${local.scnamelower}.JOBS"
shard_count = 3
@@ -84,15 +65,10 @@ resource "aws_kinesis_stream" "sjobs" {
stream_mode = "PROVISIONED"
}*/
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
tags = local.tags
}
resource "aws_kinesis_stream" "metadata" {
provider = aws.myaws
name = "${local.scnamelower}.metadata"
shard_count = 1
@@ -101,19 +77,12 @@ resource "aws_kinesis_stream" "metadata" {
stream_mode = "PROVISIONED"
}*/
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
tags = local.tags
}
module "iam_user" {
source = "terraform-aws-modules/iam/aws//modules/iam-user"
providers = {
aws = aws.myaws
}
version = "~> 3.0"
@@ -125,18 +94,12 @@ module "iam_user" {
password_reset_required = false
tags = {
Deployment = "QMI"
"Cost Center" = "3100"
QMI_user = var.user_id
}
tags = local.tags
}
resource "aws_iam_user_policy" "kinesis_pol" {
provider = aws.myaws
name = "kinesis_policy_${module.iam_user.this_iam_user_name}"
user = module.iam_user.this_iam_user_name

View File

@@ -1,9 +1,3 @@
variable "aws_provider_access_key" {
}
variable "aws_provider_access_secret" {
}
variable "region" {
default = "us-east-1"
}

View File

@@ -10,17 +10,6 @@ terraform {
}
}
provider "aws" {
region = var.region
access_key = var.aws_provider_access_key
secret_key = var.aws_provider_access_secret
alias = "myaws"
}
locals {
provid5 = substr(var.provision_id, 0, 5)
aurora = (var.engine == "aurora-mysql") ? true : (var.engine == "aurora-postgresql") ? true : false
@@ -33,24 +22,21 @@ locals {
major_engine_version = (var.engine == "oracle-se2") ? "19" : (var.engine == "postgres") ? "13" : (var.engine == "mysql") ? "8.0" : (var.engine == "aurora-postgresql") ? "12" : (var.engine == "aurora-mysql") ? "5.7" : (var.engine == "sqlserver-ex") ? "15.00" : "10.5" #mariaDB
family = (var.engine == "oracle-se2") ? "oracle-se2-19" : (var.engine == "postgres") ? "postgres13" : (var.engine == "mysql") ? "mysql8.0" : (var.engine == "aurora-postgresql") ? "aurora-postgresql12" : (var.engine == "aurora-mysql") ? "aurora-mysql5.7" : (var.engine == "sqlserver-ex") ? "sqlserver-ex-15.0" : "mariadb10.5" #mariaDB
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
ProvID = var.provision_id
Name = "qmi-${var.provision_id}"
}
}
module "security_group" {
count = var.enabled? 1 : 0
# SGs created here as Ports differ per Engine. Only Azure Firewall IPs added for now.
source = "terraform-aws-modules/security-group/aws"
version = "~> 4.3"
providers = {
aws = aws.myaws
}
name = "${var.provision_id}-SG"
description = "${var.provision_id}-SG"
vpc_id = local.vpc_id
@@ -167,11 +153,7 @@ module "common_rds_instance" {
source = "terraform-aws-modules/rds/aws"
version = "~> 3.3"
count = local.aurora? 0 : var.enabled? 1 : 0
providers = {
aws = aws.myaws
}
count = local.aurora? 0 : 1
identifier = "${var.engine}${var.provision_id}"
@@ -192,7 +174,7 @@ module "common_rds_instance" {
multi_az = false
subnet_ids = local.subnet_ids
vpc_security_group_ids = [module.security_group[0].security_group_id]
vpc_security_group_ids = [module.security_group.security_group_id]
publicly_accessible = true
maintenance_window = "Mon:00:00-Mon:03:00"
@@ -210,11 +192,7 @@ module "aurora_rds_instance" {
source = "terraform-aws-modules/rds-aurora/aws"
version = "~> 5.2"
count = (local.aurora && var.enabled)? 1 : 0
providers = {
aws = aws.myaws
}
count = local.aurora? 1 : 0
name = local.name
engine = var.engine
@@ -224,7 +202,7 @@ module "aurora_rds_instance" {
vpc_id = local.vpc_id
subnets = local.subnet_ids
create_security_group = false
vpc_security_group_ids = [module.security_group[0].security_group_id]
vpc_security_group_ids = [module.security_group.security_group_id]
port = local.port
publicly_accessible = true

View File

@@ -1,25 +1,23 @@
output "db_username" {
description = "The master username for the database"
value = (local.aurora && var.enabled)? module.aurora_rds_instance[0].rds_cluster_master_username : var.enabled? module.common_rds_instance[0].db_instance_username : null
sensitive = true
value = (local.aurora)? nonsensitive(module.aurora_rds_instance[0].rds_cluster_master_username) : nonsensitive(module.common_rds_instance[0].db_instance_username)
}
output "db_instance_password" {
description = "The database password (this password may be old, because Terraform doesn't track it after initial creation)"
value = (local.aurora && var.enabled)? module.aurora_rds_instance[0].rds_cluster_master_password : var.enabled? module.common_rds_instance[0].db_instance_password : null
sensitive = true
value = (local.aurora)? nonsensitive(module.aurora_rds_instance[0].rds_cluster_master_password) : nonsensitive(module.common_rds_instance[0].db_instance_password)
}
output "db_instance_port" {
description = "The database port"
value = (local.aurora && var.enabled)? module.aurora_rds_instance[0].rds_cluster_port : var.enabled? module.common_rds_instance[0].db_instance_port : null
value = (local.aurora)? module.aurora_rds_instance[0].rds_cluster_port : module.common_rds_instance[0].db_instance_port
}
output "db_instance_endpoint" {
description = "The connection endpoint"
value = (local.aurora && var.enabled)? module.aurora_rds_instance[0].rds_cluster_endpoint : var.enabled? module.common_rds_instance[0].db_instance_endpoint : null
value = (local.aurora)? module.aurora_rds_instance[0].rds_cluster_endpoint : module.common_rds_instance[0].db_instance_endpoint
}
output "db_instance_name" {
value = (var.enabled)? local.name : null
value = local.name
}

View File

@@ -1,9 +1,3 @@
variable "aws_provider_access_key" {
}
variable "aws_provider_access_secret" {
}
variable "region" {
default = "us-east-1"
}
@@ -66,7 +60,3 @@ variable "instance_size" {
variable "storage" {
default = "20"
}
variable "enabled" {
default = true
}

View File

@@ -1,6 +1,6 @@
terraform {
required_version = ">= 0.13"
required_version = ">= 0.14"
required_providers {
aws = {
@@ -10,16 +10,6 @@ terraform {
}
}
provider "aws" {
region = var.region
access_key = var.aws_provider_access_key
secret_key = var.aws_provider_access_secret
alias = "myaws"
}
resource "random_password" "password" {
length = 16
special = true
@@ -39,8 +29,11 @@ locals {
subnet_ids = (var.region == "eu-west-1") ? var.subnet_ids_eu : (var.region == "us-east-1") ? var.subnet_ids_us : var.subnet_ids_ap
port = "5439"
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
ProvID = var.provision_id
Name = "qmi-${var.provision_id}"
}
}
@@ -49,10 +42,6 @@ module "security_group" {
source = "terraform-aws-modules/security-group/aws"
version = "~> 4.3"
providers = {
aws = aws.myaws
}
name = "${var.provision_id}-SG"
description = "${var.provision_id}-SG"
vpc_id = local.vpc_id
@@ -168,10 +157,6 @@ module "security_group" {
module "redshift" {
providers = {
aws = aws.myaws
}
source = "terraform-aws-modules/redshift/aws"
version = "~> 3.0"
@@ -199,11 +184,10 @@ module "redshift" {
}
module "qmi-s3-bucket" {
source = "git::https://gitlab.com/qmi/qmi-cloud-tf-modules.git//s3-bucket"
source = "git::https://gitlab.com/qmi/qmi-cloud-tf-modules.git//s3-bucket?ref=dev2"
provision_id = var.provision_id
region = var.region
aws_provider_access_key = var.aws_provider_access_key
aws_provider_access_secret = var.aws_provider_access_secret
user_id = var.user_id
}

View File

@@ -27,7 +27,7 @@ output "redshift_cluster_master_username" {
}
output "redshift_cluster_master_password" {
value = random_password.password.result
value = nonsensitive(random_password.password.result)
}
output "s3_bucket_name" {

View File

@@ -1,9 +1,3 @@
variable "aws_provider_access_key" {
}
variable "aws_provider_access_secret" {
}
variable "region" {
default = "us-east-1"
}

View File

@@ -0,0 +1,60 @@
resource "random_password" "password" {
length = 16
special = true
override_special = "_!@"
upper = true
lower = true
min_numeric = 2
min_lower = 2
min_upper = 2
min_special = 2
}
resource "azurerm_mysql_flexible_server" "mysql-server" {
name = "qmi-mysql-${var.provision_id}"
location = var.location
resource_group_name = var.resource_group_name
administrator_login = var.admin_login
administrator_password = random_password.password.result
storage {
size_gb = var.mysql-storage
}
backup_retention_days = 7
sku_name = var.mysql-sku-name
version = var.mysql-version
geo_redundant_backup_enabled = false
//public_network_access_enabled = true
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
}
resource "azurerm_mysql_flexible_database" "example" {
name = "QlikDB"
resource_group_name = var.resource_group_name
server_name = azurerm_mysql_flexible_server.mysql-server.name
charset = "utf8"
collation = "utf8_unicode_ci"
}
resource "azurerm_mysql_flexible_server_configuration" "example" {
name = "binlog_row_image"
resource_group_name = var.resource_group_name
server_name = azurerm_mysql_flexible_server.mysql-server.name
value = "full"
}
resource "azurerm_mysql_flexible_server_firewall_rule" "all-azure-services" {
name = "AllAzureServices"
resource_group_name = var.resource_group_name
server_name = azurerm_mysql_flexible_server.mysql-server.name
start_ip_address = "0.0.0.0"
end_ip_address = "0.0.0.0"
}

View File

@@ -0,0 +1,11 @@
output "db_server_fqdn" {
value = azurerm_mysql_flexible_server.mysql-server.fqdn
}
output "root_username" {
value = var.admin_login
}
output "root_username_password" {
value = nonsensitive(random_password.password.result)
}

View File

@@ -0,0 +1,39 @@
variable "resource_group_name" {
}
variable "provision_id" {
type = string
description = "(optional) describe your variable"
}
variable "location" {
type = string
description = "(optional) describe your variable"
default = "EAST US"
}
variable "user_id" {
}
variable "admin_login" {
type = string
description = "Login to authenticate to MySQL Server"
default = "qmi"
}
variable "mysql-version" {
type = string
description = "MySQL Server version to deploy"
default = "5.7"
}
variable "mysql-sku-name" {
type = string
description = "MySQL SKU Name"
default = "GP_Standard_D2ds_v4"
}
variable "mysql-storage" {
type = string
description = "MySQL Storage in MB"
default = "20"
}

View File

@@ -0,0 +1,61 @@
resource "random_password" "password" {
length = 16
special = true
override_special = "_!@"
upper = true
lower = true
min_numeric = 2
min_lower = 2
min_upper = 2
min_special = 2
}
resource "azurerm_postgresql_flexible_server" "postgresql-server" {
name = "qmi-postgresql-${var.provision_id}"
location = var.location
resource_group_name = var.resource_group_name
version = var.postgresql-version
administrator_login = var.admin_login
administrator_password = random_password.password.result
storage_mb = var.postgresql-storage
sku_name = var.postgresql-sku-name
geo_redundant_backup_enabled = false
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
}
resource "azurerm_postgresql_flexible_server_configuration" "conf1" {
name = "wal_level"
server_id = azurerm_postgresql_flexible_server.postgresql-server.id
value = "logical"
}
resource "azurerm_postgresql_flexible_server_configuration" "conf2" {
name = "log_statement"
server_id = azurerm_postgresql_flexible_server.postgresql-server.id
value = "all"
}
resource "azurerm_postgresql_flexible_server_database" "postgresql-db" {
name = "QlikPostgresqlDB"
server_id = azurerm_postgresql_flexible_server.postgresql-server.id
collation = "en_US.utf8"
charset = "utf8"
}
resource "azurerm_postgresql_flexible_server_firewall_rule" "all-azure-services" {
name = "AllAzureServices"
server_id = azurerm_postgresql_flexible_server.postgresql-server.id
start_ip_address = "0.0.0.0"
end_ip_address = "0.0.0.0"
}

View File

@@ -0,0 +1,11 @@
output "db_server_fqdn" {
value = azurerm_postgresql_flexible_server.postgresql-server.fqdn
}
output "root_username" {
value = var.admin_login
}
output "root_username_password" {
value = nonsensitive(random_password.password.result)
}

View File

@@ -0,0 +1,41 @@
variable "resource_group_name" {
}
variable "provision_id" {
type = string
description = "(optional) describe your variable"
}
variable "location" {
type = string
description = "(optional) describe your variable"
default = "EAST US"
}
variable "admin_login" {
type = string
description = "Login to authenticate to PostgreSQL Server"
default = "qmi"
}
variable "postgresql-version" {
type = string
description = "PostgreSQL Server version to deploy"
default = "12"
}
variable "postgresql-sku-name" {
type = string
description = "PostgreSQL SKU Name"
default = "GP_Standard_D2s_v3"
}
variable "postgresql-storage" {
type = string
description = "PostgreSQL Storage in MB"
default = "32768"
}
variable "user_id" {
}

View File

@@ -0,0 +1,292 @@
resource "random_id" "randomServerId" {
keepers = {
# Generate a new ID only when a new resource group is defined
resource_group = var.resource_group_name
}
byte_length = 2
}
resource "random_password" "password" {
length = 16
special = true
override_special = "_!@"
upper = true
lower = true
min_numeric = 2
min_lower = 2
min_upper = 2
min_special = 2
}
locals {
sql_administrator_login_password = var.sql_administrator_login_password != null? var.sql_administrator_login_password : random_password.password.result
provision_id = var.provision_id != null? var.provision_id : random_id.randomServerId.hex
}
resource "azurerm_mssql_server" "sqlserver" {
name = "sqlserver-${local.provision_id}"
resource_group_name = var.resource_group_name
location = var.location
version = "12.0"
administrator_login = var.sql_administrator_login
administrator_login_password = local.sql_administrator_login_password
minimum_tls_version = "1.2"
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
identity {
type = "SystemAssigned"
}
}
resource "azurerm_mssql_firewall_rule" "all-azure-services" {
name = "AllAzureServices"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "0.0.0.0"
end_ip_address = "0.0.0.0"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-ITG-rule1" {
name = "ITG"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "188.65.156.32"
end_ip_address = "188.65.156.47"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-ITG-rule2" {
name = "ITG1"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "212.73.252.96"
end_ip_address = "212.73.252.103"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-kfar_saba-rule1" {
name = "Kfar_Saba"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "194.90.96.176"
end_ip_address = "194.90.96.183"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-kfar_saba-rule2" {
name = "Kfar_Saba1"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "213.57.84.160"
end_ip_address = "213.57.84.167"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-Peak_10-rule1" {
name = "Peak_10"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "4.4.97.104"
end_ip_address = "4.4.97.111"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-Peak_10-rule2" {
name = "Peak_101"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "206.196.17.32"
end_ip_address = "206.196.17.63"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-Bangalore-rule1" {
name = "Bangalore"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "14.98.59.168"
end_ip_address = "14.98.59.175"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-Bangalore-rule2" {
name = "Bangalore1"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "182.74.33.8"
end_ip_address = "182.74.33.15"
}
# QCS
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QCSUS1" {
name = "QCSUS1"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "18.205.71.36"
end_ip_address = "18.205.71.36"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QCSUS2" {
name = "QCSUS2"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "18.232.32.199"
end_ip_address = "18.232.32.199"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QCSUS3" {
name = "QCSUS3"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "34.237.68.254"
end_ip_address = "34.237.68.254"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QCSEU1" {
name = "QCSEU1"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "34.247.21.179"
end_ip_address = "34.247.21.179"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QCSEU2" {
name = "QCSEU2"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "52.31.212.214"
end_ip_address = "52.31.212.214"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QCS3" {
name = "QCSEU3"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "54.154.95.18"
end_ip_address = "54.154.95.18"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QCSAPAC1" {
name = "QCSAPAC1"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "13.210.43.241"
end_ip_address = "13.210.43.241"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QCSAPAC2" {
name = "QCSAPAC2"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "13.236.104.42"
end_ip_address = "13.236.104.42"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QCSAPAC3" {
name = "QCSAPAC3"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "13.236.206.172"
end_ip_address = "13.236.206.172"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QCSSingapore1" {
name = "QCSSingapore1"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "18.138.163.172"
end_ip_address = "18.138.163.172"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QCSSingapore2" {
name = "QCSSingapore2"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "18.142.157.182"
end_ip_address = "18.142.157.182"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QCSSingapore3" {
name = "QCSSingapore3"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "54.179.13.251"
end_ip_address = "54.179.13.251"
}
resource "azurerm_mssql_virtual_network_rule" "sqlvnetrule" {
name = "sql-vnet-rule-${local.provision_id}"
server_id = azurerm_mssql_server.sqlserver.id
subnet_id = var.subnet_id
}
# QAA
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QAAeu1" {
name = "QAAeu1"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "54.216.156.88"
end_ip_address = "54.216.156.88"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QAAeu2" {
name = "QAAeu2"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "3.248.156.131"
end_ip_address = "3.248.156.131"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QAAeu3" {
name = "QAAeu3"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "52.213.44.55"
end_ip_address = "52.213.44.55"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QAAus1" {
name = "QAAus1"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "18.235.133.252"
end_ip_address = "18.235.133.252"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QAAus2" {
name = "QAAus2"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "3.217.244.242"
end_ip_address = "3.217.244.242"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QAAus3" {
name = "QAAus3"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "18.214.8.201"
end_ip_address = "18.214.8.201"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QAAapac1" {
name = "QAAapac1"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "54.206.158.27"
end_ip_address = "54.206.158.27"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QAAapac2" {
name = "QAAapac2"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "3.104.137.20"
end_ip_address = "3.104.137.20"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QAAapac3" {
name = "QAAapac3"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "3.24.52.178"
end_ip_address = "3.24.52.178"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QAAsing1" {
name = "QAAsing1"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "54.169.84.213"
end_ip_address = "54.169.84.213"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QAAsing2" {
name = "QAAsing2"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "13.213.173.37"
end_ip_address = "13.213.173.37"
}
resource "azurerm_mssql_firewall_rule" "azuresql-fw-QAAsing3" {
name = "QAAsing3"
server_id = azurerm_mssql_server.sqlserver.id
start_ip_address = "13.213.113.162"
end_ip_address = "13.213.113.162"
}
resource "azurerm_mssql_database" "db" {
name = "demoDB"
server_id = azurerm_mssql_server.sqlserver.id
create_mode = "Default"
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
}
# FOR QDI scenario
resource "azurerm_mssql_database" "dbname_source" {
name = "source"
server_id = azurerm_mssql_server.sqlserver.id
create_mode = "Default"
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
}
resource "azurerm_mssql_database" "dbname_target" {
name = "target"
server_id = azurerm_mssql_server.sqlserver.id
create_mode = "Default"
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
}

View File

@@ -0,0 +1,29 @@
output "sqlserver_id" {
value = azurerm_mssql_server.sqlserver.id
}
output "sqlserver_name" {
value = azurerm_mssql_server.sqlserver.name
}
output "sqlserver_fully_qualified_domain_name" {
value = azurerm_mssql_server.sqlserver.fully_qualified_domain_name
}
output "dbname" {
value = azurerm_mssql_database.db.name
}
output "administrator_login" {
value = var.sql_administrator_login
}
output "administrator_login_password" {
value = nonsensitive(local.sql_administrator_login_password)
}
output "principal_id" {
value = azurerm_mssql_server.sqlserver.identity.0.principal_id
}

View File

@@ -15,6 +15,7 @@ resource "random_password" "password" {
override_special = "_!@"
upper = true
lower = true
min_numeric = 2
min_lower = 2
min_upper = 2
min_special = 2
@@ -38,6 +39,7 @@ resource "azurerm_mysql_server" "mysql-server" {
geo_redundant_backup_enabled = false
public_network_access_enabled = true
ssl_enforcement_enabled = false
ssl_minimal_tls_version_enforced = "TLSEnforcementDisabled"
tags = {
Deployment = "QMI PoC"

View File

@@ -7,5 +7,5 @@ output "root_username" {
}
output "root_username_password" {
value = random_password.password.result
value = nonsensitive(random_password.password.result)
}

View File

@@ -4,6 +4,7 @@ resource "random_password" "password" {
override_special = "_!@"
upper = true
lower = true
min_numeric = 2
min_lower = 2
min_upper = 2
min_special = 2
@@ -28,6 +29,7 @@ resource "azurerm_postgresql_server" "postgresql-server" {
geo_redundant_backup_enabled = false
public_network_access_enabled = true
ssl_enforcement_enabled = false
ssl_minimal_tls_version_enforced = "TLSEnforcementDisabled"
tags = {
Deployment = "QMI PoC"

View File

@@ -11,5 +11,5 @@ output "root_username" {
}
output "root_username_password" {
value = random_password.password.result
value = nonsensitive(random_password.password.result)
}

View File

@@ -1,329 +0,0 @@
resource "random_id" "randomServerId" {
keepers = {
# Generate a new ID only when a new resource group is defined
resource_group = var.resource_group_name
}
byte_length = 2
}
resource "random_password" "password" {
length = 16
special = true
override_special = "_!@"
upper = true
lower = true
min_lower = 2
min_upper = 2
min_special = 2
}
locals {
sql_administrator_login_password = var.sql_administrator_login_password != null? var.sql_administrator_login_password : random_password.password.result
provision_id = var.provision_id != null? var.provision_id : random_id.randomServerId.hex
}
resource "azurerm_sql_server" "sqlserver" {
name = "sqlserver-${local.provision_id}"
resource_group_name = var.resource_group_name
location = var.location
version = "12.0"
administrator_login = var.sql_administrator_login
administrator_login_password = local.sql_administrator_login_password
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
identity {
type = "SystemAssigned"
}
}
resource "azurerm_sql_firewall_rule" "all-azure-services" {
name = "AllAzureServices"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "0.0.0.0"
end_ip_address = "0.0.0.0"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-ITG-rule1" {
name = "ITG"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "188.65.156.32"
end_ip_address = "188.65.156.47"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-ITG-rule2" {
name = "ITG1"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "212.73.252.96"
end_ip_address = "212.73.252.103"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-kfar_saba-rule1" {
name = "Kfar_Saba"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "194.90.96.176"
end_ip_address = "194.90.96.183"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-kfar_saba-rule2" {
name = "Kfar_Saba1"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "213.57.84.160"
end_ip_address = "213.57.84.167"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-Peak_10-rule1" {
name = "Peak_10"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "4.4.97.104"
end_ip_address = "4.4.97.111"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-Peak_10-rule2" {
name = "Peak_101"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "206.196.17.32"
end_ip_address = "206.196.17.63"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-Bangalore-rule1" {
name = "Bangalore"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "14.98.59.168"
end_ip_address = "14.98.59.175"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-Bangalore-rule2" {
name = "Bangalore1"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "182.74.33.8"
end_ip_address = "182.74.33.15"
}
# QCS
resource "azurerm_sql_firewall_rule" "azuresql-fw-QCSUS1" {
name = "QCSUS1"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "18.205.71.36"
end_ip_address = "18.205.71.36"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QCSUS2" {
name = "QCSUS2"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "18.232.32.199"
end_ip_address = "18.232.32.199"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QCSUS3" {
name = "QCSUS3"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "34.237.68.254"
end_ip_address = "34.237.68.254"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QCSEU1" {
name = "QCSEU1"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "34.247.21.179"
end_ip_address = "34.247.21.179"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QCSEU2" {
name = "QCSEU2"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "52.31.212.214"
end_ip_address = "52.31.212.214"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QCS3" {
name = "QCSEU3"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "54.154.95.18"
end_ip_address = "54.154.95.18"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QCSAPAC1" {
name = "QCSAPAC1"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "13.210.43.241"
end_ip_address = "13.210.43.241"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QCSAPAC2" {
name = "QCSAPAC2"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "13.236.104.42"
end_ip_address = "13.236.104.42"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QCSAPAC3" {
name = "QCSAPAC3"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "13.236.206.172"
end_ip_address = "13.236.206.172"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QCSSingapore1" {
name = "QCSSingapore1"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "18.138.163.172"
end_ip_address = "18.138.163.172"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QCSSingapore2" {
name = "QCSSingapore2"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "18.142.157.182"
end_ip_address = "18.142.157.182"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QCSSingapore3" {
name = "QCSSingapore3"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "54.179.13.251"
end_ip_address = "54.179.13.251"
}
resource "azurerm_sql_virtual_network_rule" "sqlvnetrule" {
name = "sql-vnet-rule-${local.provision_id}"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
subnet_id = var.subnet_id
}
# QAA
resource "azurerm_sql_firewall_rule" "azuresql-fw-QAAeu1" {
name = "QAAeu1"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "54.216.156.88"
end_ip_address = "54.216.156.88"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QAAeu2" {
name = "QAAeu2"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "3.248.156.131"
end_ip_address = "3.248.156.131"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QAAeu3" {
name = "QAAeu3"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "52.213.44.55"
end_ip_address = "52.213.44.55"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QAAus1" {
name = "QAAus1"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "18.235.133.252"
end_ip_address = "18.235.133.252"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QAAus2" {
name = "QAAus2"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "3.217.244.242"
end_ip_address = "3.217.244.242"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QAAus3" {
name = "QAAus3"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "18.214.8.201"
end_ip_address = "18.214.8.201"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QAAapac1" {
name = "QAAapac1"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "54.206.158.27"
end_ip_address = "54.206.158.27"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QAAapac2" {
name = "QAAapac2"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "3.104.137.20"
end_ip_address = "3.104.137.20"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QAAapac3" {
name = "QAAapac3"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "3.24.52.178"
end_ip_address = "3.24.52.178"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QAAsing1" {
name = "QAAsing1"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "54.169.84.213"
end_ip_address = "54.169.84.213"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QAAsing2" {
name = "QAAsing2"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "13.213.173.37"
end_ip_address = "13.213.173.37"
}
resource "azurerm_sql_firewall_rule" "azuresql-fw-QAAsing3" {
name = "QAAsing3"
resource_group_name = var.resource_group_name
server_name = azurerm_sql_server.sqlserver.name
start_ip_address = "13.213.113.162"
end_ip_address = "13.213.113.162"
}
resource "azurerm_sql_database" "db" {
name = "demoDB"
resource_group_name = var.resource_group_name
location = var.location
server_name = azurerm_sql_server.sqlserver.name
create_mode = "Default"
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
}
# FOR QDI scenario
resource "azurerm_sql_database" "dbname_source" {
name = "source"
resource_group_name = var.resource_group_name
location = var.location
server_name = azurerm_sql_server.sqlserver.name
create_mode = "Default"
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
}
resource "azurerm_sql_database" "dbname_target" {
name = "target"
resource_group_name = var.resource_group_name
location = var.location
server_name = azurerm_sql_server.sqlserver.name
create_mode = "Default"
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
QMI_user = var.user_id
}
}

View File

@@ -1,29 +0,0 @@
output "sqlserver_id" {
value = azurerm_sql_server.sqlserver.id
}
output "sqlserver_name" {
value = azurerm_sql_server.sqlserver.name
}
output "sqlserver_fully_qualified_domain_name" {
value = azurerm_sql_server.sqlserver.fully_qualified_domain_name
}
output "dbname" {
value = azurerm_sql_database.db.name
}
output "administrator_login" {
value = var.sql_administrator_login
}
output "administrator_login_password" {
value = local.sql_administrator_login_password
}
output "principal_id" {
value = azurerm_sql_server.sqlserver.identity.0.principal_id
}

View File

@@ -1,10 +1,10 @@
terraform {
required_version = ">= 0.13"
required_version = ">= 0.14"
required_providers {
databricks = {
source = "databrickslabs/databricks"
source = "databricks/databricks"
version = ">= 0.3.0"
}
}

View File

@@ -3,7 +3,7 @@ output "databricks_workspace_url" {
}
output "databricks_token" {
value = var.enabled? databricks_token.pat[0].token_value : null
value = var.enabled? nonsensitive(databricks_token.pat[0].token_value) : null
}
output "cluster_name" {

View File

@@ -133,4 +133,24 @@ resource "azurerm_synapse_firewall_rule" "qcs_ap_3" {
synapse_workspace_id = azurerm_synapse_workspace.synapsews.id
start_ip_address = "13.236.206.172"
end_ip_address = "13.236.206.172"
}
}
# QCS SINGAPORE
resource "azurerm_synapse_firewall_rule" "qcs_sp_1" {
name = "QCS_SP_1"
synapse_workspace_id = azurerm_synapse_workspace.synapsews.id
start_ip_address = "18.138.163.172"
end_ip_address = "18.138.163.172"
}
resource "azurerm_synapse_firewall_rule" "qcs_sp_2" {
name = "QCS_SP_2"
synapse_workspace_id = azurerm_synapse_workspace.synapsews.id
start_ip_address = "18.142.157.182"
end_ip_address = "18.142.157.182"
}
resource "azurerm_synapse_firewall_rule" "qcs_sp_3" {
name = "QCS_SP_3"
synapse_workspace_id = azurerm_synapse_workspace.synapsews.id
start_ip_address = "54.179.13.251"
end_ip_address = "54.179.13.251"
}

View File

@@ -33,6 +33,10 @@ resource "azurerm_synapse_workspace" "synapsews" {
sql_administrator_login = var.sql_administrator_login
sql_administrator_login_password = var.sql_administrator_login_password
identity {
type = "SystemAssigned"
}
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
@@ -47,6 +51,7 @@ resource "azurerm_synapse_sql_pool" "db" {
synapse_workspace_id = azurerm_synapse_workspace.synapsews.id
sku_name = var.pool_sku_name
create_mode = "Default"
tags = {
Deployment = "QMI PoC"

View File

@@ -23,7 +23,7 @@ output "administrator_login" {
}
output "administrator_login_password" {
value = var.sql_administrator_login_password
value = nonsensitive(var.sql_administrator_login_password)
}
output "principal_id" {

View File

@@ -2,10 +2,19 @@
BASEDIR=$(dirname "$0")
centos_ver=`rpm --eval %{centos_ver}`
binary='falcon-sensor-5.29.0-9403.el7.x86_64.rpm'
if [ $centos_ver -eq '8' ]; then
binary='falcon-sensor-5.27.0-9104.el8.x86_64.rpm'
fi
echo $binary
echo "Installing CrowdStrike falcon agent"
echo "CID=$1"
if ! rpm -qa | grep -qw falcon-sensor; then
sudo yum install $BASEDIR/falcon-sensor-5.29.0-9403.el7.x86_64.rpm -y
sudo yum install $BASEDIR/$binary -y
fi
sudo /opt/CrowdStrike/falconctl -s -f --cid=$1
sudo systemctl start falcon-sensor

View File

@@ -0,0 +1,15 @@
#!/bin/bash
BASEDIR=$(dirname "$0")
echo "Installing Tenable Nessus Agent..."
KEY=$1
echo "KEY=$KEY"
sudo yum install $BASEDIR/NessusAgent-10.2.0-es7.x86_64.rpm -y
echo "Linking Tenable Nessus Agent..."
sudo /bin/systemctl start nessusagent.service
sudo /opt/nessus_agent/sbin/nessuscli agent link --key=$KEY --groups="Qlik IT Cloud Agents" --host=cloud.tenable.com --port=443
sudo /opt/nessus_agent/sbin/nessuscli agent status

View File

@@ -3,7 +3,17 @@ data "azurerm_key_vault_secret" "cid" {
key_vault_id = var.key_vault_id
}
resource "null_resource" "post-centos-vm" {
data "azurerm_key_vault_secret" "tenable-key" {
name = "tenable-key"
key_vault_id = var.key_vault_id
}
locals {
falcon_id = nonsensitive(data.azurerm_key_vault_secret.cid.value)
tenable_key = nonsensitive(data.azurerm_key_vault_secret.tenable-key.value)
}
resource "null_resource" "post-linux-vm" {
provisioner "file" {
connection {
@@ -15,7 +25,7 @@ resource "null_resource" "post-centos-vm" {
#private_key = "${file("~/.ssh/id_rsa")}"
}
source = "${path.module}/${var.os_type}/common"
destination = "~"
destination = "/home/${var.admin_username}"
}
provisioner "remote-exec" {
@@ -30,8 +40,9 @@ resource "null_resource" "post-centos-vm" {
inline = [
"echo ${var.admin_password} | sudo -S chmod u+x /home/${var.admin_username}/common/*.sh",
"sudo /home/${var.admin_username}/common/falcon.sh '${data.azurerm_key_vault_secret.cid.value}'",
"sudo /home/${var.admin_username}/common/resizedisk.sh"
"sudo /home/${var.admin_username}/common/falcon.sh '${local.falcon_id}'",
"sudo /home/${var.admin_username}/common/resizedisk.sh",
"sudo /home/${var.admin_username}/common/tenable.sh '${local.tenable_key}'",
]
}
}

View File

@@ -0,0 +1,15 @@
#!/bin/bash
BASEDIR=$(dirname "$0")
echo "Installing Tenable Nessus Agent..."
KEY=$1
echo "KEY=$KEY"
sudo dpkg -i $BASEDIR/NessusAgent-10.2.0-ubuntu1110_amd64.deb
echo "Linking Tenable Nessus Agent..."
sudo /bin/systemctl start nessusagent.service
sudo /opt/nessus_agent/sbin/nessuscli agent link --key=$KEY --groups="Qlik IT Cloud Agents" --host=cloud.tenable.com --port=443
sudo /opt/nessus_agent/sbin/nessuscli agent status

View File

@@ -5,6 +5,7 @@ data "azurerm_key_vault_secret" "cert-password" {
locals {
domain = var.domain != null? var.domain : "qem.qmi"
cert_password = nonsensitive(data.azurerm_key_vault_secret.cert-password.value)
}
resource "null_resource" "prep" {
@@ -61,7 +62,7 @@ resource "null_resource" "install" {
inline = [
"powershell.exe -File C:/provision/replicate-install/di-replicate-getBinary.ps1 -url ${var.download_url}",
"powershell.exe -File C:/provision/replicate-install/di-replicate-install.ps1 -url ${var.download_url}",
"powershell.exe -File C:/provision/replicate-install/di-replicate-installQMICertificate.ps1 -CertPwd \"${data.azurerm_key_vault_secret.cert-password.value}\"",
"powershell.exe -File C:/provision/replicate-install/di-replicate-installQMICertificate.ps1 -CertPwd \"${local.cert_password}\"",
"powershell.exe -File C:/provision/replicate-install/di-em-register-replicate.ps1 -user ${var.vm_admin_username} -pass ${var.vm_admin_password} -domain ${local.domain}",
]

View File

@@ -10,22 +10,9 @@ terraform {
}
}
provider "aws" {
alias = "myaws"
region = var.region
access_key = var.aws_provider_access_key
secret_key = var.aws_provider_access_secret
}
module "iam_user" {
source = "terraform-aws-modules/iam/aws//modules/iam-user"
providers = {
aws = aws.myaws
}
version = "~> 3.0"
name = "qmi-user-${var.provision_id}"
@@ -40,6 +27,8 @@ module "iam_user" {
Deployment = "QMI"
"Cost Center" = "3100"
QMI_user = var.user_id
ProvID = var.provision_id
Name = "qmi-${var.provision_id}"
}
}
@@ -47,10 +36,6 @@ module "iam_user" {
module "s3_bucket" {
source = "terraform-aws-modules/s3-bucket/aws"
providers = {
aws = aws.myaws
}
version = "~> 2.1.0"
bucket = "qmi-bucket-${var.provision_id}"
@@ -66,14 +51,14 @@ module "s3_bucket" {
Deployment = "QMI"
"Cost Center" = "3100"
QMI_user = var.user_id
ProvID = var.provision_id
Name = "qmi-${var.provision_id}"
}
}
resource "aws_iam_user_policy" "lb_ro" {
provider = aws.myaws
name = "s3only_policy_${module.iam_user.this_iam_user_name}"
user = module.iam_user.this_iam_user_name

View File

@@ -11,5 +11,5 @@ output "iam_access_key" {
}
output "iam_access_secret" {
value = module.iam_user.this_iam_access_key_secret
value = nonsensitive(module.iam_user.this_iam_access_key_secret)
}

View File

@@ -1,9 +1,3 @@
variable "aws_provider_access_key" {
}
variable "aws_provider_access_secret" {
}
variable "region" {
default = "us-east-1"
}

View File

@@ -21,7 +21,7 @@ resource "random_password" "password" {
locals {
virtual_machine_name = "${var.prefix}-${random_id.randomMachineId.hex}"
admin_username = var.admin_username
admin_password = random_password.password.result
admin_password = nonsensitive(random_password.password.result)
}
module "qmi-nic" {
@@ -59,7 +59,7 @@ resource "azurerm_linux_virtual_machine" "vm" {
source_image_reference {
publisher = "OpenLogic"
offer = "CentOS"
sku = "7.5"
sku = var.sku
version = "latest"
}
@@ -76,7 +76,7 @@ resource "azurerm_linux_virtual_machine" "vm" {
module "linux-common" {
source = "git::https://gitlab.com/qmi/qmi-cloud-tf-modules.git//linux-common"
source = "git::https://gitlab.com/qmi/qmi-cloud-tf-modules.git//linux-common?ref=dev2"
depends_on = [
azurerm_linux_virtual_machine.vm

View File

@@ -11,7 +11,7 @@ output "admin_username" {
}
output "admin_password" {
value = random_password.password.result
value = nonsensitive(random_password.password.result)
}
output "nic_id" {

View File

@@ -31,6 +31,10 @@ variable "admin_username" {
default = "qmi"
}
variable "sku" {
default = "7.5"
}
variable "user_id" {
default = null
}

View File

@@ -10,11 +10,15 @@ terraform {
}
}
module "qmi-aws-creds" {
source = "git::https://gitlab.com/qmi/qmi-cloud-tf-modules.git//aws-credentials"
}
provider "aws" {
region = var.region
access_key = var.aws_provider_access_key
secret_key = var.aws_provider_access_secret
access_key = module.qmi-aws-creds.qmi-aws-access-key
secret_key = module.qmi-aws-creds.qmi-aws-access-secret
alias = "myaws"

View File

@@ -1,9 +1,3 @@
variable "aws_provider_access_key" {
}
variable "aws_provider_access_secret" {
}
variable "region" {
default = "eu-west-1"
}

View File

@@ -20,6 +20,7 @@ resource "random_password" "password" {
locals {
virtual_machine_name = "${var.prefix}-${random_id.randomMachineId.hex}"
virtual_machine_name2 = "qmifort${random_id.randomMachineId.hex}"
admin_username = var.admin_username
admin_password = random_password.password.result
}
@@ -36,7 +37,7 @@ module "qmi-nic" {
}
resource "azurerm_linux_virtual_machine" "vm" {
name = local.virtual_machine_name
name = local.virtual_machine_name2
resource_group_name = var.resource_group_name
location = var.location
size = var.vm_type

View File

@@ -14,6 +14,10 @@ output "admin_password" {
value = random_password.password.result
}
output "ssh" {
value = "ssh ${var.admin_username}@${module.qmi-nic.private_ip_address} --> password: ${random_password.password.result}"
}
output "nic_id" {
value = module.qmi-nic.id
}

View File

@@ -21,7 +21,7 @@ resource "random_password" "password" {
locals {
virtual_machine_name = (var.virtual_machine_name != null)? var.virtual_machine_name : "${var.prefix}-${random_id.randomMachineId.hex}"
admin_username = var.admin_username
admin_password = random_password.password.result
admin_password = nonsensitive(random_password.password.result)
snaploc = (var.location == "westeurope")? "weu" : (var.location == "eastus")? "" : "sea"
storage_account_id = "/subscriptions/62ebff8f-c40b-41be-9239-252d6c0c8ad9/resourceGroups/QMI-Machines/providers/Microsoft.Storage/storageAccounts/machinesnapshots${local.snaploc}"
}
@@ -126,7 +126,7 @@ resource "null_resource" "post-vm-fromsnapshot-linux" {
}
source = "${path.module}/provision-scripts"
destination = "~"
destination = "/home/${local.admin_username}"
}
provisioner "local-exec" {

View File

@@ -11,7 +11,7 @@ output "admin_username" {
}
output "admin_password" {
value = random_password.password.result
value = nonsensitive(random_password.password.result)
}
output "nic_id" {

View File

@@ -21,7 +21,7 @@ resource "random_password" "password" {
locals {
virtual_machine_name = (var.virtual_machine_name != null)? var.virtual_machine_name : "${var.prefix}-${random_id.randomMachineId.hex}"
admin_username = var.admin_username
admin_password = random_password.password.result
admin_password = nonsensitive(random_password.password.result)
restartAfter = (var.restartAfterRename == true)? "-RestartAfter" : ""
notrename = (var.notrename != null)? "-NotApply" : ""
snaploc = (var.location == "westeurope")? "weu" : (var.location == "eastus")? "" : "sea"
@@ -39,6 +39,8 @@ resource "azurerm_managed_disk" "md-import" {
create_option = "Import"
storage_account_id = local.storage_account_id
source_uri = var.snapshot_uri
// Special V2 for Compose (QDI)
hyper_v_generation = (length(regexall(".*COMP.*", local.virtual_machine_name)) > 0)? "V2" : "V1"
disk_size_gb = var.disk_size_gb
@@ -101,7 +103,7 @@ resource "azurerm_virtual_machine" "vm" {
enable_automatic_upgrades = false
winrm {
protocol = "http"
protocol = "HTTP"
}
}
@@ -126,12 +128,30 @@ resource "azurerm_virtual_machine" "vm" {
}
module "win-common" {
count = var.wincommon? 1 : 0
source = "git::https://gitlab.com/qmi/qmi-cloud-tf-modules.git//win-common?ref=dev2"
depends_on = [
azurerm_virtual_machine.vm
]
private_ip_address = module.qmi-nic.private_ip_address
admin_username = local.admin_username
admin_password = var.initial_password
carbonblack = var.carbonblack
}
resource "null_resource" "post-vm-fromsnapshot-win" {
count = var.initial_password != null? 1 : 0
depends_on = [
azurerm_virtual_machine.vm
azurerm_virtual_machine.vm,
module.win-common
]
provisioner "file" {
@@ -161,9 +181,9 @@ resource "null_resource" "post-vm-fromsnapshot-win" {
}
inline = [
"powershell.exe -File C:/tmp/provision/prep-files.ps1",
"powershell.exe -File C:/tmp/provision/bootstrap.ps1",
"powershell.exe -File C:/tmp/provision/password.ps1 -Username ${local.admin_username} -Pass ${local.admin_password}"
"powershell.exe -File C:/tmp/provision/prep-files.ps1 -NoProfile",
"powershell.exe -File C:/tmp/provision/bootstrap.ps1 -NoProfile",
"powershell.exe -File C:/tmp/provision/password.ps1 -NoProfile -Username ${local.admin_username} -Pass ${local.admin_password}"
]
}
@@ -180,7 +200,7 @@ resource "null_resource" "post-vm-fromsnapshot-win" {
}
inline = [
"powershell.exe -File C:/tmp/provision/RenameComputer.ps1 -NewName ${local.virtual_machine_name} ${local.notrename} ${local.restartAfter}"
"powershell.exe -File C:/tmp/provision/RenameComputer.ps1 -NoProfile -NewName ${local.virtual_machine_name} ${local.notrename} ${local.restartAfter}"
]
on_failure = continue

View File

@@ -15,7 +15,7 @@ output "admin_username" {
}
output "admin_password" {
value = random_password.password.result
value = nonsensitive(random_password.password.result)
}
output "nic_id" {

View File

@@ -108,7 +108,8 @@ Copy-Item $sourcepath $destination ## Get the lnk we want to use as a template
Remove-Item -Path $sourcepath -Force
$shell = New-Object -COM WScript.Shell
$shortcut = $shell.CreateShortcut($destination) ## Open the lnk
$shortcut.TargetPath = "https://$env:computername/qmc" ## Make changes
$shortcut.TargetPath = $shell.ExpandEnvironmentStrings("C:\Program Files\Google\Chrome\Application\chrome.exe")
$shortcut.Arguments = "https://$env:computername/qmc"
$shortcut.Save() ## Save
Rename-Item -Path $destination -NewName "Qlik Management Console.lnk"
@@ -118,7 +119,8 @@ Copy-Item $sourcepath $destination ## Get the lnk we want to use as a template
Remove-Item -Path $sourcepath -Force
$shell = New-Object -COM WScript.Shell
$shortcut = $shell.CreateShortcut($destination) ## Open the lnk
$shortcut.TargetPath = "https://$env:computername/hub" ## Make changes
$shortcut.TargetPath = $shell.ExpandEnvironmentStrings("C:\Program Files\Google\Chrome\Application\chrome.exe")
$shortcut.Arguments = "https://$env:computername/hub"
$shortcut.Save() ## Save
Rename-Item -Path $destination -NewName "Qlik Sense Hub.lnk"
####

View File

@@ -77,4 +77,12 @@ variable "waitAfterRestartSecs" {
default = 30
}
variable "carbonblack" {
default = true
}
variable "wincommon" {
default = true
}

86
vm-oraclelinux81/main.tf Normal file
View File

@@ -0,0 +1,86 @@
resource "random_id" "randomMachineId" {
keepers = {
# Generate a new ID only when a new resource group is defined
resource_group = var.resource_group_name
}
byte_length = 3
}
resource "random_password" "password" {
length = 16
special = false
override_special = "_"
upper = true
lower = true
min_lower = 2
min_upper = 2
min_special = 0
min_numeric = 2
}
locals {
virtual_machine_name = "${var.prefix}-${random_id.randomMachineId.hex}"
admin_username = var.admin_username
admin_password = nonsensitive(random_password.password.result)
}
module "qmi-nic" {
source = "git::https://gitlab.com/qmi/qmi-cloud-tf-modules.git//qmi-nic"
prefix = local.virtual_machine_name
location = var.location
subnet_id = var.subnet_id
resource_group_name = var.resource_group_name
user_id = var.user_id
}
resource "azurerm_virtual_machine" "vm" {
name = local.virtual_machine_name
location = var.location
resource_group_name = var.resource_group_name
network_interface_ids = [module.qmi-nic.id]
vm_size = var.vm_type
delete_os_disk_on_termination = true
delete_data_disks_on_termination = true
storage_image_reference {
# this is the Oracle linux image I found.
# az vm image list --all --publisher Oracle -o table
publisher = "Oracle"
offer = "Oracle-Linux"
sku = "81"
version = "latest"
}
storage_os_disk {
name = "${local.virtual_machine_name}-osdisk"
caching = "ReadWrite"
create_option = "FromImage"
managed_disk_type = var.managed_disk_type
disk_size_gb = var.disk_size_gb
}
os_profile_linux_config {
disable_password_authentication = false
}
os_profile {
computer_name = local.virtual_machine_name
admin_username = local.admin_username
admin_password = local.admin_password
}
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
"ProvId" = var.provId != null? var.provId : null
"QMI_user" = var.user_id != null? var.user_id : null
"24x7" = var.is_24x7 == true? "" : null
"ShutdownTime": var.is_24x7 == false? var.shutdownTime : null
"StartupTime": var.is_24x7 == false? var.startupTime : null
}
}

View File

@@ -3,7 +3,7 @@ output "virtual_machine_id" {
}
output "virtual_machine_name" {
value = azurerm_virtual_machine.vm.name
value = "${var.prefix}-${random_id.randomMachineId.hex}"
}
output "admin_username" {
@@ -11,7 +11,7 @@ output "admin_username" {
}
output "admin_password" {
value = random_password.password.result
value = nonsensitive(random_password.password.result)
}
output "nic_id" {
@@ -24,8 +24,4 @@ output "nic_private_ip_address" {
output "nic_ip_configuration_name" {
value = module.qmi-nic.ip_configuration_name
}
output "principal_id" {
value = azurerm_virtual_machine.vm.identity.0.principal_id
}

View File

@@ -0,0 +1,56 @@
variable "subnet_id" {
default = "/subscriptions/62ebff8f-c40b-41be-9239-252d6c0c8ad9/resourceGroups/QMI-infra-vnet/providers/Microsoft.Network/virtualNetworks/QMI-Automation-Vnet/subnets/QMI-VM-Deployments"
}
variable "prefix" {
description = "The Prefix used for all resources in this example"
default = "QMI-ORACLELINUX"
}
variable "location" {
default = "East US"
}
variable "resource_group_name" {
}
variable "vm_type" {
default = "Standard_DS3_v2"
}
variable "managed_disk_type" {
default = "Premium_LRS"
}
variable "disk_size_gb" {
default = "128"
}
variable "admin_username" {
default = "qmi"
}
variable "user_id" {
default = null
}
variable "provId" {
default = null
}
variable "is_24x7"{
type = bool
default = null
}
variable "shutdownTime"{
default = null
}
variable "startupTime"{
default = null
}
# variable "subnet_id" {
# default = "/subscriptions/1f3d4c1d-6509-4c52-8dee-c15fb83f2920/resourceGroups/lkn-rg/providers/Microsoft.Network/virtualNetworks/lkn-vn/subnets/default"
# }

66
vm-qdc-secure/main.tf Normal file
View File

@@ -0,0 +1,66 @@
resource "random_id" "randomMachineId" {
keepers = {
# Generate a new ID only when a new resource group is defined
resource_group = var.resource_group_name
}
byte_length = 2
}
resource "random_password" "password" {
length = 16
special = true
override_special = "_!@"
upper = true
lower = true
min_lower = 2
min_upper = 2
min_special = 2
}
locals {
virtual_machine_name = "${var.prefix}-${random_id.randomMachineId.hex}"
admin_username = var.admin_username
admin_password = random_password.password.result
}
module "qmi-nic" {
source = "git::https://gitlab.com/qmi/qmi-cloud-tf-modules.git//qmi-nic"
prefix = local.virtual_machine_name
location = var.location
resource_group_name = var.resource_group_name
user_id = var.user_id
subnet_id = var.vm_subnet_id
}
resource "azurerm_linux_virtual_machine" "vm" {
name = local.virtual_machine_name
resource_group_name = var.resource_group_name
location = var.location
size = var.vm_type
admin_username = local.admin_username
admin_password = local.admin_password
disable_password_authentication = false
network_interface_ids = [ module.qmi-nic.id ]
os_disk {
name = "${local.virtual_machine_name}-osdisk"
caching = "ReadWrite"
storage_account_type = var.managed_disk_type
disk_size_gb = var.disk_size_gb
}
source_image_id = var.image_reference
tags = {
Deployment = "QMI PoC"
"Cost Center" = "3100"
"QMI_user" = var.user_id != null? var.user_id : null
"24x7" = ""
}
}

View File

@@ -1,9 +1,9 @@
output "virtual_machine_id" {
value = azurerm_virtual_machine.vm.id
value = azurerm_linux_virtual_machine.vm.id
}
output "virtual_machine_name" {
value = azurerm_virtual_machine.vm.name
value = "${var.prefix}-${random_id.randomMachineId.hex}"
}
output "admin_username" {
@@ -24,4 +24,8 @@ output "nic_private_ip_address" {
output "nic_ip_configuration_name" {
value = module.qmi-nic.ip_configuration_name
}
}

Some files were not shown because too many files have changed in this diff Show More