From 253bbe1f8b77f6bca6403f78ebc507dc0878fce0 Mon Sep 17 00:00:00 2001 From: CxSean Date: Thu, 14 Oct 2021 05:49:45 +0000 Subject: [PATCH 01/12] Create main.yml --- .github/workflows/main.yml | 49 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..96b637b --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,49 @@ +# This is a basic workflow to create GitHub Issues using the Checkmarx CxFlow GitHub Action. It runs on a pull-request to the main branch. +# +# The following GitHub Secrets must be first defined: +# - CHECKMARX_URL +# - CHECKMARX_USER +# - CHECKMARX_PASSWORD +# - CHECKMARX_CLIENT_SECRET +# - GH_TOKEN +# +# Update the 'team' field to reflect the team name used in Checkmarx. +# +# For full documentation,including a list of all inputs, please refer to the README https://github.com/checkmarx-ts/checkmarx-cxflow-github-action + +name: CxFlow-GitHub-Pull-Request + +# Controls when the action will run. Triggers the workflow on push or pull request events but only for the master branch +on: + pull_request: + types: [opened, reopened, synchronize] #Types specify which pull request events will trigger the workflow. For more events refer Github Actions documentation. + branches: + - master + - main + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel - this job is specifically configured to use the Checkmarx CxFlow Action +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on - Ubuntu is required as Docker is leveraged for the action + runs-on: ubuntu-latest + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + - name: Checkmarx CxFlow Action + uses: checkmarx-ts/checkmarx-cxflow-github-action@v1.1 + with: + project: ${{ secrets.CHECKMARX_PROJECT }} + team: /CxServer + checkmarx_url: ${{ secrets.CHECKMARX_URL }} # To be stored in GitHub Secrets. + checkmarx_username: ${{ secrets.CHECKMARX_USERNAME }} # To be stored in GitHub Secrets. + checkmarx_password: ${{ secrets.CHECKMARX_PASSWORD }} # To be stored in GitHub Secrets. + checkmarx_client_secret: ${{ secrets.CHECKMARX_CLIENT_SECRET }} # To be stored in GitHub Secrets. + sca_tenant: ${{ secrets.SCA_TENANT }} + sca_username: ${{ secrets.SCA_USERNAME }} + sca_password: ${{ secrets.SCA_PASSWORD }} + incremental: false + break_build: false + scanners: sca, sast + bug_tracker: GITHUBPULL + params: --namespace=${{ github.repository_owner }} --repo-name=${{ github.event.repository.name }} --branch=${{ github.head_ref }} --merge-id=${{ github.event.number }} From a6a4ecf1d7aa7d51904834c02d364bd8d9684eed Mon Sep 17 00:00:00 2001 From: CxSean Date: Thu, 14 Oct 2021 05:50:39 +0000 Subject: [PATCH 02/12] Update cx.yml --- .github/workflows/cx.yml | 61 ++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/.github/workflows/cx.yml b/.github/workflows/cx.yml index b807343..96b637b 100644 --- a/.github/workflows/cx.yml +++ b/.github/workflows/cx.yml @@ -1,24 +1,49 @@ -name: cx +# This is a basic workflow to create GitHub Issues using the Checkmarx CxFlow GitHub Action. It runs on a pull-request to the main branch. +# +# The following GitHub Secrets must be first defined: +# - CHECKMARX_URL +# - CHECKMARX_USER +# - CHECKMARX_PASSWORD +# - CHECKMARX_CLIENT_SECRET +# - GH_TOKEN +# +# Update the 'team' field to reflect the team name used in Checkmarx. +# +# For full documentation,including a list of all inputs, please refer to the README https://github.com/checkmarx-ts/checkmarx-cxflow-github-action + +name: CxFlow-GitHub-Pull-Request + +# Controls when the action will run. Triggers the workflow on push or pull request events but only for the master branch on: pull_request: + types: [opened, reopened, synchronize] #Types specify which pull request events will trigger the workflow. For more events refer Github Actions documentation. branches: - - master -# push: + - master + - main + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel - this job is specifically configured to use the Checkmarx CxFlow Action jobs: - ast_scan: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on - Ubuntu is required as Docker is leveraged for the action runs-on: ubuntu-latest - name: Checkmarx scan run steps: - - name: Run scan - uses: CheckmarxDev/ast-github-action@more_engines - id: scan - with: - github_repo_token: ${{ secrets.GITHUB_TOKEN }} - ast_uri: ${{ secrets.AST_URI }} - ast_access_key_id: ${{ secrets.AST_ACCESS_KEY_ID }} - ast_access_key_secret: ${{ secrets.AST_ACCESS_KEY_SECRET }} - sca_user: ${{ secrets.SCA_USER }} - sca_password: ${{ secrets.SCA_PASSWORD }} - action_scan_complete_timeout_secs: 600 - high_results_threshold: 0 - medium_results_threshold: 10 + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + - name: Checkmarx CxFlow Action + uses: checkmarx-ts/checkmarx-cxflow-github-action@v1.1 + with: + project: ${{ secrets.CHECKMARX_PROJECT }} + team: /CxServer + checkmarx_url: ${{ secrets.CHECKMARX_URL }} # To be stored in GitHub Secrets. + checkmarx_username: ${{ secrets.CHECKMARX_USERNAME }} # To be stored in GitHub Secrets. + checkmarx_password: ${{ secrets.CHECKMARX_PASSWORD }} # To be stored in GitHub Secrets. + checkmarx_client_secret: ${{ secrets.CHECKMARX_CLIENT_SECRET }} # To be stored in GitHub Secrets. + sca_tenant: ${{ secrets.SCA_TENANT }} + sca_username: ${{ secrets.SCA_USERNAME }} + sca_password: ${{ secrets.SCA_PASSWORD }} + incremental: false + break_build: false + scanners: sca, sast + bug_tracker: GITHUBPULL + params: --namespace=${{ github.repository_owner }} --repo-name=${{ github.event.repository.name }} --branch=${{ github.head_ref }} --merge-id=${{ github.event.number }} From 6c1982c9faae3e3203024ca3fd01e3412407869b Mon Sep 17 00:00:00 2001 From: CxSean Date: Thu, 14 Oct 2021 05:50:55 +0000 Subject: [PATCH 03/12] Delete main.yml --- .github/workflows/main.yml | 49 -------------------------------------- 1 file changed, 49 deletions(-) delete mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 96b637b..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,49 +0,0 @@ -# This is a basic workflow to create GitHub Issues using the Checkmarx CxFlow GitHub Action. It runs on a pull-request to the main branch. -# -# The following GitHub Secrets must be first defined: -# - CHECKMARX_URL -# - CHECKMARX_USER -# - CHECKMARX_PASSWORD -# - CHECKMARX_CLIENT_SECRET -# - GH_TOKEN -# -# Update the 'team' field to reflect the team name used in Checkmarx. -# -# For full documentation,including a list of all inputs, please refer to the README https://github.com/checkmarx-ts/checkmarx-cxflow-github-action - -name: CxFlow-GitHub-Pull-Request - -# Controls when the action will run. Triggers the workflow on push or pull request events but only for the master branch -on: - pull_request: - types: [opened, reopened, synchronize] #Types specify which pull request events will trigger the workflow. For more events refer Github Actions documentation. - branches: - - master - - main - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel - this job is specifically configured to use the Checkmarx CxFlow Action -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - Ubuntu is required as Docker is leveraged for the action - runs-on: ubuntu-latest - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - name: Checkmarx CxFlow Action - uses: checkmarx-ts/checkmarx-cxflow-github-action@v1.1 - with: - project: ${{ secrets.CHECKMARX_PROJECT }} - team: /CxServer - checkmarx_url: ${{ secrets.CHECKMARX_URL }} # To be stored in GitHub Secrets. - checkmarx_username: ${{ secrets.CHECKMARX_USERNAME }} # To be stored in GitHub Secrets. - checkmarx_password: ${{ secrets.CHECKMARX_PASSWORD }} # To be stored in GitHub Secrets. - checkmarx_client_secret: ${{ secrets.CHECKMARX_CLIENT_SECRET }} # To be stored in GitHub Secrets. - sca_tenant: ${{ secrets.SCA_TENANT }} - sca_username: ${{ secrets.SCA_USERNAME }} - sca_password: ${{ secrets.SCA_PASSWORD }} - incremental: false - break_build: false - scanners: sca, sast - bug_tracker: GITHUBPULL - params: --namespace=${{ github.repository_owner }} --repo-name=${{ github.event.repository.name }} --branch=${{ github.head_ref }} --merge-id=${{ github.event.number }} From b6defd10c5f7bb428d7e92df6f316b7914bfb6c3 Mon Sep 17 00:00:00 2001 From: CxSean Date: Thu, 14 Oct 2021 02:27:39 -0400 Subject: [PATCH 04/12] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 80e96b0..957c3a1 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ This is a "Vulnerable" Web Application developed by Cyber Security and Privacy F https://github.com/CSPF-Founder/JavaSecurityCourse - +**Test **The full course on Hacking and Securing Web Java Programs is available in** https://www.udemy.com/hacking-securing-java-web-programming/ From a94256a4b969ed4b1b38ee58341a5a8f7ccccd12 Mon Sep 17 00:00:00 2001 From: CxSean Date: Thu, 21 Oct 2021 06:07:07 +0000 Subject: [PATCH 05/12] Added Terraform Files --- .../CONTRIBUTING.md | 48 +++ terraform-google-examples-master/LICENSE | 202 +++++++++ terraform-google-examples-master/README.md | 242 +++++++++++ .../example-custom-machine-types/README.md | 107 +++++ .../example-custom-machine-types/diagram.png | Bin 0 -> 72257 bytes .../example-custom-machine-types/main.tf | 111 +++++ .../example-custom-machine-types/variables.tf | 121 ++++++ .../example-gke-k8s-helm/README.md | 145 +++++++ .../example-gke-k8s-helm/helm.tf | 127 ++++++ .../example-gke-k8s-helm/main.tf | 74 ++++ .../example-gke-k8s-helm/openapi_spec.yaml | 54 +++ .../example-gke-k8s-helm/test.sh | 19 + .../example-gke-k8s-multi-region/README.md | 74 ++++ .../example-gke-k8s-multi-region/diagram.png | Bin 0 -> 71403 bytes .../gke-regional/main.tf | 80 ++++ .../k8s-app/index.php | 16 + .../k8s-app/main.tf | 94 +++++ .../k8s-nginx/main.tf | 63 +++ .../example-gke-k8s-multi-region/main.tf | 198 +++++++++ .../example-gke-k8s-multi-region/test.sh | 19 + .../example-gke-k8s-service-lb/README.md | 84 ++++ .../example-gke-k8s-service-lb/k8s.tf | 82 ++++ .../example-gke-k8s-service-lb/main.tf | 74 ++++ .../example-gke-k8s-service-lb/test.sh | 19 + .../example-gke-nat-gateway | 1 + .../example-k8s-gce-calico | 1 + .../example-k8s-gce-kubenet | 1 + terraform-google-examples-master/example-lb | 1 + .../example-lb-http | 1 + .../example-lb-http-nat-gateway | 1 + .../example-lb-https-content | 1 + .../example-lb-https-gke | 1 + .../example-lb-internal | 1 + .../example-sql-db | 1 + .../example-vault-on-gce | 1 + .../terraform-install.sh | 26 ++ .../tests/get_tf_env.sh | 51 +++ .../pipelines/tf-examples-gke-k8s-helm.yaml | 129 ++++++ .../tf-examples-gke-multi-region.yaml | 108 +++++ .../pipelines/tf-examples-gke-service-lb.yaml | 106 +++++ .../tests/pipelines/tf-module-releases.yaml | 393 ++++++++++++++++++ .../tests/pipelines/values.yaml | 7 + .../tests/set_pipelines.sh | 11 + .../tests/trigger_jobs.sh | 7 + 44 files changed, 2902 insertions(+) create mode 100644 terraform-google-examples-master/CONTRIBUTING.md create mode 100644 terraform-google-examples-master/LICENSE create mode 100644 terraform-google-examples-master/README.md create mode 100644 terraform-google-examples-master/example-custom-machine-types/README.md create mode 100644 terraform-google-examples-master/example-custom-machine-types/diagram.png create mode 100644 terraform-google-examples-master/example-custom-machine-types/main.tf create mode 100644 terraform-google-examples-master/example-custom-machine-types/variables.tf create mode 100644 terraform-google-examples-master/example-gke-k8s-helm/README.md create mode 100644 terraform-google-examples-master/example-gke-k8s-helm/helm.tf create mode 100644 terraform-google-examples-master/example-gke-k8s-helm/main.tf create mode 100644 terraform-google-examples-master/example-gke-k8s-helm/openapi_spec.yaml create mode 100644 terraform-google-examples-master/example-gke-k8s-helm/test.sh create mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/README.md create mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/diagram.png create mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/gke-regional/main.tf create mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/index.php create mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/main.tf create mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/k8s-nginx/main.tf create mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/main.tf create mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/test.sh create mode 100644 terraform-google-examples-master/example-gke-k8s-service-lb/README.md create mode 100644 terraform-google-examples-master/example-gke-k8s-service-lb/k8s.tf create mode 100644 terraform-google-examples-master/example-gke-k8s-service-lb/main.tf create mode 100644 terraform-google-examples-master/example-gke-k8s-service-lb/test.sh create mode 100644 terraform-google-examples-master/example-gke-nat-gateway create mode 100644 terraform-google-examples-master/example-k8s-gce-calico create mode 100644 terraform-google-examples-master/example-k8s-gce-kubenet create mode 100644 terraform-google-examples-master/example-lb create mode 100644 terraform-google-examples-master/example-lb-http create mode 100644 terraform-google-examples-master/example-lb-http-nat-gateway create mode 100644 terraform-google-examples-master/example-lb-https-content create mode 100644 terraform-google-examples-master/example-lb-https-gke create mode 100644 terraform-google-examples-master/example-lb-internal create mode 100644 terraform-google-examples-master/example-sql-db create mode 100644 terraform-google-examples-master/example-vault-on-gce create mode 100644 terraform-google-examples-master/terraform-install.sh create mode 100644 terraform-google-examples-master/tests/get_tf_env.sh create mode 100644 terraform-google-examples-master/tests/pipelines/tf-examples-gke-k8s-helm.yaml create mode 100644 terraform-google-examples-master/tests/pipelines/tf-examples-gke-multi-region.yaml create mode 100644 terraform-google-examples-master/tests/pipelines/tf-examples-gke-service-lb.yaml create mode 100644 terraform-google-examples-master/tests/pipelines/tf-module-releases.yaml create mode 100644 terraform-google-examples-master/tests/pipelines/values.yaml create mode 100644 terraform-google-examples-master/tests/set_pipelines.sh create mode 100644 terraform-google-examples-master/tests/trigger_jobs.sh diff --git a/terraform-google-examples-master/CONTRIBUTING.md b/terraform-google-examples-master/CONTRIBUTING.md new file mode 100644 index 0000000..a9e11ac --- /dev/null +++ b/terraform-google-examples-master/CONTRIBUTING.md @@ -0,0 +1,48 @@ +# How to become a contributor and submit your own code + +## Contributor License Agreements + +We'd love to accept your sample apps and patches! Before we can take them, we +have to jump a couple of legal hurdles. + +Please fill out either the individual or corporate Contributor License +Agreement (CLA). + + * If you are an individual writing original source code and you're sure you + own the intellectual property, then you'll need to sign an [individual CLA] + (https://developers.google.com/open-source/cla/individual). + * If you work for a company that wants to allow you to contribute your work, + then you'll need to sign a [corporate CLA] + (https://developers.google.com/open-source/cla/corporate). + +Follow either of the two links above to access the appropriate CLA and +instructions for how to sign and return it. Once we receive it, we'll +be able to accept your pull requests. + +## Contributing A Patch + +1. Submit an issue describing your proposed change to the repo in question. +1. The repo owner will respond to your issue promptly. +1. If your proposed change is accepted, and you haven't already done so, sign a + Contributor License Agreement (see details above). +1. Fork the desired repo, develop and test your code changes. +1. Ensure that your code adheres to the existing style in the sample to which + you are contributing. +1. Ensure that your code has an appropriate set of unit tests which all pass. +1. Submit a pull request. + +## Style + +Format your HCL code with [`hclfmt`](https://github.com/fatih/hclfmt). + +Make sure there are no differences between the `hclfmt` output and your .tf files: + +``` +diff -B <( cat *.tf ) <( hclfmt *.tf ) +``` + +Write changes to the files: + +``` +hclfmt -w *.tf +``` \ No newline at end of file diff --git a/terraform-google-examples-master/LICENSE b/terraform-google-examples-master/LICENSE new file mode 100644 index 0000000..65ee1c1 --- /dev/null +++ b/terraform-google-examples-master/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/terraform-google-examples-master/README.md b/terraform-google-examples-master/README.md new file mode 100644 index 0000000..4699faf --- /dev/null +++ b/terraform-google-examples-master/README.md @@ -0,0 +1,242 @@ +Google Cloud Platform Terraform module examples +===== + +Collection of examples for using Terraform with Google Cloud Platform. + +Clone the repository: + +``` +git clone https://github.com/GoogleCloudPlatform/terraform-google-examples.git +cd terraform-google-examples +git submodule init && git submodule update +``` + +The example directories are all symlinked to their module subdirectories. + +Change to the directory with the example: + +``` +cd EXAMPLE_NAME +``` + +Follow instructions in the README.md for the example. + +__Table of Contents__ + +1. [example-lb](#example-lb) +1. [example-lb-http](#example-lb-http) +1. [example-lb-https-gke](#example-lb-https-gke) +1. [example-lb-http-nat-gateway](#example-lb-http-nat-gateway) +1. [example-lb-https-content](#example-lb-https-content) +1. [example-lb-https-multiple-certs](#example-lb-https-multiple-certs) +1. [example-lb-internal](#example-lb-internal) +1. [example-k8s-gce](#example-k8s-gce) +1. [example-gke-nat-gateway](#example-gke-nat-gateway) +1. [example-sql-db](#example-sql-db) +1. [example-vault-on-gce](#example-vault-on-gce) +1. [example-gke-k8s-helm](#example-gke-k8s-helm) +1. [example-gke-k8s-service-lb](#example-gke-k8s-service-lb) +1. [example-gke-k8s-multi-region](#example-gke-k8s-multi-region) +1. [example-custom-machine-types](#example-custom-machine-types) +1. [example-blue-green-mig-deployment](#example-blue-green-deployment) + +## [example-lb](https://github.com/GoogleCloudPlatform/terraform-google-lb/tree/master/examples/basic) + +Example showing how to create a TCP load balancer. + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-lb&working_dir=examples/basic&page=shell&tutorial=README.md) + + + + +**Figure 1.** *example-lb diagram* + + + +Modules used: + +- [terraform-google-managed-instance-group](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group) +- [terraform-google-lb](https://github.com/GoogleCloudPlatform/terraform-google-lb) + +## [example-lb-http](https://github.com/GoogleCloudPlatform/terraform-google-lb-http/tree/master/examples/basic) + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-lb-http&working_dir=examples/basic&page=shell&tutorial=README.md) + + + + +**Figure 1.** *example-lb-http diagram* + + + +Modules used: + +- [terraform-google-managed-instance-group](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group) +- [terraform-google-lb-http](https://github.com/GoogleCloudPlatform/terraform-google-lb-http) + +## [example-lb-https-gke](https://github.com/GoogleCloudPlatform/terraform-google-lb-http/tree/master/examples/https-gke) + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-lb-http&working_dir=examples/https-gke&page=shell&tutorial=README.md) + + + + +**Figure 1.** *example-lb-https-gke diagram* + + + +Modules used: + +- [terraform-google-lb-http](https://github.com/GoogleCloudPlatform/terraform-google-lb-http) + +## [example-lb-http-nat-gateway](https://github.com/GoogleCloudPlatform/terraform-google-lb-http/tree/master/examples/http-nat-gateway) + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-lb-http&working_dir=examples/http-nat-gateway&page=shell&tutorial=README.md) + + + + +**Figure 1.** *example-lb-http-nat-gateway diagram* + + + +Modules used: + +- [terraform-google-managed-instance-group](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group) +- [terraform-google-lb-http](https://github.com/GoogleCloudPlatform/terraform-google-lb-http) +- [terraform-google-nat-gateway](https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway) + +## [example-lb-https-content](https://github.com/GoogleCloudPlatform/terraform-google-lb-http/tree/master/examples/https-content) + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-lb-http&working_dir=examples/https-content&page=shell&tutorial=README.md) + + + + +**Figure 1.** *example-lb-https-content diagram* + + + +Modules used: + +- [terraform-google-managed-instance-group](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group) +- [terraform-google-lb-http](https://github.com/GoogleCloudPlatform/terraform-google-lb-http) + +## [example-lb-https-multiple-certs](https://github.com/GoogleCloudPlatform/terraform-google-lb-http/tree/master/examples/multiple-certs) + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-lb-http&working_dir=examples/multiple-certs&page=shell&tutorial=README.md) + + + + +Modules used: + +- [terraform-google-managed-instance-group](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group) +- [terraform-google-lb-http](https://github.com/GoogleCloudPlatform/terraform-google-lb-http) + +## [example-lb-internal](https://github.com/GoogleCloudPlatform/terraform-google-lb-internal/tree/master/examples/simple) + +**Figure 1.** *example-lb-internal diagram* + + + +Modules used: + +- [terraform-google-managed-instance-group](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group) +- [terraform-google-lb](https://github.com/GoogleCloudPlatform/terraform-google-lb) +- [terraform-google-lb-internal](https://github.com/GoogleCloudPlatform/terraform-google-lb-internal) + +## [example-k8s-gce-nat-calico](https://github.com/GoogleCloudPlatform/terraform-google-k8s-gce/tree/master/examples/k8s-gce-nat-calico) + +**Figure 1.** *example-k8s-gce-calico diagram* + + + +Modules used: + +- [terraform-google-k8s-gce](https://github.com/GoogleCloudPlatform/terraform-google-k8s-gce) +- [terraform-google-nat-gateway](https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway) + +## [example-k8s-gce-nat-kubenet](https://github.com/GoogleCloudPlatform/terraform-google-k8s-gce/tree/master/examples/k8s-gce-nat-kubenet) + +**Figure 1.** *example-k8s-gce-kubenet diagram* + + + +Modules used: + +- [terraform-google-k8s-gce](https://github.com/GoogleCloudPlatform/terraform-google-k8s-gce) +- [terraform-google-nat-gateway](https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway) + +## [example-gke-nat-gateway](https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway/tree/master/examples/gke-nat-gateway) + +**Figure 1.** *example-gke-nat-gateway diagram* + + + +Modules used: + +- [terraform-google-nat-gateway](https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway) + +## [example-sql-db](https://github.com/GoogleCloudPlatform/terraform-google-sql-db/tree/master/examples/mysql-and-postgres) + +**Figure 1.** *example-sql-db diagram* + + + +Modules used: + +- [terraform-google-sql-db](https://github.com/GoogleCloudPlatform/terraform-google-sql-db) + +## [example-vault-on-gce](https://github.com/GoogleCloudPlatform/terraform-google-vault/tree/master/examples/vault-on-gce) + +**Figure 1.** *example-vault-on-gce diagram* + + + +Modules used: + +- [terraform-google-vault](https://github.com/GoogleCloudPlatform/terraform-google-vault) + +## [example-gke-k8s-helm](https://github.com/GoogleCloudPlatform/terraform-google-examples/tree/master/example-gke-k8s-helm) + +Example showing how to deploy Helm releases to GKE from Terraform + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-gke-k8s-helm&page=shell&tutorial=README.md) + + + + +## [example-gke-k8s-service-lb](https://github.com/GoogleCloudPlatform/terraform-google-examples/tree/master/example-gke-k8s-service-lb) + +Example showing how to create a Kubernetes Service type LoadBalancer to GKE from Terraform + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-gke-k8s-service-lb&page=shell&tutorial=README.md) + + + + +## [example-gke-k8s-multi-region](https://github.com/GoogleCloudPlatform/terraform-google-examples/tree/master/example-gke-k8s-multi-region) + +Example showing how to create an L7 HTTP load balancer across multiple regional GKE clusters. + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-gke-k8s-multi-region&page=shell&tutorial=README.md) + + + + + + +## [example-custom-machine-types](https://github.com/GoogleCloudPlatform/terraform-google-examples/tree/master/example-custom-machine-types) + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-custom-machine-types&page=shell&tutorial=README.md) + +Example showing how to create custom machine types with bastion host and NAT gateway. + + + +## [example-blue-green-mig-deployment](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group/tree/master/examples/blue-green) + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group&working_dir=examples/blue-green&page=shell&tutorial=README.md) + +Example showing how to perform a blue-green deployment with a managed instance group. \ No newline at end of file diff --git a/terraform-google-examples-master/example-custom-machine-types/README.md b/terraform-google-examples-master/example-custom-machine-types/README.md new file mode 100644 index 0000000..9cb8c91 --- /dev/null +++ b/terraform-google-examples-master/example-custom-machine-types/README.md @@ -0,0 +1,107 @@ +# Custom Machine Types + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-custom-machine-types&page=shell&tutorial=README.md) + +This example creates an instance with a custom machine type, a bastion host and a NAT gateway. + +**Figure 1.** *diagram of Google Cloud resources* + +![architecture diagram](./diagram.png) + +## Change to the example directory + +``` +[[ `basename $PWD` != example-custom-machine-types ]] && cd example-custom-machine-types +``` + +## Install Terraform + +1. Install Terraform if it is not already installed (visit [terraform.io](https://terraform.io) for other distributions): + +``` +../terraform-install.sh +``` + +## Set up the environment + +1. Set the project, replace `YOUR_PROJECT` with your project ID: + +``` +PROJECT=YOUR_PROJECT +``` + +``` +gcloud config set project ${PROJECT} +``` + +2. Configure the environment for Terraform: + +``` +[[ $CLOUD_SHELL ]] || gcloud auth application-default login +export GOOGLE_PROJECT=$(gcloud config get-value project) +``` + +## Configure remote backend + +1. Configure Terraform [remote backend](https://www.terraform.io/docs/backends/types/gcs.html) for the state file. + +``` +BUCKET=${GOOGLE_PROJECT}-terraform +gsutil mb gs://${BUCKET} + +PREFIX=tf-es-custom-machine/state +``` + +``` +cat > backend.tf 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 literal 0 HcmV?d00001 diff --git a/terraform-google-examples-master/example-custom-machine-types/main.tf b/terraform-google-examples-master/example-custom-machine-types/main.tf new file mode 100644 index 0000000..12823aa --- /dev/null +++ b/terraform-google-examples-master/example-custom-machine-types/main.tf @@ -0,0 +1,111 @@ +provider "google" { + region = "${var.region}" +} + +data "google_project" "current" {} + +data "google_compute_default_service_account" "default" {} + +resource "google_compute_network" "default" { + name = "${var.network_name}" + auto_create_subnetworks = false +} + +resource "google_compute_subnetwork" "default" { + name = "${var.network_name}" + ip_cidr_range = "${var.network_cidr}" + network = "${google_compute_network.default.self_link}" + region = "${var.region}" + private_ip_google_access = true +} + +resource "google_compute_instance" "default" { + count = "${var.num_nodes}" + name = "${var.name}-${count.index + 1}" + zone = "${var.zone}" + tags = ["${concat(list("${var.name}-ssh", "${var.name}"), var.node_tags)}"] + machine_type = "${var.machine_type}" + min_cpu_platform = "${var.min_cpu_platform}" + allow_stopping_for_update = true + + boot_disk { + auto_delete = "${var.disk_auto_delete}" + + initialize_params { + image = "${var.image_project}/${var.image_family}" + size = "${var.disk_size_gb}" + type = "${var.disk_type}" + } + } + + network_interface { + subnetwork = "${google_compute_subnetwork.default.name}" + access_config = ["${var.access_config}"] + address = "${var.network_ip}" + } + + metadata = "${merge( + map("startup-script", "${var.startup_script}", "tf_depends_id", "${var.depends_id}"), + var.metadata + )}" + + service_account { + email = "${var.service_account_email == "" ? data.google_compute_default_service_account.default.email : var.service_account_email }" + scopes = ["${var.service_account_scopes}"] + } +} + +resource "google_compute_firewall" "ssh" { + name = "${var.name}-ssh" + network = "${google_compute_subnetwork.default.name}" + + allow { + protocol = "tcp" + ports = ["22"] + } + + source_tags = ["${var.name}-bastion"] + target_tags = ["${var.name}-ssh"] +} + +// Bastion host +data "google_compute_image" "bastion" { + family = "${var.bastion_image_family}" + project = "${var.bastion_image_project == "" ? data.google_project.current.project_id : var.bastion_image_project}" +} + +module "bastion" { + source = "GoogleCloudPlatform/managed-instance-group/google" + version = "1.1.14" + region = "${var.region}" + zone = "${var.zone}" + network = "${google_compute_subnetwork.default.name}" + subnetwork = "${google_compute_subnetwork.default.name}" + target_tags = ["${var.name}-bastion"] + machine_type = "${var.bastion_machine_type}" + name = "${var.name}-bastion" + compute_image = "${data.google_compute_image.bastion.self_link}" + http_health_check = false + service_port = "80" + service_port_name = "http" + wait_for_instances = true +} + +// NAT gateway +module "nat-gateway" { + source = "GoogleCloudPlatform/nat-gateway/google" + version = "1.2.0" + region = "${var.region}" + zone = "${var.zone}" + network = "${google_compute_subnetwork.default.name}" + subnetwork = "${google_compute_subnetwork.default.name}" + tags = ["${var.name}"] +} + +output "bastion_instance" { + value = "${element(module.bastion.instances[0], 0)}" +} + +output "bastion" { + value = "gcloud compute ssh --ssh-flag=\"-A\" $(terraform output bastion_instance)" +} diff --git a/terraform-google-examples-master/example-custom-machine-types/variables.tf b/terraform-google-examples-master/example-custom-machine-types/variables.tf new file mode 100644 index 0000000..9562c06 --- /dev/null +++ b/terraform-google-examples-master/example-custom-machine-types/variables.tf @@ -0,0 +1,121 @@ +variable "region" { + default = "us-central1" +} + +variable "zone" { + default = "us-central1-b" +} + +variable "network_cidr" { + default = "10.127.0.0/20" +} + +variable "network_name" { + default = "tf-custom-machine" +} + +variable "machine_type" { + description = "In the form of custom-CPUS-MEM, number of CPUs and memory for custom machine. https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#specifications" + default = "custom-6-65536-ext" +} + +variable "min_cpu_platform" { + description = "Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as Intel Haswell or Intel Skylake. https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform" + default = "Automatic" +} + +variable "name" { + description = "Name prefix for the nodes" + default = "tf-custom" +} + +variable "num_nodes" { + description = "Number of nodes to create" + default = 1 +} + +variable "image_family" { + default = "centos-7" +} + +variable "image_project" { + default = "centos-cloud" +} + +variable "disk_auto_delete" { + description = "Whether or not the disk should be auto-deleted." + default = true +} + +variable "disk_type" { + description = "The GCE disk type. Can be either pd-ssd, local-ssd, or pd-standard." + default = "pd-ssd" +} + +variable "disk_size_gb" { + description = "The size of the image in gigabytes." + default = 10 +} + +variable "access_config" { + description = "The access config block for the instances. Set to [{}] for ephemeral external IP." + type = "list" + default = [] +} + +variable "network_ip" { + description = "Set the network IP of the instance. Useful only when num_nodes is equal to 1." + default = "" +} + +variable "node_tags" { + description = "Additional compute instance network tags for the nodes." + type = "list" + default = [] +} + +variable "startup_script" { + description = "Content of startup-script metadata passed to the instance template." + default = ":" +} + +variable "metadata" { + description = "Map of metadata values to pass to instances." + type = "map" + default = {} +} + +variable "depends_id" { + description = "The ID of a resource that the instance group depends on." + default = "" +} + +variable "service_account_email" { + description = "The email of the service account for the instance template." + default = "" +} + +variable "service_account_scopes" { + description = "List of scopes for the instance template service account" + type = "list" + + default = [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/logging.write", + "https://www.googleapis.com/auth/monitoring.write", + "https://www.googleapis.com/auth/devstorage.full_control", + ] +} + +// Bastion host +variable "bastion_image_family" { + default = "centos-7" +} + +variable "bastion_image_project" { + default = "centos-cloud" +} + +variable "bastion_machine_type" { + default = "n1-standard-1" +} diff --git a/terraform-google-examples-master/example-gke-k8s-helm/README.md b/terraform-google-examples-master/example-gke-k8s-helm/README.md new file mode 100644 index 0000000..694dd81 --- /dev/null +++ b/terraform-google-examples-master/example-gke-k8s-helm/README.md @@ -0,0 +1,145 @@ +# Kubernetes Engine and Helm Example + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-gke-k8s-helm&page=shell&tutorial=README.md) + + + + +## Change to the example directory + +``` +[[ `basename $PWD` != example-gke-k8s-helm ]] && cd example-gke-k8s-helm +``` + +## Install Terraform + +1. Install Terraform if it is not already installed (visit [terraform.io](https://terraform.io) for other distributions): + +``` +../terraform-install.sh +``` + +## Install Helm + +1. Install the latest version of Helm: + +``` +curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh +chmod 700 get_helm.sh +./get_helm.sh + +helm init --client-only +``` + +2. Install the Terraform Helm provider: + +``` +( + set -x; cd "$(mktemp -d)" && + curl -fsSLO "https://github.com/mcuadros/terraform-provider-helm/releases/download/v0.5.1/terraform-provider-helm_v0.5.1_$(uname | tr '[:upper:]' '[:lower:]')_amd64.tar.gz" && + tar -xvf terraform-provider-helm*.tar.gz && + mkdir -p ~/.terraform.d/plugins/ && + mv terraform-provider-helm*/terraform-provider-helm ~/.terraform.d/plugins/ +) +``` + +## Set up the environment + +1. Set the project, replace `YOUR_PROJECT` with your project ID: + +``` +PROJECT=YOUR_PROJECT +``` + +``` +gcloud config set project ${PROJECT} +``` + +2. Configure the environment for Terraform: + +``` +[[ $CLOUD_SHELL ]] || gcloud auth application-default login +export GOOGLE_PROJECT=$(gcloud config get-value project) +``` + +3. Create the terraform.tfvars file: + +``` +cat > terraform.tfvars < + + +**Figure 1.** *diagram of Google Cloud resources* + +![architecture diagram](./diagram.png) + +## Change to the example directory + +``` +[[ `basename $PWD` != example-gke-k8s-multi-region ]] && cd example-gke-k8s-multi-region +``` + +## Install Terraform + +1. Install Terraform if it is not already installed (visit [terraform.io](https://terraform.io) for other distributions): + +``` +../terraform-install.sh +``` + +## Set up the environment + +1. Set the project, replace `YOUR_PROJECT` with your project ID: + +``` +PROJECT=YOUR_PROJECT +``` + +``` +gcloud config set project ${PROJECT} +``` + +2. Configure the environment for Terraform: + +``` +[[ $CLOUD_SHELL ]] || gcloud auth application-default login +export GOOGLE_PROJECT=$(gcloud config get-value project) +``` + +## Run Terraform + +``` +terraform init +terraform apply +``` + +## Testing + +1. Wait for the load balancer to be provisioned: + +``` +./test.sh +``` + +2. Open the address of the load balancer: + +``` +echo http://$(terraform output load-balancer-ip) +``` + +## Cleanup + +1. Delete resources created by terraform: + +``` +terraform destroy +``` \ No newline at end of file diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/diagram.png b/terraform-google-examples-master/example-gke-k8s-multi-region/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6865794d13f7e572d9e4a0f18624763213f966 GIT binary patch literal 71403 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 literal 0 HcmV?d00001 diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/gke-regional/main.tf b/terraform-google-examples-master/example-gke-k8s-multi-region/gke-regional/main.tf new file mode 100644 index 0000000..f7e1548 --- /dev/null +++ b/terraform-google-examples-master/example-gke-k8s-multi-region/gke-regional/main.tf @@ -0,0 +1,80 @@ +variable "region" { + default = "us-west1" +} + +variable "cluster_name" { + default = "tf-regional" +} + +variable "master_version" { + default = "" +} + +variable "node_count" { + default = 1 +} + +variable "tags" { + type = "list" + default = [] +} + +variable "network" { + default = "default" +} + +variable "subnetwork" { + default = "default" +} + +data "google_compute_zones" "available" { + region = "${var.region}" +} + +data "google_container_engine_versions" "default" { + zone = "${element(data.google_compute_zones.available.names, 0)}" +} + +resource "google_container_cluster" "default" { + name = "${var.cluster_name}" + region = "${var.region}" + initial_node_count = "${var.node_count}" + min_master_version = "${var.master_version != "" ? var.master_version : data.google_container_engine_versions.default.latest_master_version}" + network = "${var.network}" + subnetwork = "${var.subnetwork}" + + // Use legacy ABAC until these issues are resolved: + // https://github.com/mcuadros/terraform-provider-helm/issues/56 + // https://github.com/terraform-providers/terraform-provider-kubernetes/pull/73 + enable_legacy_abac = true + + node_config { + tags = ["${var.tags}"] + } + + // Wait for the GCE LB controller to cleanup the resources. + provisioner "local-exec" { + when = "destroy" + command = "sleep 90" + } +} + +output "instance_groups" { + value = "${google_container_cluster.default.instance_group_urls}" +} + +output "endpoint" { + value = "${google_container_cluster.default.endpoint}" +} + +output "client_certificate" { + value = "${google_container_cluster.default.master_auth.0.client_certificate}" +} + +output "client_key" { + value = "${google_container_cluster.default.master_auth.0.client_key}" +} + +output "cluster_ca_certificate" { + value = "${google_container_cluster.default.master_auth.0.cluster_ca_certificate}" +} diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/index.php b/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/index.php new file mode 100644 index 0000000..4f49a80 --- /dev/null +++ b/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/index.php @@ -0,0 +1,16 @@ + [ + "method" => "GET", + "header" => "Metadata-Flavor: Google" + ] + ]; + $context = stream_context_create($opts); + $content = file_get_contents("http://metadata/computeMetadata/v1/$value", false, $context); + return $content; +} +$zone = basename(metadata_value("instance/zone")); +$region = substr($zone, 0, -2); +printf($region); +?> \ No newline at end of file diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/main.tf b/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/main.tf new file mode 100644 index 0000000..2dfa8a9 --- /dev/null +++ b/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/main.tf @@ -0,0 +1,94 @@ +variable "external_ip" {} +variable "node_port" {} + +resource "kubernetes_service" "default" { + metadata { + namespace = "default" + name = "example" + } + + spec { + type = "NodePort" + session_affinity = "ClientIP" + external_ips = ["${var.external_ip}"] + + selector { + run = "example" + } + + port { + name = "http" + protocol = "TCP" + port = 80 + target_port = 80 + node_port = "${var.node_port}" + } + } +} + +resource "kubernetes_config_map" "default" { + metadata { + name = "example" + } + + data { + index.php = "${file("${format("%s/index.php", path.module)}")}" + } +} + +resource "kubernetes_replication_controller" "default" { + metadata { + name = "example" + namespace = "default" + + labels { + run = "example" + } + } + + spec { + selector { + run = "example" + } + + template { + container { + image = "php:alpine" + name = "example" + + command = [ + "php", + "-S", + "0.0.0.0:80", + "-t", + "/var/www", + ] + + volume_mount = { + name = "data" + mount_path = "/var/www/" + } + + resources { + limits { + cpu = "0.5" + memory = "512Mi" + } + + requests { + cpu = "250m" + memory = "50Mi" + } + } + } + + volume = { + name = "data" + + config_map = { + name = "example" + } + } + } + } +} diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-nginx/main.tf b/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-nginx/main.tf new file mode 100644 index 0000000..d3b466c --- /dev/null +++ b/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-nginx/main.tf @@ -0,0 +1,63 @@ +variable "external_ip" {} +variable "node_port" {} + +resource "kubernetes_service" "nginx" { + metadata { + namespace = "default" + name = "nginx" + } + + spec { + type = "NodePort" + session_affinity = "ClientIP" + external_ips = ["${var.external_ip}"] + + selector { + run = "nginx" + } + + port { + name = "http" + protocol = "TCP" + port = 80 + target_port = 80 + node_port = "${var.node_port}" + } + } +} + +resource "kubernetes_replication_controller" "nginx" { + metadata { + name = "nginx" + namespace = "default" + + labels { + run = "nginx" + } + } + + spec { + selector { + run = "nginx" + } + + template { + container { + image = "nginx:latest" + name = "nginx" + + resources { + limits { + cpu = "0.5" + memory = "512Mi" + } + + requests { + cpu = "250m" + memory = "50Mi" + } + } + } + } + } +} diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/main.tf b/terraform-google-examples-master/example-gke-k8s-multi-region/main.tf new file mode 100644 index 0000000..fd3762f --- /dev/null +++ b/terraform-google-examples-master/example-gke-k8s-multi-region/main.tf @@ -0,0 +1,198 @@ +variable "region1_cluster_name" { + default = "tf-region1" +} + +variable "region2_cluster_name" { + default = "tf-region2" +} + +variable "region1" { + default = "us-west1" +} + +variable "region2" { + default = "us-east4" +} + +variable "network_name" { + default = "tf-gke-multi-region" +} + +provider "google" { + region = "${var.region1}" +} + +data "google_client_config" "current" {} + +resource "google_compute_network" "default" { + name = "${var.network_name}" + auto_create_subnetworks = false +} + +resource "google_compute_subnetwork" "region1" { + name = "${var.network_name}" + ip_cidr_range = "10.126.0.0/20" + network = "${google_compute_network.default.self_link}" + region = "${var.region1}" +} + +resource "google_compute_subnetwork" "region2" { + name = "${var.network_name}" + ip_cidr_range = "10.127.0.0/20" + network = "${google_compute_network.default.self_link}" + region = "${var.region2}" +} + +module "cluster1" { + source = "./gke-regional" + region = "${var.region1}" + cluster_name = "${var.region1_cluster_name}" + tags = ["tf-gke-region1"] + network = "${google_compute_subnetwork.region1.network}" + subnetwork = "${google_compute_subnetwork.region1.name}" +} + +module "cluster2" { + source = "./gke-regional" + region = "${var.region2}" + cluster_name = "${var.region2_cluster_name}" + tags = ["tf-gke-region2"] + network = "${google_compute_subnetwork.region2.network}" + subnetwork = "${google_compute_subnetwork.region2.name}" +} + +provider "kubernetes" { + alias = "cluster1" + host = "${module.cluster1.endpoint}" + token = "${data.google_client_config.current.access_token}" + client_certificate = "${base64decode(module.cluster1.client_certificate)}" + client_key = "${base64decode(module.cluster1.client_key)}" + cluster_ca_certificate = "${base64decode(module.cluster1.cluster_ca_certificate)}" +} + +provider "kubernetes" { + alias = "cluster2" + host = "${module.cluster2.endpoint}" + token = "${data.google_client_config.current.access_token}" + client_certificate = "${base64decode(module.cluster2.client_certificate)}" + client_key = "${base64decode(module.cluster2.client_key)}" + cluster_ca_certificate = "${base64decode(module.cluster2.cluster_ca_certificate)}" +} + +module "cluster1_app" { + source = "./k8s-app" + external_ip = "${module.glb.external_ip}" + node_port = 30000 + + providers = { + kubernetes = "kubernetes.cluster1" + } +} + +module "cluster2_app" { + source = "./k8s-app" + external_ip = "${module.glb.external_ip}" + node_port = 30000 + + providers = { + kubernetes = "kubernetes.cluster2" + } +} + +module "glb" { + source = "GoogleCloudPlatform/lb-http/google" + version = "1.0.10" + name = "gke-multi-regional" + target_tags = ["tf-gke-region1", "tf-gke-region2"] + firewall_networks = ["${google_compute_network.default.name}"] + + backends = { + "0" = [ + { + group = "${element(module.cluster1.instance_groups, 0)}" + }, + { + group = "${element(module.cluster1.instance_groups, 1)}" + }, + { + group = "${element(module.cluster1.instance_groups, 2)}" + }, + { + group = "${element(module.cluster2.instance_groups, 0)}" + }, + { + group = "${element(module.cluster2.instance_groups, 1)}" + }, + { + group = "${element(module.cluster2.instance_groups, 2)}" + }, + ] + } + + backend_params = [ + // health check path, port name, port number, timeout seconds. + "/,http,30000,10", + ] +} + +module "cluster1_named_port_1" { + source = "github.com/danisla/terraform-google-named-ports" + instance_group = "${element(module.cluster1.instance_groups, 0)}" + name = "http" + port = "30000" +} + +module "cluster1_named_port_2" { + source = "github.com/danisla/terraform-google-named-ports" + instance_group = "${element(module.cluster1.instance_groups, 1)}" + name = "http" + port = "30000" +} + +module "cluster1_named_port_3" { + source = "github.com/danisla/terraform-google-named-ports" + instance_group = "${element(module.cluster1.instance_groups, 2)}" + name = "http" + port = "30000" +} + +module "cluster2_named_port_1" { + source = "github.com/danisla/terraform-google-named-ports" + instance_group = "${element(module.cluster2.instance_groups, 0)}" + name = "http" + port = "30000" +} + +module "cluster2_named_port_2" { + source = "github.com/danisla/terraform-google-named-ports" + instance_group = "${element(module.cluster2.instance_groups, 1)}" + name = "http" + port = "30000" +} + +module "cluster2_named_port_3" { + source = "github.com/danisla/terraform-google-named-ports" + instance_group = "${element(module.cluster2.instance_groups, 2)}" + name = "http" + port = "30000" +} + +output "cluster1-name" { + value = "${var.region1_cluster_name}" +} + +output "cluster2-name" { + value = "${var.region2_cluster_name}" +} + +output "cluster1-region" { + value = "${var.region1}" +} + +output "cluster2-region" { + value = "${var.region2}" +} + +output "load-balancer-ip" { + value = "${module.glb.external_ip}" +} diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/test.sh b/terraform-google-examples-master/example-gke-k8s-multi-region/test.sh new file mode 100644 index 0000000..9324724 --- /dev/null +++ b/terraform-google-examples-master/example-gke-k8s-multi-region/test.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +set -x +set -e + +URL="http://$(terraform output load-balancer-ip)" +status=0 +count=0 +while [[ $count -lt 120 && $status -ne 200 ]]; do + echo "INFO: Waiting for load balancer..." + status=$(curl -sf -m 5 -o /dev/null -w "%{http_code}" "${URL}" || true) + ((count=count+1)) + sleep 5 +done +if [[ $count -lt 120 ]]; then + echo "INFO: PASS" +else + echo "ERROR: Failed" +fi \ No newline at end of file diff --git a/terraform-google-examples-master/example-gke-k8s-service-lb/README.md b/terraform-google-examples-master/example-gke-k8s-service-lb/README.md new file mode 100644 index 0000000..70cd783 --- /dev/null +++ b/terraform-google-examples-master/example-gke-k8s-service-lb/README.md @@ -0,0 +1,84 @@ +# Kubernetes Engine Example + +Example showing how to integrate the Terraform kubernetes provider with a Google Kubernetes Engine cluster. + +[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-gke-k8s-service-lb&page=shell&tutorial=README.md) + + + + +## Change to the example directory + +``` +[[ `basename $PWD` != example-gke-k8s-service-lb ]] && cd example-gke-k8s-service-lb +``` + +## Install Terraform + +1. Install Terraform if it is not already installed (visit [terraform.io](https://terraform.io) for other distributions): + +``` +../terraform-install.sh +``` + +## Set up the environment + +1. Set the project, replace `YOUR_PROJECT` with your project ID: + +``` +PROJECT=YOUR_PROJECT +``` + +``` +gcloud config set project ${PROJECT} +``` + +2. Configure the environment for Terraform: + +``` +[[ $CLOUD_SHELL ]] || gcloud auth application-default login +export GOOGLE_PROJECT=$(gcloud config get-value project) +``` + +## Run Terraform + +``` +terraform init +terraform apply +``` + +## Testing + +1. Wait for the load balancer to be provisioned: + +``` +./test.sh +``` + +2. Verify response from load balancer: + +``` +curl http://$(terraform output load-balancer-ip) +``` + +## Connecting with kubectl + +1. Get the cluster credentials and configure kubectl: + +``` +gcloud container clusters get-credentials $(terraform output cluster_name) --zone $(terraform output cluster_zone) +``` + +2. Verify kubectl connectivity: + +``` +kubectl get pods -n staging +``` + +## Cleanup + +1. Delete resources created by terraform: + +``` +terraform destroy +``` \ No newline at end of file diff --git a/terraform-google-examples-master/example-gke-k8s-service-lb/k8s.tf b/terraform-google-examples-master/example-gke-k8s-service-lb/k8s.tf new file mode 100644 index 0000000..ed21879 --- /dev/null +++ b/terraform-google-examples-master/example-gke-k8s-service-lb/k8s.tf @@ -0,0 +1,82 @@ +provider "kubernetes" { + host = "${google_container_cluster.default.endpoint}" + token = "${data.google_client_config.current.access_token}" + client_certificate = "${base64decode(google_container_cluster.default.master_auth.0.client_certificate)}" + client_key = "${base64decode(google_container_cluster.default.master_auth.0.client_key)}" + cluster_ca_certificate = "${base64decode(google_container_cluster.default.master_auth.0.cluster_ca_certificate)}" +} + +resource "kubernetes_namespace" "staging" { + metadata { + name = "staging" + } +} + +resource "google_compute_address" "default" { + name = "${var.network_name}" + region = "${var.region}" +} + +resource "kubernetes_service" "nginx" { + metadata { + namespace = "${kubernetes_namespace.staging.metadata.0.name}" + name = "nginx" + } + + spec { + selector { + run = "nginx" + } + + session_affinity = "ClientIP" + + port { + protocol = "TCP" + port = 80 + target_port = 80 + } + + type = "LoadBalancer" + load_balancer_ip = "${google_compute_address.default.address}" + } +} + +resource "kubernetes_replication_controller" "nginx" { + metadata { + name = "nginx" + namespace = "${kubernetes_namespace.staging.metadata.0.name}" + + labels { + run = "nginx" + } + } + + spec { + selector { + run = "nginx" + } + + template { + container { + image = "nginx:latest" + name = "nginx" + + resources { + limits { + cpu = "0.5" + memory = "512Mi" + } + + requests { + cpu = "250m" + memory = "50Mi" + } + } + } + } + } +} + +output "load-balancer-ip" { + value = "${google_compute_address.default.address}" +} diff --git a/terraform-google-examples-master/example-gke-k8s-service-lb/main.tf b/terraform-google-examples-master/example-gke-k8s-service-lb/main.tf new file mode 100644 index 0000000..591eed9 --- /dev/null +++ b/terraform-google-examples-master/example-gke-k8s-service-lb/main.tf @@ -0,0 +1,74 @@ +variable "region" { + default = "us-west1" +} + +variable "zone" { + default = "us-west1-b" +} + +variable "network_name" { + default = "tf-gke-k8s" +} + +provider "google" { + region = "${var.region}" +} + +resource "google_compute_network" "default" { + name = "${var.network_name}" + auto_create_subnetworks = false +} + +resource "google_compute_subnetwork" "default" { + name = "${var.network_name}" + ip_cidr_range = "10.127.0.0/20" + network = "${google_compute_network.default.self_link}" + region = "${var.region}" + private_ip_google_access = true +} + +data "google_client_config" "current" {} + +data "google_container_engine_versions" "default" { + zone = "${var.zone}" +} + +resource "google_container_cluster" "default" { + name = "${var.network_name}" + zone = "${var.zone}" + initial_node_count = 3 + min_master_version = "${data.google_container_engine_versions.default.latest_master_version}" + network = "${google_compute_subnetwork.default.name}" + subnetwork = "${google_compute_subnetwork.default.name}" + + // Use legacy ABAC until these issues are resolved: + // https://github.com/mcuadros/terraform-provider-helm/issues/56 + // https://github.com/terraform-providers/terraform-provider-kubernetes/pull/73 + enable_legacy_abac = true + + // Wait for the GCE LB controller to cleanup the resources. + provisioner "local-exec" { + when = "destroy" + command = "sleep 90" + } +} + +output network { + value = "${google_compute_subnetwork.default.network}" +} + +output subnetwork_name { + value = "${google_compute_subnetwork.default.name}" +} + +output cluster_name { + value = "${google_container_cluster.default.name}" +} + +output cluster_region { + value = "${var.region}" +} + +output cluster_zone { + value = "${google_container_cluster.default.zone}" +} diff --git a/terraform-google-examples-master/example-gke-k8s-service-lb/test.sh b/terraform-google-examples-master/example-gke-k8s-service-lb/test.sh new file mode 100644 index 0000000..9324724 --- /dev/null +++ b/terraform-google-examples-master/example-gke-k8s-service-lb/test.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +set -x +set -e + +URL="http://$(terraform output load-balancer-ip)" +status=0 +count=0 +while [[ $count -lt 120 && $status -ne 200 ]]; do + echo "INFO: Waiting for load balancer..." + status=$(curl -sf -m 5 -o /dev/null -w "%{http_code}" "${URL}" || true) + ((count=count+1)) + sleep 5 +done +if [[ $count -lt 120 ]]; then + echo "INFO: PASS" +else + echo "ERROR: Failed" +fi \ No newline at end of file diff --git a/terraform-google-examples-master/example-gke-nat-gateway b/terraform-google-examples-master/example-gke-nat-gateway new file mode 100644 index 0000000..b16d7d8 --- /dev/null +++ b/terraform-google-examples-master/example-gke-nat-gateway @@ -0,0 +1 @@ +modules/terraform-google-nat-gateway/examples/gke-nat-gateway \ No newline at end of file diff --git a/terraform-google-examples-master/example-k8s-gce-calico b/terraform-google-examples-master/example-k8s-gce-calico new file mode 100644 index 0000000..8cb61e8 --- /dev/null +++ b/terraform-google-examples-master/example-k8s-gce-calico @@ -0,0 +1 @@ +modules/terraform-google-k8s-gce/examples/k8s-gce-nat-calico \ No newline at end of file diff --git a/terraform-google-examples-master/example-k8s-gce-kubenet b/terraform-google-examples-master/example-k8s-gce-kubenet new file mode 100644 index 0000000..8409bc6 --- /dev/null +++ b/terraform-google-examples-master/example-k8s-gce-kubenet @@ -0,0 +1 @@ +modules/terraform-google-k8s-gce/examples/k8s-gce-nat-kubenet \ No newline at end of file diff --git a/terraform-google-examples-master/example-lb b/terraform-google-examples-master/example-lb new file mode 100644 index 0000000..9688cb1 --- /dev/null +++ b/terraform-google-examples-master/example-lb @@ -0,0 +1 @@ +modules/terraform-google-lb/examples/basic \ No newline at end of file diff --git a/terraform-google-examples-master/example-lb-http b/terraform-google-examples-master/example-lb-http new file mode 100644 index 0000000..60ef716 --- /dev/null +++ b/terraform-google-examples-master/example-lb-http @@ -0,0 +1 @@ +modules/terraform-google-lb-http/examples/basic \ No newline at end of file diff --git a/terraform-google-examples-master/example-lb-http-nat-gateway b/terraform-google-examples-master/example-lb-http-nat-gateway new file mode 100644 index 0000000..e2428ff --- /dev/null +++ b/terraform-google-examples-master/example-lb-http-nat-gateway @@ -0,0 +1 @@ +modules/terraform-google-lb-http/examples/http-nat-gateway \ No newline at end of file diff --git a/terraform-google-examples-master/example-lb-https-content b/terraform-google-examples-master/example-lb-https-content new file mode 100644 index 0000000..4560f75 --- /dev/null +++ b/terraform-google-examples-master/example-lb-https-content @@ -0,0 +1 @@ +modules/terraform-google-lb-http/examples/https-content \ No newline at end of file diff --git a/terraform-google-examples-master/example-lb-https-gke b/terraform-google-examples-master/example-lb-https-gke new file mode 100644 index 0000000..3966be3 --- /dev/null +++ b/terraform-google-examples-master/example-lb-https-gke @@ -0,0 +1 @@ +modules/terraform-google-lb-http/examples/https-gke \ No newline at end of file diff --git a/terraform-google-examples-master/example-lb-internal b/terraform-google-examples-master/example-lb-internal new file mode 100644 index 0000000..caff9d2 --- /dev/null +++ b/terraform-google-examples-master/example-lb-internal @@ -0,0 +1 @@ +modules/terraform-google-lb-internal/examples/simple \ No newline at end of file diff --git a/terraform-google-examples-master/example-sql-db b/terraform-google-examples-master/example-sql-db new file mode 100644 index 0000000..d036272 --- /dev/null +++ b/terraform-google-examples-master/example-sql-db @@ -0,0 +1 @@ +modules/terraform-google-sql-db/examples/mysql-and-postgres \ No newline at end of file diff --git a/terraform-google-examples-master/example-vault-on-gce b/terraform-google-examples-master/example-vault-on-gce new file mode 100644 index 0000000..04ff8d1 --- /dev/null +++ b/terraform-google-examples-master/example-vault-on-gce @@ -0,0 +1 @@ +modules/terraform-google-vault/examples/vault-on-gce \ No newline at end of file diff --git a/terraform-google-examples-master/terraform-install.sh b/terraform-google-examples-master/terraform-install.sh new file mode 100644 index 0000000..8431b57 --- /dev/null +++ b/terraform-google-examples-master/terraform-install.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +function terraform-install() { + [[ -f ${HOME}/bin/terraform ]] && echo "`${HOME}/bin/terraform version` already installed at ${HOME}/bin/terraform" && return 0 + OS=$(uname -s) + LATEST_VERSION=$(curl -sL https://releases.hashicorp.com/terraform/index.json | jq -r '.versions[].version' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | egrep -v 'alpha|beta|rc' | tail -1) + LATEST_URL="https://releases.hashicorp.com/terraform/${LATEST_VERSION}/terraform_${LATEST_VERSION}_${OS,,}_amd64.zip" + curl ${LATEST_URL} > /tmp/terraform.zip + mkdir -p ${HOME}/bin + (cd ${HOME}/bin && unzip /tmp/terraform.zip) + if [[ -z $(grep 'export PATH=${HOME}/bin:${PATH}' ~/.bashrc 2>/dev/null) ]]; then + echo 'export PATH=${HOME}/bin:${PATH}' >> ~/.bashrc + fi + + echo "Installed: `${HOME}/bin/terraform version`" + + cat - << EOF + +Run the following to reload your PATH with terraform: + + source ~/.bashrc + +EOF +} + +terraform-install \ No newline at end of file diff --git a/terraform-google-examples-master/tests/get_tf_env.sh b/terraform-google-examples-master/tests/get_tf_env.sh new file mode 100644 index 0000000..cabc217 --- /dev/null +++ b/terraform-google-examples-master/tests/get_tf_env.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash + +PROJECT=$(cat ~/.secrets.yaml | egrep '^project_id:' | cut -d' ' -f2) +BUCKET=$(cat ~/.secrets.yaml | egrep '^tf_backend_bucket:' | cut -d' ' -f2) +ACCESS_KEY=$(cat ~/.secrets.yaml | egrep '^s3_compatible_access_key:' | cut -d' ' -f2) +SECRET_KEY=$(cat ~/.secrets.yaml | egrep '^s3_compatible_secret_key:' | cut -d' ' -f2) +CMD="gsutil ls -p ${PROJECT} gs://${BUCKET}/*/*.tfstate" + +function list-tf-states() { + CMD=$1 + IFS=';' read -ra items <<< "$($CMD | sort | tr '\n' ';')" + [[ ${#items[@]} -eq 0 ]] && echo "ERROR: No state files found." && return 1 + local count=1 + echo "Terraform state files:" >&2 + for i in ${items[@]}; do + echo " $count) ${i//*${BUCKET}\/}" >&2 + ((count=count+1)) + done + local sel=0 + while [[ $sel -lt 1 || $sel -ge $count ]]; do + read -p "Select state file: " sel >&2 + done + item=${items[(sel-1)]} + echo $item +} + +STATEFILE=$(list-tf-states "$CMD") +KEY="${STATEFILE//*${BUCKET}\/}" +PREFIX=$(dirname $KEY) +WORKSPACE=$(basename $KEY .tfstate) + +cat > backend.tf < get_helm.sh + chmod 700 get_helm.sh + ./get_helm.sh + + helm init --client-only + + # Install helm provider + wget https://github.com/mcuadros/terraform-provider-helm/releases/download/v0.5.1/terraform-provider-helm_v0.5.1_linux_amd64.tar.gz + tar -xvf terraform-provider-helm*.tar.gz + + mkdir -p ~/.terraform.d/plugins/ + mv terraform-provider-helm*/terraform-provider-helm ~/.terraform.d/plugins/ + + cat > terraform.tfvars < ${EMAIL}/subject-failed + git log --pretty=oneline --abbrev-commit --graph --decorate |tee ${EMAIL}/body-failed + + LATEST_TAG=$(git tag|tail -1) + TAG_COMMIT=$(git rev-list -n 1 ${LATEST_TAG}) + COMMIT_NUM=$(git log --pretty=oneline | grep -n ${TAG_COMMIT} | cut -d: -f1) + (( COMMIT_NUM-=COMMIT_NUM )) || true + + if [[ "${COMMIT_NUM}" -gt 1 ]]; then + echo "WARN: ${repo_name} master branch is behind latest release tag ${LATEST_TAG} by ${COMMIT_NUM} commits" | tee -a ${EMAIL}/body-failed + exit 1 + fi + echo "INFO: ${repo_name} repo master is in sync with latest release tag" + exit 0 + +- name: once-a-week + type: time + source: + interval: 168h + +- name: send-an-email + type: email + source: + smtp: + host: ((common.smtp_host)) + port: ((common.smtp_port)) + username: ((common.smtp_username)) + password: ((common.smtp_password)) + from: concourse-tf@gcp.solutions + to: [ {{maintainer_email}} ] + +### +# Repo resources +### +- name: terraform-google-lb + type: git + source: + uri: https://github.com/GoogleCloudPlatform/terraform-google-lb + branch: master + +- name: terraform-google-lb-http + type: git + source: + uri: https://github.com/GoogleCloudPlatform/terraform-google-lb-http + branch: master + +- name: terraform-google-lb-internal + type: git + source: + uri: https://github.com/GoogleCloudPlatform/terraform-google-lb-internal + branch: master + +- name: terraform-google-nat-gateway + type: git + source: + uri: https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway + branch: master + +- name: terraform-google-managed-instance-group + type: git + source: + uri: https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group + branch: master + +- name: terraform-google-k8s-gce + type: git + source: + uri: https://github.com/GoogleCloudPlatform/terraform-google-k8s-gce + branch: master + +- name: terraform-google-elasticsearch + type: git + source: + uri: https://github.com/danisla/terraform-google-elasticsearch + branch: master diff --git a/terraform-google-examples-master/tests/pipelines/values.yaml b/terraform-google-examples-master/tests/pipelines/values.yaml new file mode 100644 index 0000000..edef053 --- /dev/null +++ b/terraform-google-examples-master/tests/pipelines/values.yaml @@ -0,0 +1,7 @@ +maintainer_email: disla@google.com +backend_bucket: concourse-terraform-remote-backend + +uri: https://github.com/GoogleCloudPlatform/terraform-google-examples.git +branch: master +github_owner: GoogleCloudPlatform +github_repo: terraform-google-examples \ No newline at end of file diff --git a/terraform-google-examples-master/tests/set_pipelines.sh b/terraform-google-examples-master/tests/set_pipelines.sh new file mode 100644 index 0000000..7332655 --- /dev/null +++ b/terraform-google-examples-master/tests/set_pipelines.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +fly -t tf set-pipeline -p tf-module-releases -c tests/pipelines/tf-module-releases.yaml -l tests/pipelines/values.yaml +fly -t tf set-pipeline -p tf-examples-gke-k8s-helm -c tests/pipelines/tf-examples-gke-k8s-helm.yaml -l tests/pipelines/values.yaml +fly -t tf set-pipeline -p tf-examples-gke-multi-region -c tests/pipelines/tf-examples-gke-multi-region.yaml -l tests/pipelines/values.yaml +fly -t tf set-pipeline -p tf-examples-gke-service-lb -c tests/pipelines/tf-examples-gke-service-lb.yaml -l tests/pipelines/values.yaml + +fly -t tf expose-pipeline -p tf-module-releases +fly -t tf expose-pipeline -p tf-examples-gke-k8s-helm +fly -t tf expose-pipeline -p tf-examples-gke-multi-region +fly -t tf expose-pipeline -p tf-examples-gke-service-lb diff --git a/terraform-google-examples-master/tests/trigger_jobs.sh b/terraform-google-examples-master/tests/trigger_jobs.sh new file mode 100644 index 0000000..797c227 --- /dev/null +++ b/terraform-google-examples-master/tests/trigger_jobs.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -e +PIPELINE="tf-examples-regression" +JOBS="run-example-gke-k8s-helm run-example-gke-k8s-service-lb run-example-gke-k8s-multi-region" +for j in $JOBS; do + fly -t solutions trigger-job -j ${PIPELINE}/${j} +done From e6c241f8b69125243f06a6a58c77af78f148646d Mon Sep 17 00:00:00 2001 From: CxSean Date: Thu, 21 Oct 2021 02:59:59 -0400 Subject: [PATCH 06/12] Delete main.tf --- .../example-gke-k8s-multi-region/main.tf | 198 ------------------ 1 file changed, 198 deletions(-) delete mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/main.tf diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/main.tf b/terraform-google-examples-master/example-gke-k8s-multi-region/main.tf deleted file mode 100644 index fd3762f..0000000 --- a/terraform-google-examples-master/example-gke-k8s-multi-region/main.tf +++ /dev/null @@ -1,198 +0,0 @@ -variable "region1_cluster_name" { - default = "tf-region1" -} - -variable "region2_cluster_name" { - default = "tf-region2" -} - -variable "region1" { - default = "us-west1" -} - -variable "region2" { - default = "us-east4" -} - -variable "network_name" { - default = "tf-gke-multi-region" -} - -provider "google" { - region = "${var.region1}" -} - -data "google_client_config" "current" {} - -resource "google_compute_network" "default" { - name = "${var.network_name}" - auto_create_subnetworks = false -} - -resource "google_compute_subnetwork" "region1" { - name = "${var.network_name}" - ip_cidr_range = "10.126.0.0/20" - network = "${google_compute_network.default.self_link}" - region = "${var.region1}" -} - -resource "google_compute_subnetwork" "region2" { - name = "${var.network_name}" - ip_cidr_range = "10.127.0.0/20" - network = "${google_compute_network.default.self_link}" - region = "${var.region2}" -} - -module "cluster1" { - source = "./gke-regional" - region = "${var.region1}" - cluster_name = "${var.region1_cluster_name}" - tags = ["tf-gke-region1"] - network = "${google_compute_subnetwork.region1.network}" - subnetwork = "${google_compute_subnetwork.region1.name}" -} - -module "cluster2" { - source = "./gke-regional" - region = "${var.region2}" - cluster_name = "${var.region2_cluster_name}" - tags = ["tf-gke-region2"] - network = "${google_compute_subnetwork.region2.network}" - subnetwork = "${google_compute_subnetwork.region2.name}" -} - -provider "kubernetes" { - alias = "cluster1" - host = "${module.cluster1.endpoint}" - token = "${data.google_client_config.current.access_token}" - client_certificate = "${base64decode(module.cluster1.client_certificate)}" - client_key = "${base64decode(module.cluster1.client_key)}" - cluster_ca_certificate = "${base64decode(module.cluster1.cluster_ca_certificate)}" -} - -provider "kubernetes" { - alias = "cluster2" - host = "${module.cluster2.endpoint}" - token = "${data.google_client_config.current.access_token}" - client_certificate = "${base64decode(module.cluster2.client_certificate)}" - client_key = "${base64decode(module.cluster2.client_key)}" - cluster_ca_certificate = "${base64decode(module.cluster2.cluster_ca_certificate)}" -} - -module "cluster1_app" { - source = "./k8s-app" - external_ip = "${module.glb.external_ip}" - node_port = 30000 - - providers = { - kubernetes = "kubernetes.cluster1" - } -} - -module "cluster2_app" { - source = "./k8s-app" - external_ip = "${module.glb.external_ip}" - node_port = 30000 - - providers = { - kubernetes = "kubernetes.cluster2" - } -} - -module "glb" { - source = "GoogleCloudPlatform/lb-http/google" - version = "1.0.10" - name = "gke-multi-regional" - target_tags = ["tf-gke-region1", "tf-gke-region2"] - firewall_networks = ["${google_compute_network.default.name}"] - - backends = { - "0" = [ - { - group = "${element(module.cluster1.instance_groups, 0)}" - }, - { - group = "${element(module.cluster1.instance_groups, 1)}" - }, - { - group = "${element(module.cluster1.instance_groups, 2)}" - }, - { - group = "${element(module.cluster2.instance_groups, 0)}" - }, - { - group = "${element(module.cluster2.instance_groups, 1)}" - }, - { - group = "${element(module.cluster2.instance_groups, 2)}" - }, - ] - } - - backend_params = [ - // health check path, port name, port number, timeout seconds. - "/,http,30000,10", - ] -} - -module "cluster1_named_port_1" { - source = "github.com/danisla/terraform-google-named-ports" - instance_group = "${element(module.cluster1.instance_groups, 0)}" - name = "http" - port = "30000" -} - -module "cluster1_named_port_2" { - source = "github.com/danisla/terraform-google-named-ports" - instance_group = "${element(module.cluster1.instance_groups, 1)}" - name = "http" - port = "30000" -} - -module "cluster1_named_port_3" { - source = "github.com/danisla/terraform-google-named-ports" - instance_group = "${element(module.cluster1.instance_groups, 2)}" - name = "http" - port = "30000" -} - -module "cluster2_named_port_1" { - source = "github.com/danisla/terraform-google-named-ports" - instance_group = "${element(module.cluster2.instance_groups, 0)}" - name = "http" - port = "30000" -} - -module "cluster2_named_port_2" { - source = "github.com/danisla/terraform-google-named-ports" - instance_group = "${element(module.cluster2.instance_groups, 1)}" - name = "http" - port = "30000" -} - -module "cluster2_named_port_3" { - source = "github.com/danisla/terraform-google-named-ports" - instance_group = "${element(module.cluster2.instance_groups, 2)}" - name = "http" - port = "30000" -} - -output "cluster1-name" { - value = "${var.region1_cluster_name}" -} - -output "cluster2-name" { - value = "${var.region2_cluster_name}" -} - -output "cluster1-region" { - value = "${var.region1}" -} - -output "cluster2-region" { - value = "${var.region2}" -} - -output "load-balancer-ip" { - value = "${module.glb.external_ip}" -} From e1045ffdbfeb3c987db7ebe36269ea2385bf39d4 Mon Sep 17 00:00:00 2001 From: Cxsean Date: Thu, 21 Oct 2021 07:07:53 +0000 Subject: [PATCH 07/12] removing terform examples --- .../CONTRIBUTING.md | 48 --- terraform-google-examples-master/LICENSE | 202 --------- terraform-google-examples-master/README.md | 242 ----------- .../example-custom-machine-types/README.md | 107 ----- .../example-custom-machine-types/diagram.png | Bin 72257 -> 0 bytes .../example-custom-machine-types/main.tf | 111 ----- .../example-custom-machine-types/variables.tf | 121 ------ .../example-gke-k8s-helm/README.md | 145 ------- .../example-gke-k8s-helm/helm.tf | 127 ------ .../example-gke-k8s-helm/main.tf | 74 ---- .../example-gke-k8s-helm/openapi_spec.yaml | 54 --- .../example-gke-k8s-helm/test.sh | 19 - .../example-gke-k8s-multi-region/README.md | 74 ---- .../example-gke-k8s-multi-region/diagram.png | Bin 71403 -> 0 bytes .../gke-regional/main.tf | 80 ---- .../k8s-app/index.php | 16 - .../k8s-app/main.tf | 94 ----- .../k8s-nginx/main.tf | 63 --- .../example-gke-k8s-multi-region/test.sh | 19 - .../example-gke-k8s-service-lb/README.md | 84 ---- .../example-gke-k8s-service-lb/k8s.tf | 82 ---- .../example-gke-k8s-service-lb/main.tf | 74 ---- .../example-gke-k8s-service-lb/test.sh | 19 - .../example-gke-nat-gateway | 1 - .../example-k8s-gce-calico | 1 - .../example-k8s-gce-kubenet | 1 - terraform-google-examples-master/example-lb | 1 - .../example-lb-http | 1 - .../example-lb-http-nat-gateway | 1 - .../example-lb-https-content | 1 - .../example-lb-https-gke | 1 - .../example-lb-internal | 1 - .../example-sql-db | 1 - .../example-vault-on-gce | 1 - .../terraform-install.sh | 26 -- .../tests/get_tf_env.sh | 51 --- .../pipelines/tf-examples-gke-k8s-helm.yaml | 129 ------ .../tf-examples-gke-multi-region.yaml | 108 ----- .../pipelines/tf-examples-gke-service-lb.yaml | 106 ----- .../tests/pipelines/tf-module-releases.yaml | 393 ------------------ .../tests/pipelines/values.yaml | 7 - .../tests/set_pipelines.sh | 11 - .../tests/trigger_jobs.sh | 7 - 43 files changed, 2704 deletions(-) delete mode 100644 terraform-google-examples-master/CONTRIBUTING.md delete mode 100644 terraform-google-examples-master/LICENSE delete mode 100644 terraform-google-examples-master/README.md delete mode 100644 terraform-google-examples-master/example-custom-machine-types/README.md delete mode 100644 terraform-google-examples-master/example-custom-machine-types/diagram.png delete mode 100644 terraform-google-examples-master/example-custom-machine-types/main.tf delete mode 100644 terraform-google-examples-master/example-custom-machine-types/variables.tf delete mode 100644 terraform-google-examples-master/example-gke-k8s-helm/README.md delete mode 100644 terraform-google-examples-master/example-gke-k8s-helm/helm.tf delete mode 100644 terraform-google-examples-master/example-gke-k8s-helm/main.tf delete mode 100644 terraform-google-examples-master/example-gke-k8s-helm/openapi_spec.yaml delete mode 100644 terraform-google-examples-master/example-gke-k8s-helm/test.sh delete mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/README.md delete mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/diagram.png delete mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/gke-regional/main.tf delete mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/index.php delete mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/main.tf delete mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/k8s-nginx/main.tf delete mode 100644 terraform-google-examples-master/example-gke-k8s-multi-region/test.sh delete mode 100644 terraform-google-examples-master/example-gke-k8s-service-lb/README.md delete mode 100644 terraform-google-examples-master/example-gke-k8s-service-lb/k8s.tf delete mode 100644 terraform-google-examples-master/example-gke-k8s-service-lb/main.tf delete mode 100644 terraform-google-examples-master/example-gke-k8s-service-lb/test.sh delete mode 100644 terraform-google-examples-master/example-gke-nat-gateway delete mode 100644 terraform-google-examples-master/example-k8s-gce-calico delete mode 100644 terraform-google-examples-master/example-k8s-gce-kubenet delete mode 100644 terraform-google-examples-master/example-lb delete mode 100644 terraform-google-examples-master/example-lb-http delete mode 100644 terraform-google-examples-master/example-lb-http-nat-gateway delete mode 100644 terraform-google-examples-master/example-lb-https-content delete mode 100644 terraform-google-examples-master/example-lb-https-gke delete mode 100644 terraform-google-examples-master/example-lb-internal delete mode 100644 terraform-google-examples-master/example-sql-db delete mode 100644 terraform-google-examples-master/example-vault-on-gce delete mode 100644 terraform-google-examples-master/terraform-install.sh delete mode 100644 terraform-google-examples-master/tests/get_tf_env.sh delete mode 100644 terraform-google-examples-master/tests/pipelines/tf-examples-gke-k8s-helm.yaml delete mode 100644 terraform-google-examples-master/tests/pipelines/tf-examples-gke-multi-region.yaml delete mode 100644 terraform-google-examples-master/tests/pipelines/tf-examples-gke-service-lb.yaml delete mode 100644 terraform-google-examples-master/tests/pipelines/tf-module-releases.yaml delete mode 100644 terraform-google-examples-master/tests/pipelines/values.yaml delete mode 100644 terraform-google-examples-master/tests/set_pipelines.sh delete mode 100644 terraform-google-examples-master/tests/trigger_jobs.sh diff --git a/terraform-google-examples-master/CONTRIBUTING.md b/terraform-google-examples-master/CONTRIBUTING.md deleted file mode 100644 index a9e11ac..0000000 --- a/terraform-google-examples-master/CONTRIBUTING.md +++ /dev/null @@ -1,48 +0,0 @@ -# How to become a contributor and submit your own code - -## Contributor License Agreements - -We'd love to accept your sample apps and patches! Before we can take them, we -have to jump a couple of legal hurdles. - -Please fill out either the individual or corporate Contributor License -Agreement (CLA). - - * If you are an individual writing original source code and you're sure you - own the intellectual property, then you'll need to sign an [individual CLA] - (https://developers.google.com/open-source/cla/individual). - * If you work for a company that wants to allow you to contribute your work, - then you'll need to sign a [corporate CLA] - (https://developers.google.com/open-source/cla/corporate). - -Follow either of the two links above to access the appropriate CLA and -instructions for how to sign and return it. Once we receive it, we'll -be able to accept your pull requests. - -## Contributing A Patch - -1. Submit an issue describing your proposed change to the repo in question. -1. The repo owner will respond to your issue promptly. -1. If your proposed change is accepted, and you haven't already done so, sign a - Contributor License Agreement (see details above). -1. Fork the desired repo, develop and test your code changes. -1. Ensure that your code adheres to the existing style in the sample to which - you are contributing. -1. Ensure that your code has an appropriate set of unit tests which all pass. -1. Submit a pull request. - -## Style - -Format your HCL code with [`hclfmt`](https://github.com/fatih/hclfmt). - -Make sure there are no differences between the `hclfmt` output and your .tf files: - -``` -diff -B <( cat *.tf ) <( hclfmt *.tf ) -``` - -Write changes to the files: - -``` -hclfmt -w *.tf -``` \ No newline at end of file diff --git a/terraform-google-examples-master/LICENSE b/terraform-google-examples-master/LICENSE deleted file mode 100644 index 65ee1c1..0000000 --- a/terraform-google-examples-master/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. \ No newline at end of file diff --git a/terraform-google-examples-master/README.md b/terraform-google-examples-master/README.md deleted file mode 100644 index 4699faf..0000000 --- a/terraform-google-examples-master/README.md +++ /dev/null @@ -1,242 +0,0 @@ -Google Cloud Platform Terraform module examples -===== - -Collection of examples for using Terraform with Google Cloud Platform. - -Clone the repository: - -``` -git clone https://github.com/GoogleCloudPlatform/terraform-google-examples.git -cd terraform-google-examples -git submodule init && git submodule update -``` - -The example directories are all symlinked to their module subdirectories. - -Change to the directory with the example: - -``` -cd EXAMPLE_NAME -``` - -Follow instructions in the README.md for the example. - -__Table of Contents__ - -1. [example-lb](#example-lb) -1. [example-lb-http](#example-lb-http) -1. [example-lb-https-gke](#example-lb-https-gke) -1. [example-lb-http-nat-gateway](#example-lb-http-nat-gateway) -1. [example-lb-https-content](#example-lb-https-content) -1. [example-lb-https-multiple-certs](#example-lb-https-multiple-certs) -1. [example-lb-internal](#example-lb-internal) -1. [example-k8s-gce](#example-k8s-gce) -1. [example-gke-nat-gateway](#example-gke-nat-gateway) -1. [example-sql-db](#example-sql-db) -1. [example-vault-on-gce](#example-vault-on-gce) -1. [example-gke-k8s-helm](#example-gke-k8s-helm) -1. [example-gke-k8s-service-lb](#example-gke-k8s-service-lb) -1. [example-gke-k8s-multi-region](#example-gke-k8s-multi-region) -1. [example-custom-machine-types](#example-custom-machine-types) -1. [example-blue-green-mig-deployment](#example-blue-green-deployment) - -## [example-lb](https://github.com/GoogleCloudPlatform/terraform-google-lb/tree/master/examples/basic) - -Example showing how to create a TCP load balancer. - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-lb&working_dir=examples/basic&page=shell&tutorial=README.md) - - - - -**Figure 1.** *example-lb diagram* - - - -Modules used: - -- [terraform-google-managed-instance-group](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group) -- [terraform-google-lb](https://github.com/GoogleCloudPlatform/terraform-google-lb) - -## [example-lb-http](https://github.com/GoogleCloudPlatform/terraform-google-lb-http/tree/master/examples/basic) - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-lb-http&working_dir=examples/basic&page=shell&tutorial=README.md) - - - - -**Figure 1.** *example-lb-http diagram* - - - -Modules used: - -- [terraform-google-managed-instance-group](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group) -- [terraform-google-lb-http](https://github.com/GoogleCloudPlatform/terraform-google-lb-http) - -## [example-lb-https-gke](https://github.com/GoogleCloudPlatform/terraform-google-lb-http/tree/master/examples/https-gke) - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-lb-http&working_dir=examples/https-gke&page=shell&tutorial=README.md) - - - - -**Figure 1.** *example-lb-https-gke diagram* - - - -Modules used: - -- [terraform-google-lb-http](https://github.com/GoogleCloudPlatform/terraform-google-lb-http) - -## [example-lb-http-nat-gateway](https://github.com/GoogleCloudPlatform/terraform-google-lb-http/tree/master/examples/http-nat-gateway) - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-lb-http&working_dir=examples/http-nat-gateway&page=shell&tutorial=README.md) - - - - -**Figure 1.** *example-lb-http-nat-gateway diagram* - - - -Modules used: - -- [terraform-google-managed-instance-group](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group) -- [terraform-google-lb-http](https://github.com/GoogleCloudPlatform/terraform-google-lb-http) -- [terraform-google-nat-gateway](https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway) - -## [example-lb-https-content](https://github.com/GoogleCloudPlatform/terraform-google-lb-http/tree/master/examples/https-content) - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-lb-http&working_dir=examples/https-content&page=shell&tutorial=README.md) - - - - -**Figure 1.** *example-lb-https-content diagram* - - - -Modules used: - -- [terraform-google-managed-instance-group](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group) -- [terraform-google-lb-http](https://github.com/GoogleCloudPlatform/terraform-google-lb-http) - -## [example-lb-https-multiple-certs](https://github.com/GoogleCloudPlatform/terraform-google-lb-http/tree/master/examples/multiple-certs) - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-lb-http&working_dir=examples/multiple-certs&page=shell&tutorial=README.md) - - - - -Modules used: - -- [terraform-google-managed-instance-group](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group) -- [terraform-google-lb-http](https://github.com/GoogleCloudPlatform/terraform-google-lb-http) - -## [example-lb-internal](https://github.com/GoogleCloudPlatform/terraform-google-lb-internal/tree/master/examples/simple) - -**Figure 1.** *example-lb-internal diagram* - - - -Modules used: - -- [terraform-google-managed-instance-group](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group) -- [terraform-google-lb](https://github.com/GoogleCloudPlatform/terraform-google-lb) -- [terraform-google-lb-internal](https://github.com/GoogleCloudPlatform/terraform-google-lb-internal) - -## [example-k8s-gce-nat-calico](https://github.com/GoogleCloudPlatform/terraform-google-k8s-gce/tree/master/examples/k8s-gce-nat-calico) - -**Figure 1.** *example-k8s-gce-calico diagram* - - - -Modules used: - -- [terraform-google-k8s-gce](https://github.com/GoogleCloudPlatform/terraform-google-k8s-gce) -- [terraform-google-nat-gateway](https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway) - -## [example-k8s-gce-nat-kubenet](https://github.com/GoogleCloudPlatform/terraform-google-k8s-gce/tree/master/examples/k8s-gce-nat-kubenet) - -**Figure 1.** *example-k8s-gce-kubenet diagram* - - - -Modules used: - -- [terraform-google-k8s-gce](https://github.com/GoogleCloudPlatform/terraform-google-k8s-gce) -- [terraform-google-nat-gateway](https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway) - -## [example-gke-nat-gateway](https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway/tree/master/examples/gke-nat-gateway) - -**Figure 1.** *example-gke-nat-gateway diagram* - - - -Modules used: - -- [terraform-google-nat-gateway](https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway) - -## [example-sql-db](https://github.com/GoogleCloudPlatform/terraform-google-sql-db/tree/master/examples/mysql-and-postgres) - -**Figure 1.** *example-sql-db diagram* - - - -Modules used: - -- [terraform-google-sql-db](https://github.com/GoogleCloudPlatform/terraform-google-sql-db) - -## [example-vault-on-gce](https://github.com/GoogleCloudPlatform/terraform-google-vault/tree/master/examples/vault-on-gce) - -**Figure 1.** *example-vault-on-gce diagram* - - - -Modules used: - -- [terraform-google-vault](https://github.com/GoogleCloudPlatform/terraform-google-vault) - -## [example-gke-k8s-helm](https://github.com/GoogleCloudPlatform/terraform-google-examples/tree/master/example-gke-k8s-helm) - -Example showing how to deploy Helm releases to GKE from Terraform - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-gke-k8s-helm&page=shell&tutorial=README.md) - - - - -## [example-gke-k8s-service-lb](https://github.com/GoogleCloudPlatform/terraform-google-examples/tree/master/example-gke-k8s-service-lb) - -Example showing how to create a Kubernetes Service type LoadBalancer to GKE from Terraform - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-gke-k8s-service-lb&page=shell&tutorial=README.md) - - - - -## [example-gke-k8s-multi-region](https://github.com/GoogleCloudPlatform/terraform-google-examples/tree/master/example-gke-k8s-multi-region) - -Example showing how to create an L7 HTTP load balancer across multiple regional GKE clusters. - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-gke-k8s-multi-region&page=shell&tutorial=README.md) - - - - - - -## [example-custom-machine-types](https://github.com/GoogleCloudPlatform/terraform-google-examples/tree/master/example-custom-machine-types) - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-custom-machine-types&page=shell&tutorial=README.md) - -Example showing how to create custom machine types with bastion host and NAT gateway. - - - -## [example-blue-green-mig-deployment](https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group/tree/master/examples/blue-green) - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group&working_dir=examples/blue-green&page=shell&tutorial=README.md) - -Example showing how to perform a blue-green deployment with a managed instance group. \ No newline at end of file diff --git a/terraform-google-examples-master/example-custom-machine-types/README.md b/terraform-google-examples-master/example-custom-machine-types/README.md deleted file mode 100644 index 9cb8c91..0000000 --- a/terraform-google-examples-master/example-custom-machine-types/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# Custom Machine Types - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-custom-machine-types&page=shell&tutorial=README.md) - -This example creates an instance with a custom machine type, a bastion host and a NAT gateway. - -**Figure 1.** *diagram of Google Cloud resources* - -![architecture diagram](./diagram.png) - -## Change to the example directory - -``` -[[ `basename $PWD` != example-custom-machine-types ]] && cd example-custom-machine-types -``` - -## Install Terraform - -1. Install Terraform if it is not already installed (visit [terraform.io](https://terraform.io) for other distributions): - -``` -../terraform-install.sh -``` - -## Set up the environment - -1. Set the project, replace `YOUR_PROJECT` with your project ID: - -``` -PROJECT=YOUR_PROJECT -``` - -``` -gcloud config set project ${PROJECT} -``` - -2. Configure the environment for Terraform: - -``` -[[ $CLOUD_SHELL ]] || gcloud auth application-default login -export GOOGLE_PROJECT=$(gcloud config get-value project) -``` - -## Configure remote backend - -1. Configure Terraform [remote backend](https://www.terraform.io/docs/backends/types/gcs.html) for the state file. - -``` -BUCKET=${GOOGLE_PROJECT}-terraform -gsutil mb gs://${BUCKET} - -PREFIX=tf-es-custom-machine/state -``` - -``` -cat > backend.tf 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 diff --git a/terraform-google-examples-master/example-custom-machine-types/main.tf b/terraform-google-examples-master/example-custom-machine-types/main.tf deleted file mode 100644 index 12823aa..0000000 --- a/terraform-google-examples-master/example-custom-machine-types/main.tf +++ /dev/null @@ -1,111 +0,0 @@ -provider "google" { - region = "${var.region}" -} - -data "google_project" "current" {} - -data "google_compute_default_service_account" "default" {} - -resource "google_compute_network" "default" { - name = "${var.network_name}" - auto_create_subnetworks = false -} - -resource "google_compute_subnetwork" "default" { - name = "${var.network_name}" - ip_cidr_range = "${var.network_cidr}" - network = "${google_compute_network.default.self_link}" - region = "${var.region}" - private_ip_google_access = true -} - -resource "google_compute_instance" "default" { - count = "${var.num_nodes}" - name = "${var.name}-${count.index + 1}" - zone = "${var.zone}" - tags = ["${concat(list("${var.name}-ssh", "${var.name}"), var.node_tags)}"] - machine_type = "${var.machine_type}" - min_cpu_platform = "${var.min_cpu_platform}" - allow_stopping_for_update = true - - boot_disk { - auto_delete = "${var.disk_auto_delete}" - - initialize_params { - image = "${var.image_project}/${var.image_family}" - size = "${var.disk_size_gb}" - type = "${var.disk_type}" - } - } - - network_interface { - subnetwork = "${google_compute_subnetwork.default.name}" - access_config = ["${var.access_config}"] - address = "${var.network_ip}" - } - - metadata = "${merge( - map("startup-script", "${var.startup_script}", "tf_depends_id", "${var.depends_id}"), - var.metadata - )}" - - service_account { - email = "${var.service_account_email == "" ? data.google_compute_default_service_account.default.email : var.service_account_email }" - scopes = ["${var.service_account_scopes}"] - } -} - -resource "google_compute_firewall" "ssh" { - name = "${var.name}-ssh" - network = "${google_compute_subnetwork.default.name}" - - allow { - protocol = "tcp" - ports = ["22"] - } - - source_tags = ["${var.name}-bastion"] - target_tags = ["${var.name}-ssh"] -} - -// Bastion host -data "google_compute_image" "bastion" { - family = "${var.bastion_image_family}" - project = "${var.bastion_image_project == "" ? data.google_project.current.project_id : var.bastion_image_project}" -} - -module "bastion" { - source = "GoogleCloudPlatform/managed-instance-group/google" - version = "1.1.14" - region = "${var.region}" - zone = "${var.zone}" - network = "${google_compute_subnetwork.default.name}" - subnetwork = "${google_compute_subnetwork.default.name}" - target_tags = ["${var.name}-bastion"] - machine_type = "${var.bastion_machine_type}" - name = "${var.name}-bastion" - compute_image = "${data.google_compute_image.bastion.self_link}" - http_health_check = false - service_port = "80" - service_port_name = "http" - wait_for_instances = true -} - -// NAT gateway -module "nat-gateway" { - source = "GoogleCloudPlatform/nat-gateway/google" - version = "1.2.0" - region = "${var.region}" - zone = "${var.zone}" - network = "${google_compute_subnetwork.default.name}" - subnetwork = "${google_compute_subnetwork.default.name}" - tags = ["${var.name}"] -} - -output "bastion_instance" { - value = "${element(module.bastion.instances[0], 0)}" -} - -output "bastion" { - value = "gcloud compute ssh --ssh-flag=\"-A\" $(terraform output bastion_instance)" -} diff --git a/terraform-google-examples-master/example-custom-machine-types/variables.tf b/terraform-google-examples-master/example-custom-machine-types/variables.tf deleted file mode 100644 index 9562c06..0000000 --- a/terraform-google-examples-master/example-custom-machine-types/variables.tf +++ /dev/null @@ -1,121 +0,0 @@ -variable "region" { - default = "us-central1" -} - -variable "zone" { - default = "us-central1-b" -} - -variable "network_cidr" { - default = "10.127.0.0/20" -} - -variable "network_name" { - default = "tf-custom-machine" -} - -variable "machine_type" { - description = "In the form of custom-CPUS-MEM, number of CPUs and memory for custom machine. https://cloud.google.com/compute/docs/instances/creating-instance-with-custom-machine-type#specifications" - default = "custom-6-65536-ext" -} - -variable "min_cpu_platform" { - description = "Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as Intel Haswell or Intel Skylake. https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform" - default = "Automatic" -} - -variable "name" { - description = "Name prefix for the nodes" - default = "tf-custom" -} - -variable "num_nodes" { - description = "Number of nodes to create" - default = 1 -} - -variable "image_family" { - default = "centos-7" -} - -variable "image_project" { - default = "centos-cloud" -} - -variable "disk_auto_delete" { - description = "Whether or not the disk should be auto-deleted." - default = true -} - -variable "disk_type" { - description = "The GCE disk type. Can be either pd-ssd, local-ssd, or pd-standard." - default = "pd-ssd" -} - -variable "disk_size_gb" { - description = "The size of the image in gigabytes." - default = 10 -} - -variable "access_config" { - description = "The access config block for the instances. Set to [{}] for ephemeral external IP." - type = "list" - default = [] -} - -variable "network_ip" { - description = "Set the network IP of the instance. Useful only when num_nodes is equal to 1." - default = "" -} - -variable "node_tags" { - description = "Additional compute instance network tags for the nodes." - type = "list" - default = [] -} - -variable "startup_script" { - description = "Content of startup-script metadata passed to the instance template." - default = ":" -} - -variable "metadata" { - description = "Map of metadata values to pass to instances." - type = "map" - default = {} -} - -variable "depends_id" { - description = "The ID of a resource that the instance group depends on." - default = "" -} - -variable "service_account_email" { - description = "The email of the service account for the instance template." - default = "" -} - -variable "service_account_scopes" { - description = "List of scopes for the instance template service account" - type = "list" - - default = [ - "https://www.googleapis.com/auth/compute", - "https://www.googleapis.com/auth/logging.write", - "https://www.googleapis.com/auth/monitoring.write", - "https://www.googleapis.com/auth/devstorage.full_control", - ] -} - -// Bastion host -variable "bastion_image_family" { - default = "centos-7" -} - -variable "bastion_image_project" { - default = "centos-cloud" -} - -variable "bastion_machine_type" { - default = "n1-standard-1" -} diff --git a/terraform-google-examples-master/example-gke-k8s-helm/README.md b/terraform-google-examples-master/example-gke-k8s-helm/README.md deleted file mode 100644 index 694dd81..0000000 --- a/terraform-google-examples-master/example-gke-k8s-helm/README.md +++ /dev/null @@ -1,145 +0,0 @@ -# Kubernetes Engine and Helm Example - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-gke-k8s-helm&page=shell&tutorial=README.md) - - - - -## Change to the example directory - -``` -[[ `basename $PWD` != example-gke-k8s-helm ]] && cd example-gke-k8s-helm -``` - -## Install Terraform - -1. Install Terraform if it is not already installed (visit [terraform.io](https://terraform.io) for other distributions): - -``` -../terraform-install.sh -``` - -## Install Helm - -1. Install the latest version of Helm: - -``` -curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh -chmod 700 get_helm.sh -./get_helm.sh - -helm init --client-only -``` - -2. Install the Terraform Helm provider: - -``` -( - set -x; cd "$(mktemp -d)" && - curl -fsSLO "https://github.com/mcuadros/terraform-provider-helm/releases/download/v0.5.1/terraform-provider-helm_v0.5.1_$(uname | tr '[:upper:]' '[:lower:]')_amd64.tar.gz" && - tar -xvf terraform-provider-helm*.tar.gz && - mkdir -p ~/.terraform.d/plugins/ && - mv terraform-provider-helm*/terraform-provider-helm ~/.terraform.d/plugins/ -) -``` - -## Set up the environment - -1. Set the project, replace `YOUR_PROJECT` with your project ID: - -``` -PROJECT=YOUR_PROJECT -``` - -``` -gcloud config set project ${PROJECT} -``` - -2. Configure the environment for Terraform: - -``` -[[ $CLOUD_SHELL ]] || gcloud auth application-default login -export GOOGLE_PROJECT=$(gcloud config get-value project) -``` - -3. Create the terraform.tfvars file: - -``` -cat > terraform.tfvars < - - -**Figure 1.** *diagram of Google Cloud resources* - -![architecture diagram](./diagram.png) - -## Change to the example directory - -``` -[[ `basename $PWD` != example-gke-k8s-multi-region ]] && cd example-gke-k8s-multi-region -``` - -## Install Terraform - -1. Install Terraform if it is not already installed (visit [terraform.io](https://terraform.io) for other distributions): - -``` -../terraform-install.sh -``` - -## Set up the environment - -1. Set the project, replace `YOUR_PROJECT` with your project ID: - -``` -PROJECT=YOUR_PROJECT -``` - -``` -gcloud config set project ${PROJECT} -``` - -2. Configure the environment for Terraform: - -``` -[[ $CLOUD_SHELL ]] || gcloud auth application-default login -export GOOGLE_PROJECT=$(gcloud config get-value project) -``` - -## Run Terraform - -``` -terraform init -terraform apply -``` - -## Testing - -1. Wait for the load balancer to be provisioned: - -``` -./test.sh -``` - -2. Open the address of the load balancer: - -``` -echo http://$(terraform output load-balancer-ip) -``` - -## Cleanup - -1. Delete resources created by terraform: - -``` -terraform destroy -``` \ No newline at end of file diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/diagram.png b/terraform-google-examples-master/example-gke-k8s-multi-region/diagram.png deleted file mode 100644 index dd6865794d13f7e572d9e4a0f18624763213f966..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71403 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 diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/gke-regional/main.tf b/terraform-google-examples-master/example-gke-k8s-multi-region/gke-regional/main.tf deleted file mode 100644 index f7e1548..0000000 --- a/terraform-google-examples-master/example-gke-k8s-multi-region/gke-regional/main.tf +++ /dev/null @@ -1,80 +0,0 @@ -variable "region" { - default = "us-west1" -} - -variable "cluster_name" { - default = "tf-regional" -} - -variable "master_version" { - default = "" -} - -variable "node_count" { - default = 1 -} - -variable "tags" { - type = "list" - default = [] -} - -variable "network" { - default = "default" -} - -variable "subnetwork" { - default = "default" -} - -data "google_compute_zones" "available" { - region = "${var.region}" -} - -data "google_container_engine_versions" "default" { - zone = "${element(data.google_compute_zones.available.names, 0)}" -} - -resource "google_container_cluster" "default" { - name = "${var.cluster_name}" - region = "${var.region}" - initial_node_count = "${var.node_count}" - min_master_version = "${var.master_version != "" ? var.master_version : data.google_container_engine_versions.default.latest_master_version}" - network = "${var.network}" - subnetwork = "${var.subnetwork}" - - // Use legacy ABAC until these issues are resolved: - // https://github.com/mcuadros/terraform-provider-helm/issues/56 - // https://github.com/terraform-providers/terraform-provider-kubernetes/pull/73 - enable_legacy_abac = true - - node_config { - tags = ["${var.tags}"] - } - - // Wait for the GCE LB controller to cleanup the resources. - provisioner "local-exec" { - when = "destroy" - command = "sleep 90" - } -} - -output "instance_groups" { - value = "${google_container_cluster.default.instance_group_urls}" -} - -output "endpoint" { - value = "${google_container_cluster.default.endpoint}" -} - -output "client_certificate" { - value = "${google_container_cluster.default.master_auth.0.client_certificate}" -} - -output "client_key" { - value = "${google_container_cluster.default.master_auth.0.client_key}" -} - -output "cluster_ca_certificate" { - value = "${google_container_cluster.default.master_auth.0.cluster_ca_certificate}" -} diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/index.php b/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/index.php deleted file mode 100644 index 4f49a80..0000000 --- a/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/index.php +++ /dev/null @@ -1,16 +0,0 @@ - [ - "method" => "GET", - "header" => "Metadata-Flavor: Google" - ] - ]; - $context = stream_context_create($opts); - $content = file_get_contents("http://metadata/computeMetadata/v1/$value", false, $context); - return $content; -} -$zone = basename(metadata_value("instance/zone")); -$region = substr($zone, 0, -2); -printf($region); -?> \ No newline at end of file diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/main.tf b/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/main.tf deleted file mode 100644 index 2dfa8a9..0000000 --- a/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-app/main.tf +++ /dev/null @@ -1,94 +0,0 @@ -variable "external_ip" {} -variable "node_port" {} - -resource "kubernetes_service" "default" { - metadata { - namespace = "default" - name = "example" - } - - spec { - type = "NodePort" - session_affinity = "ClientIP" - external_ips = ["${var.external_ip}"] - - selector { - run = "example" - } - - port { - name = "http" - protocol = "TCP" - port = 80 - target_port = 80 - node_port = "${var.node_port}" - } - } -} - -resource "kubernetes_config_map" "default" { - metadata { - name = "example" - } - - data { - index.php = "${file("${format("%s/index.php", path.module)}")}" - } -} - -resource "kubernetes_replication_controller" "default" { - metadata { - name = "example" - namespace = "default" - - labels { - run = "example" - } - } - - spec { - selector { - run = "example" - } - - template { - container { - image = "php:alpine" - name = "example" - - command = [ - "php", - "-S", - "0.0.0.0:80", - "-t", - "/var/www", - ] - - volume_mount = { - name = "data" - mount_path = "/var/www/" - } - - resources { - limits { - cpu = "0.5" - memory = "512Mi" - } - - requests { - cpu = "250m" - memory = "50Mi" - } - } - } - - volume = { - name = "data" - - config_map = { - name = "example" - } - } - } - } -} diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-nginx/main.tf b/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-nginx/main.tf deleted file mode 100644 index d3b466c..0000000 --- a/terraform-google-examples-master/example-gke-k8s-multi-region/k8s-nginx/main.tf +++ /dev/null @@ -1,63 +0,0 @@ -variable "external_ip" {} -variable "node_port" {} - -resource "kubernetes_service" "nginx" { - metadata { - namespace = "default" - name = "nginx" - } - - spec { - type = "NodePort" - session_affinity = "ClientIP" - external_ips = ["${var.external_ip}"] - - selector { - run = "nginx" - } - - port { - name = "http" - protocol = "TCP" - port = 80 - target_port = 80 - node_port = "${var.node_port}" - } - } -} - -resource "kubernetes_replication_controller" "nginx" { - metadata { - name = "nginx" - namespace = "default" - - labels { - run = "nginx" - } - } - - spec { - selector { - run = "nginx" - } - - template { - container { - image = "nginx:latest" - name = "nginx" - - resources { - limits { - cpu = "0.5" - memory = "512Mi" - } - - requests { - cpu = "250m" - memory = "50Mi" - } - } - } - } - } -} diff --git a/terraform-google-examples-master/example-gke-k8s-multi-region/test.sh b/terraform-google-examples-master/example-gke-k8s-multi-region/test.sh deleted file mode 100644 index 9324724..0000000 --- a/terraform-google-examples-master/example-gke-k8s-multi-region/test.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -set -x -set -e - -URL="http://$(terraform output load-balancer-ip)" -status=0 -count=0 -while [[ $count -lt 120 && $status -ne 200 ]]; do - echo "INFO: Waiting for load balancer..." - status=$(curl -sf -m 5 -o /dev/null -w "%{http_code}" "${URL}" || true) - ((count=count+1)) - sleep 5 -done -if [[ $count -lt 120 ]]; then - echo "INFO: PASS" -else - echo "ERROR: Failed" -fi \ No newline at end of file diff --git a/terraform-google-examples-master/example-gke-k8s-service-lb/README.md b/terraform-google-examples-master/example-gke-k8s-service-lb/README.md deleted file mode 100644 index 70cd783..0000000 --- a/terraform-google-examples-master/example-gke-k8s-service-lb/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# Kubernetes Engine Example - -Example showing how to integrate the Terraform kubernetes provider with a Google Kubernetes Engine cluster. - -[![button](http://gstatic.com/cloudssh/images/open-btn.png)](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/GoogleCloudPlatform/terraform-google-examples&working_dir=example-gke-k8s-service-lb&page=shell&tutorial=README.md) - - - - -## Change to the example directory - -``` -[[ `basename $PWD` != example-gke-k8s-service-lb ]] && cd example-gke-k8s-service-lb -``` - -## Install Terraform - -1. Install Terraform if it is not already installed (visit [terraform.io](https://terraform.io) for other distributions): - -``` -../terraform-install.sh -``` - -## Set up the environment - -1. Set the project, replace `YOUR_PROJECT` with your project ID: - -``` -PROJECT=YOUR_PROJECT -``` - -``` -gcloud config set project ${PROJECT} -``` - -2. Configure the environment for Terraform: - -``` -[[ $CLOUD_SHELL ]] || gcloud auth application-default login -export GOOGLE_PROJECT=$(gcloud config get-value project) -``` - -## Run Terraform - -``` -terraform init -terraform apply -``` - -## Testing - -1. Wait for the load balancer to be provisioned: - -``` -./test.sh -``` - -2. Verify response from load balancer: - -``` -curl http://$(terraform output load-balancer-ip) -``` - -## Connecting with kubectl - -1. Get the cluster credentials and configure kubectl: - -``` -gcloud container clusters get-credentials $(terraform output cluster_name) --zone $(terraform output cluster_zone) -``` - -2. Verify kubectl connectivity: - -``` -kubectl get pods -n staging -``` - -## Cleanup - -1. Delete resources created by terraform: - -``` -terraform destroy -``` \ No newline at end of file diff --git a/terraform-google-examples-master/example-gke-k8s-service-lb/k8s.tf b/terraform-google-examples-master/example-gke-k8s-service-lb/k8s.tf deleted file mode 100644 index ed21879..0000000 --- a/terraform-google-examples-master/example-gke-k8s-service-lb/k8s.tf +++ /dev/null @@ -1,82 +0,0 @@ -provider "kubernetes" { - host = "${google_container_cluster.default.endpoint}" - token = "${data.google_client_config.current.access_token}" - client_certificate = "${base64decode(google_container_cluster.default.master_auth.0.client_certificate)}" - client_key = "${base64decode(google_container_cluster.default.master_auth.0.client_key)}" - cluster_ca_certificate = "${base64decode(google_container_cluster.default.master_auth.0.cluster_ca_certificate)}" -} - -resource "kubernetes_namespace" "staging" { - metadata { - name = "staging" - } -} - -resource "google_compute_address" "default" { - name = "${var.network_name}" - region = "${var.region}" -} - -resource "kubernetes_service" "nginx" { - metadata { - namespace = "${kubernetes_namespace.staging.metadata.0.name}" - name = "nginx" - } - - spec { - selector { - run = "nginx" - } - - session_affinity = "ClientIP" - - port { - protocol = "TCP" - port = 80 - target_port = 80 - } - - type = "LoadBalancer" - load_balancer_ip = "${google_compute_address.default.address}" - } -} - -resource "kubernetes_replication_controller" "nginx" { - metadata { - name = "nginx" - namespace = "${kubernetes_namespace.staging.metadata.0.name}" - - labels { - run = "nginx" - } - } - - spec { - selector { - run = "nginx" - } - - template { - container { - image = "nginx:latest" - name = "nginx" - - resources { - limits { - cpu = "0.5" - memory = "512Mi" - } - - requests { - cpu = "250m" - memory = "50Mi" - } - } - } - } - } -} - -output "load-balancer-ip" { - value = "${google_compute_address.default.address}" -} diff --git a/terraform-google-examples-master/example-gke-k8s-service-lb/main.tf b/terraform-google-examples-master/example-gke-k8s-service-lb/main.tf deleted file mode 100644 index 591eed9..0000000 --- a/terraform-google-examples-master/example-gke-k8s-service-lb/main.tf +++ /dev/null @@ -1,74 +0,0 @@ -variable "region" { - default = "us-west1" -} - -variable "zone" { - default = "us-west1-b" -} - -variable "network_name" { - default = "tf-gke-k8s" -} - -provider "google" { - region = "${var.region}" -} - -resource "google_compute_network" "default" { - name = "${var.network_name}" - auto_create_subnetworks = false -} - -resource "google_compute_subnetwork" "default" { - name = "${var.network_name}" - ip_cidr_range = "10.127.0.0/20" - network = "${google_compute_network.default.self_link}" - region = "${var.region}" - private_ip_google_access = true -} - -data "google_client_config" "current" {} - -data "google_container_engine_versions" "default" { - zone = "${var.zone}" -} - -resource "google_container_cluster" "default" { - name = "${var.network_name}" - zone = "${var.zone}" - initial_node_count = 3 - min_master_version = "${data.google_container_engine_versions.default.latest_master_version}" - network = "${google_compute_subnetwork.default.name}" - subnetwork = "${google_compute_subnetwork.default.name}" - - // Use legacy ABAC until these issues are resolved: - // https://github.com/mcuadros/terraform-provider-helm/issues/56 - // https://github.com/terraform-providers/terraform-provider-kubernetes/pull/73 - enable_legacy_abac = true - - // Wait for the GCE LB controller to cleanup the resources. - provisioner "local-exec" { - when = "destroy" - command = "sleep 90" - } -} - -output network { - value = "${google_compute_subnetwork.default.network}" -} - -output subnetwork_name { - value = "${google_compute_subnetwork.default.name}" -} - -output cluster_name { - value = "${google_container_cluster.default.name}" -} - -output cluster_region { - value = "${var.region}" -} - -output cluster_zone { - value = "${google_container_cluster.default.zone}" -} diff --git a/terraform-google-examples-master/example-gke-k8s-service-lb/test.sh b/terraform-google-examples-master/example-gke-k8s-service-lb/test.sh deleted file mode 100644 index 9324724..0000000 --- a/terraform-google-examples-master/example-gke-k8s-service-lb/test.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -set -x -set -e - -URL="http://$(terraform output load-balancer-ip)" -status=0 -count=0 -while [[ $count -lt 120 && $status -ne 200 ]]; do - echo "INFO: Waiting for load balancer..." - status=$(curl -sf -m 5 -o /dev/null -w "%{http_code}" "${URL}" || true) - ((count=count+1)) - sleep 5 -done -if [[ $count -lt 120 ]]; then - echo "INFO: PASS" -else - echo "ERROR: Failed" -fi \ No newline at end of file diff --git a/terraform-google-examples-master/example-gke-nat-gateway b/terraform-google-examples-master/example-gke-nat-gateway deleted file mode 100644 index b16d7d8..0000000 --- a/terraform-google-examples-master/example-gke-nat-gateway +++ /dev/null @@ -1 +0,0 @@ -modules/terraform-google-nat-gateway/examples/gke-nat-gateway \ No newline at end of file diff --git a/terraform-google-examples-master/example-k8s-gce-calico b/terraform-google-examples-master/example-k8s-gce-calico deleted file mode 100644 index 8cb61e8..0000000 --- a/terraform-google-examples-master/example-k8s-gce-calico +++ /dev/null @@ -1 +0,0 @@ -modules/terraform-google-k8s-gce/examples/k8s-gce-nat-calico \ No newline at end of file diff --git a/terraform-google-examples-master/example-k8s-gce-kubenet b/terraform-google-examples-master/example-k8s-gce-kubenet deleted file mode 100644 index 8409bc6..0000000 --- a/terraform-google-examples-master/example-k8s-gce-kubenet +++ /dev/null @@ -1 +0,0 @@ -modules/terraform-google-k8s-gce/examples/k8s-gce-nat-kubenet \ No newline at end of file diff --git a/terraform-google-examples-master/example-lb b/terraform-google-examples-master/example-lb deleted file mode 100644 index 9688cb1..0000000 --- a/terraform-google-examples-master/example-lb +++ /dev/null @@ -1 +0,0 @@ -modules/terraform-google-lb/examples/basic \ No newline at end of file diff --git a/terraform-google-examples-master/example-lb-http b/terraform-google-examples-master/example-lb-http deleted file mode 100644 index 60ef716..0000000 --- a/terraform-google-examples-master/example-lb-http +++ /dev/null @@ -1 +0,0 @@ -modules/terraform-google-lb-http/examples/basic \ No newline at end of file diff --git a/terraform-google-examples-master/example-lb-http-nat-gateway b/terraform-google-examples-master/example-lb-http-nat-gateway deleted file mode 100644 index e2428ff..0000000 --- a/terraform-google-examples-master/example-lb-http-nat-gateway +++ /dev/null @@ -1 +0,0 @@ -modules/terraform-google-lb-http/examples/http-nat-gateway \ No newline at end of file diff --git a/terraform-google-examples-master/example-lb-https-content b/terraform-google-examples-master/example-lb-https-content deleted file mode 100644 index 4560f75..0000000 --- a/terraform-google-examples-master/example-lb-https-content +++ /dev/null @@ -1 +0,0 @@ -modules/terraform-google-lb-http/examples/https-content \ No newline at end of file diff --git a/terraform-google-examples-master/example-lb-https-gke b/terraform-google-examples-master/example-lb-https-gke deleted file mode 100644 index 3966be3..0000000 --- a/terraform-google-examples-master/example-lb-https-gke +++ /dev/null @@ -1 +0,0 @@ -modules/terraform-google-lb-http/examples/https-gke \ No newline at end of file diff --git a/terraform-google-examples-master/example-lb-internal b/terraform-google-examples-master/example-lb-internal deleted file mode 100644 index caff9d2..0000000 --- a/terraform-google-examples-master/example-lb-internal +++ /dev/null @@ -1 +0,0 @@ -modules/terraform-google-lb-internal/examples/simple \ No newline at end of file diff --git a/terraform-google-examples-master/example-sql-db b/terraform-google-examples-master/example-sql-db deleted file mode 100644 index d036272..0000000 --- a/terraform-google-examples-master/example-sql-db +++ /dev/null @@ -1 +0,0 @@ -modules/terraform-google-sql-db/examples/mysql-and-postgres \ No newline at end of file diff --git a/terraform-google-examples-master/example-vault-on-gce b/terraform-google-examples-master/example-vault-on-gce deleted file mode 100644 index 04ff8d1..0000000 --- a/terraform-google-examples-master/example-vault-on-gce +++ /dev/null @@ -1 +0,0 @@ -modules/terraform-google-vault/examples/vault-on-gce \ No newline at end of file diff --git a/terraform-google-examples-master/terraform-install.sh b/terraform-google-examples-master/terraform-install.sh deleted file mode 100644 index 8431b57..0000000 --- a/terraform-google-examples-master/terraform-install.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -function terraform-install() { - [[ -f ${HOME}/bin/terraform ]] && echo "`${HOME}/bin/terraform version` already installed at ${HOME}/bin/terraform" && return 0 - OS=$(uname -s) - LATEST_VERSION=$(curl -sL https://releases.hashicorp.com/terraform/index.json | jq -r '.versions[].version' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | egrep -v 'alpha|beta|rc' | tail -1) - LATEST_URL="https://releases.hashicorp.com/terraform/${LATEST_VERSION}/terraform_${LATEST_VERSION}_${OS,,}_amd64.zip" - curl ${LATEST_URL} > /tmp/terraform.zip - mkdir -p ${HOME}/bin - (cd ${HOME}/bin && unzip /tmp/terraform.zip) - if [[ -z $(grep 'export PATH=${HOME}/bin:${PATH}' ~/.bashrc 2>/dev/null) ]]; then - echo 'export PATH=${HOME}/bin:${PATH}' >> ~/.bashrc - fi - - echo "Installed: `${HOME}/bin/terraform version`" - - cat - << EOF - -Run the following to reload your PATH with terraform: - - source ~/.bashrc - -EOF -} - -terraform-install \ No newline at end of file diff --git a/terraform-google-examples-master/tests/get_tf_env.sh b/terraform-google-examples-master/tests/get_tf_env.sh deleted file mode 100644 index cabc217..0000000 --- a/terraform-google-examples-master/tests/get_tf_env.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash - -PROJECT=$(cat ~/.secrets.yaml | egrep '^project_id:' | cut -d' ' -f2) -BUCKET=$(cat ~/.secrets.yaml | egrep '^tf_backend_bucket:' | cut -d' ' -f2) -ACCESS_KEY=$(cat ~/.secrets.yaml | egrep '^s3_compatible_access_key:' | cut -d' ' -f2) -SECRET_KEY=$(cat ~/.secrets.yaml | egrep '^s3_compatible_secret_key:' | cut -d' ' -f2) -CMD="gsutil ls -p ${PROJECT} gs://${BUCKET}/*/*.tfstate" - -function list-tf-states() { - CMD=$1 - IFS=';' read -ra items <<< "$($CMD | sort | tr '\n' ';')" - [[ ${#items[@]} -eq 0 ]] && echo "ERROR: No state files found." && return 1 - local count=1 - echo "Terraform state files:" >&2 - for i in ${items[@]}; do - echo " $count) ${i//*${BUCKET}\/}" >&2 - ((count=count+1)) - done - local sel=0 - while [[ $sel -lt 1 || $sel -ge $count ]]; do - read -p "Select state file: " sel >&2 - done - item=${items[(sel-1)]} - echo $item -} - -STATEFILE=$(list-tf-states "$CMD") -KEY="${STATEFILE//*${BUCKET}\/}" -PREFIX=$(dirname $KEY) -WORKSPACE=$(basename $KEY .tfstate) - -cat > backend.tf < get_helm.sh - chmod 700 get_helm.sh - ./get_helm.sh - - helm init --client-only - - # Install helm provider - wget https://github.com/mcuadros/terraform-provider-helm/releases/download/v0.5.1/terraform-provider-helm_v0.5.1_linux_amd64.tar.gz - tar -xvf terraform-provider-helm*.tar.gz - - mkdir -p ~/.terraform.d/plugins/ - mv terraform-provider-helm*/terraform-provider-helm ~/.terraform.d/plugins/ - - cat > terraform.tfvars < ${EMAIL}/subject-failed - git log --pretty=oneline --abbrev-commit --graph --decorate |tee ${EMAIL}/body-failed - - LATEST_TAG=$(git tag|tail -1) - TAG_COMMIT=$(git rev-list -n 1 ${LATEST_TAG}) - COMMIT_NUM=$(git log --pretty=oneline | grep -n ${TAG_COMMIT} | cut -d: -f1) - (( COMMIT_NUM-=COMMIT_NUM )) || true - - if [[ "${COMMIT_NUM}" -gt 1 ]]; then - echo "WARN: ${repo_name} master branch is behind latest release tag ${LATEST_TAG} by ${COMMIT_NUM} commits" | tee -a ${EMAIL}/body-failed - exit 1 - fi - echo "INFO: ${repo_name} repo master is in sync with latest release tag" - exit 0 - -- name: once-a-week - type: time - source: - interval: 168h - -- name: send-an-email - type: email - source: - smtp: - host: ((common.smtp_host)) - port: ((common.smtp_port)) - username: ((common.smtp_username)) - password: ((common.smtp_password)) - from: concourse-tf@gcp.solutions - to: [ {{maintainer_email}} ] - -### -# Repo resources -### -- name: terraform-google-lb - type: git - source: - uri: https://github.com/GoogleCloudPlatform/terraform-google-lb - branch: master - -- name: terraform-google-lb-http - type: git - source: - uri: https://github.com/GoogleCloudPlatform/terraform-google-lb-http - branch: master - -- name: terraform-google-lb-internal - type: git - source: - uri: https://github.com/GoogleCloudPlatform/terraform-google-lb-internal - branch: master - -- name: terraform-google-nat-gateway - type: git - source: - uri: https://github.com/GoogleCloudPlatform/terraform-google-nat-gateway - branch: master - -- name: terraform-google-managed-instance-group - type: git - source: - uri: https://github.com/GoogleCloudPlatform/terraform-google-managed-instance-group - branch: master - -- name: terraform-google-k8s-gce - type: git - source: - uri: https://github.com/GoogleCloudPlatform/terraform-google-k8s-gce - branch: master - -- name: terraform-google-elasticsearch - type: git - source: - uri: https://github.com/danisla/terraform-google-elasticsearch - branch: master diff --git a/terraform-google-examples-master/tests/pipelines/values.yaml b/terraform-google-examples-master/tests/pipelines/values.yaml deleted file mode 100644 index edef053..0000000 --- a/terraform-google-examples-master/tests/pipelines/values.yaml +++ /dev/null @@ -1,7 +0,0 @@ -maintainer_email: disla@google.com -backend_bucket: concourse-terraform-remote-backend - -uri: https://github.com/GoogleCloudPlatform/terraform-google-examples.git -branch: master -github_owner: GoogleCloudPlatform -github_repo: terraform-google-examples \ No newline at end of file diff --git a/terraform-google-examples-master/tests/set_pipelines.sh b/terraform-google-examples-master/tests/set_pipelines.sh deleted file mode 100644 index 7332655..0000000 --- a/terraform-google-examples-master/tests/set_pipelines.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -fly -t tf set-pipeline -p tf-module-releases -c tests/pipelines/tf-module-releases.yaml -l tests/pipelines/values.yaml -fly -t tf set-pipeline -p tf-examples-gke-k8s-helm -c tests/pipelines/tf-examples-gke-k8s-helm.yaml -l tests/pipelines/values.yaml -fly -t tf set-pipeline -p tf-examples-gke-multi-region -c tests/pipelines/tf-examples-gke-multi-region.yaml -l tests/pipelines/values.yaml -fly -t tf set-pipeline -p tf-examples-gke-service-lb -c tests/pipelines/tf-examples-gke-service-lb.yaml -l tests/pipelines/values.yaml - -fly -t tf expose-pipeline -p tf-module-releases -fly -t tf expose-pipeline -p tf-examples-gke-k8s-helm -fly -t tf expose-pipeline -p tf-examples-gke-multi-region -fly -t tf expose-pipeline -p tf-examples-gke-service-lb diff --git a/terraform-google-examples-master/tests/trigger_jobs.sh b/terraform-google-examples-master/tests/trigger_jobs.sh deleted file mode 100644 index 797c227..0000000 --- a/terraform-google-examples-master/tests/trigger_jobs.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash -set -e -PIPELINE="tf-examples-regression" -JOBS="run-example-gke-k8s-helm run-example-gke-k8s-service-lb run-example-gke-k8s-multi-region" -for j in $JOBS; do - fly -t solutions trigger-job -j ${PIPELINE}/${j} -done From d04c76e0b0d88bbdc634484e87b69f045014b0dd Mon Sep 17 00:00:00 2001 From: CxSean Date: Thu, 5 May 2022 06:21:30 +0000 Subject: [PATCH 08/12] Update README.md adding an Asterix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 957c3a1..33e6e95 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ This is a "Vulnerable" Web Application developed by Cyber Security and Privacy Foundation(www.cysecurity.org). This app is intended for the Java Programmers and other people who wish to learn about Web application vulnerabilities and write secure code.123 -**The full course content is now available on Github for free:** +***The full course content is now available on Github for free:*** https://github.com/CSPF-Founder/JavaSecurityCourse From 8a522fb958695c9bad6815b632369e9001d97c18 Mon Sep 17 00:00:00 2001 From: CxSean Date: Thu, 5 May 2022 21:04:27 +0000 Subject: [PATCH 09/12] Update README.md update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 33e6e95..a8a1589 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ This is a "Vulnerable" Web Application developed by Cyber Security and Privacy F https://github.com/CSPF-Founder/JavaSecurityCourse **Test -**The full course on Hacking and Securing Web Java Programs is available in** +***The full course on Hacking and Securing Web Java Programs is available in*** https://www.udemy.com/hacking-securing-java-web-programming/ From 5954614ab454b969d8cf87869819f12fcac3fae4 Mon Sep 17 00:00:00 2001 From: CxSean Date: Tue, 5 Jul 2022 00:48:24 -0400 Subject: [PATCH 10/12] Update cx.yml --- .github/workflows/cx.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/cx.yml b/.github/workflows/cx.yml index 96b637b..4695513 100644 --- a/.github/workflows/cx.yml +++ b/.github/workflows/cx.yml @@ -28,7 +28,13 @@ jobs: # The type of runner that the job will run on - Ubuntu is required as Docker is leveraged for the action runs-on: ubuntu-latest steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax + architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - run: python my_script.py - uses: actions/checkout@v2 - name: Checkmarx CxFlow Action uses: checkmarx-ts/checkmarx-cxflow-github-action@v1.1 From 02f2449c28ce8167c2faa526455639255ca3c1d4 Mon Sep 17 00:00:00 2001 From: CxSean Date: Tue, 5 Jul 2022 00:49:26 -0400 Subject: [PATCH 11/12] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a8a1589..813f541 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![](https://github.com/CheckmarxDev/NodeGoat-test/workflows/cx/badge.svg) -This is a "Vulnerable" Web Application developed by Cyber Security and Privacy Foundation(www.cysecurity.org). This app is intended for the Java Programmers and other people who wish to learn about Web application vulnerabilities and write secure code.123 +This is a "Vulnerable" Web Application developed by Cyber Security and Privacy Foundation(www.cysecurity.org). This app is intended for the Java Programmers and other people who wish to learn about Web application vulnerabilities and write secure code.123 test ***The full course content is now available on Github for free:*** From 94c19fd2588b5699a1b2501dfec644a3cc906a08 Mon Sep 17 00:00:00 2001 From: CxSean Date: Tue, 5 Jul 2022 00:50:29 -0400 Subject: [PATCH 12/12] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 813f541..a8a1589 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![](https://github.com/CheckmarxDev/NodeGoat-test/workflows/cx/badge.svg) -This is a "Vulnerable" Web Application developed by Cyber Security and Privacy Foundation(www.cysecurity.org). This app is intended for the Java Programmers and other people who wish to learn about Web application vulnerabilities and write secure code.123 test +This is a "Vulnerable" Web Application developed by Cyber Security and Privacy Foundation(www.cysecurity.org). This app is intended for the Java Programmers and other people who wish to learn about Web application vulnerabilities and write secure code.123 ***The full course content is now available on Github for free:***