vm-php-web-server/hub.yaml (208 lines of code) (raw):

version: 1 kind: stack meta: name: PHP Web Server Sandbox components: - name: ssl-cert source: dir: components/acme-certificate git: remote: https://github.com/agilestacks/google-components.git subDir: acme-certificate depends: - network - name: network source: dir: components/network git: remote: https://github.com/agilestacks/google-components.git subDir: network - name: cloud-sql source: dir: components/cloud-sql git: remote: https://github.com/agilestacks/google-components.git subDir: cloud-sql - name: cloud-nat source: dir: components/cloud-nat git: remote: https://github.com/agilestacks/google-components.git subDir: cloud-nat - name: managed-instance-group source: dir: components/managed-instance-group git: remote: https://github.com/agilestacks/google-components.git subDir: managed-instance-group - name: load-balancer source: dir: components/load-balancer git: remote: https://github.com/agilestacks/google-components.git subDir: load-balancer depends: - ssl-cert - name: dns-zone-record-set source: dir: components/dns-zone-record-set git: remote: https://github.com/agilestacks/google-components.git subDir: dns-zone-record-set - name: wp-loadgenerator source: dir: components/wp-loadgenerator git: remote: https://github.com/agilestacks/google-components.git subDir: wp-loadgenerator extensions: init: - gcp - .hub/get-info configure: - gcp - env requires: - gcp lifecycle: verbs: - deploy - undeploy order: - ssl-cert - network - cloud-sql - cloud-nat - managed-instance-group - load-balancer - dns-zone-record-set - wp-loadgenerator parameters: - name: hub.sandboxDir fromEnv: SANDBOX_DIR - name: hub.sandboxCommit fromEnv: SANDBOX_COMMIT - name: hub.userAccount fromEnv: USER_ACCOUNT - name: projectId fromEnv: GOOGLE_PROJECT brief: Reference to current GCP project - name: dns.name fromEnv: HUB_STACK_NAME - name: dns.domain brief: | Well known parameter. Used as a stack identifier. Also used by components that creates DNS records. fromEnv: HUB_DOMAIN_NAME - name: stateBucketName brief: | Name of GCS bucket where Terraform enabled components upload their state. It must be located in the current GCP project and the GCP service account which is used to provision the stack must have permissions to access it. fromEnv: HUB_STATE_BUCKET - name: cloud.region fromEnv: GOOGLE_REGION - name: cloud.zone fromEnv: GOOGLE_ZONE - name: component.certificate.name value: ${dns.name} - name: component.network parameters: - name: name value: ${dns.name} - name: autocreateSubnets value: false - name: subnetwork.cidr value: 10.127.0.0/20 - name: component.cloudNat parameters: - name: name value: ${dns.name}-cloud-nat-lb-https-redirect - name: network value: ${component.network.name} - name: component.managedInstanceGroup parameters: - name: name value: ${dns.name} - name: service_account value: vo-m1 - name: disk_type value: pd-standard - name: machine_type value: e2-medium - name: imageProject value: debian-cloud - name: image value: debian-10-buster-v20220310 - name: port value: 80 - name: target_size value: 2 - name: subnetwork value: ${component.network.subnetwork} kind: link - name: natRouterName value: ${component.cloudNat.routerName} kind: link - name: webServer value: apache2 brief: "Avaible web servers are: nginx or apache2" - name: dbName value: ${component.cloudSql.dbName} - name: dbUser value: ${component.cloudSql.dbUser} - name: password value: ${component.cloudSql.password} - name: dbHost value: ${component.cloudSql.privateIp} kind: link - name: certificate parameters: - name: commonName value: ${dns.domain} - name: acme.email default: admin@superhub.io fromEnv: ACME_EMAIL brief: email associated with acme registration - name: acme.endpoint brief: ACME endpoint (letsencrypt production) value: https://acme-v02.api.letsencrypt.org/directory - name: component.loadBalancer parameters: - name: name value: ${dns.name} - name: instanceGroup value: ${component.managedInstanceGroup.instanceGroup} kind: link - name: sslCertificate value: "${certificate.google.selfLink}" kind: link - name: backendHealthPath value: /readme.html - name: component.dnsZoneRecordSet parameters: - name: name value: "" - name: type value: "A" - name: value value: ${component.loadBalancer.externalIp} kind: link - name: zoneName value: ${dns.name} - name: component.cloudSql parameters: - name: name value: ${dns.name} - name: network value: ${component.network.name} - name: dbName brief: Name of database which will be created during deployment of Cloud SQL component fromEnv: DB_NAME default: sandbox - name: dbUser brief: Name of user which will be created during deployment of Cloud SQL component fromEnv: DB_USER default: dbuser - name: password brief: User's password which will be created during deployment of Cloud SQL component fromEnv: DB_PASSWORD - name: version default: MYSQL_5_7 fromEnv: DB_VERSION - name: publicIP value: false - name: allocatedIpRangeName kind: link value: ${component.network.cloudSql.allocatedIpRangeName} outputs: - name: wordpress.url value: https://${dns.domain}