mirror of
https://github.com/Dannecron/netology-devops-gw-infra.git
synced 2025-12-25 15:22:36 +03:00
[stage-1] complete pre-configuration and terraform init
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/.idea
|
||||
10
ansible/terraform_init/group_vars/all/secret.yml
Normal file
10
ansible/terraform_init/group_vars/all/secret.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
$ANSIBLE_VAULT;1.1;AES256
|
||||
36343935353830376566656233623732376238336436613039613730313430353134376265623562
|
||||
3364636162316638643764643437323062366238353339340a646137316433336665613739366263
|
||||
34643031356235343332316364613138386661653436336137633765383934343439343763626465
|
||||
3861613165663234640a633030323235333532323166646266633561626433306637613631623637
|
||||
32656636656436346230623234633566386334646637643234366666643563633966633536353032
|
||||
38663430646138343034376162656532363365363163373130356431623735616564636561306536
|
||||
61636539343864313665356565313263616632333834326365303061653834326362333135323235
|
||||
34353239363639613332316638353137626362323530363039313332613530343935636366373161
|
||||
65396635613566656366363263373635633465366438383836346233333135373831
|
||||
3
ansible/terraform_init/group_vars/all/vars.yml
Normal file
3
ansible/terraform_init/group_vars/all/vars.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
---
|
||||
terraform_service_account: terraform-acc
|
||||
terraform_yandex_bucket_name: dnc-netology-tf-state
|
||||
2
ansible/terraform_init/inventory
Normal file
2
ansible/terraform_init/inventory
Normal file
@@ -0,0 +1,2 @@
|
||||
[server]
|
||||
localhost ansible_connection=local
|
||||
@@ -1 +1,3 @@
|
||||
# netology-devops-gw-infra
|
||||
## Дипломная работа
|
||||
|
||||
Репозиторий содержит конфигурацию terraform для поднятия инфраструктуры для выполнения [дипломной работы](https://github.com/Dannecron/netology-devops/blob/main/src/graduate_work/readme.md).
|
||||
|
||||
15
templates/variables.tf.j2
Normal file
15
templates/variables.tf.j2
Normal file
@@ -0,0 +1,15 @@
|
||||
variable "yandex_cloud_id" {
|
||||
default = "{{ terraform_yandex_cloud_id }}"
|
||||
}
|
||||
|
||||
variable "yandex_folder_id" {
|
||||
default = "{{ terraform_yandex_folder_id }}"
|
||||
}
|
||||
|
||||
variable "yandex_cloud_token" {
|
||||
default = "{{ terraform_yandex_cloud_token }}"
|
||||
}
|
||||
|
||||
variable "yandex_bucket_name" {
|
||||
default = "{{ terraform_yandex_bucket_name }}"
|
||||
}
|
||||
38
terraform/.gitignore
vendored
Normal file
38
terraform/.gitignore
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
# Local .terraform directories
|
||||
**/.terraform/*
|
||||
|
||||
# .tfstate files
|
||||
*.tfstate
|
||||
*.tfstate.*
|
||||
|
||||
# Crash log files
|
||||
crash.log
|
||||
crash.*.log
|
||||
|
||||
# Exclude all .tfvars files, which are likely to contain sentitive data, such as
|
||||
# password, private keys, and other secrets. These should not be part of version
|
||||
# control as they are data points which are potentially sensitive and subject
|
||||
# to change depending on the environment.
|
||||
#
|
||||
*.tfvars
|
||||
|
||||
# Ignore override files as they are usually used to override resources locally and so
|
||||
# are not checked in
|
||||
override.tf
|
||||
override.tf.json
|
||||
*_override.tf
|
||||
*_override.tf.json
|
||||
|
||||
# Include override files you do wish to add to version control using negated pattern
|
||||
#
|
||||
# !example_override.tf
|
||||
|
||||
# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
|
||||
# example: *tfplan*
|
||||
|
||||
# Ignore CLI configuration files
|
||||
.terraformrc
|
||||
terraform.rc
|
||||
.terraform.lock.hcl
|
||||
|
||||
variables.tf
|
||||
28
terraform/provider.tf
Normal file
28
terraform/provider.tf
Normal file
@@ -0,0 +1,28 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
yandex = {
|
||||
source = "yandex-cloud/yandex"
|
||||
}
|
||||
}
|
||||
required_version = ">= 0.13"
|
||||
|
||||
|
||||
backend "s3" {
|
||||
endpoint = "storage.yandexcloud.net"
|
||||
bucket = "bucket"
|
||||
region = "ru-central1"
|
||||
key = "tf/state.tfstate"
|
||||
access_key = "access_key"
|
||||
secret_key = "secret_key"
|
||||
|
||||
skip_region_validation = true
|
||||
skip_credentials_validation = true
|
||||
}
|
||||
}
|
||||
|
||||
provider "yandex" {
|
||||
token = var.yandex_cloud_token
|
||||
cloud_id = var.yandex_cloud_id
|
||||
folder_id = var.yandex_folder_id
|
||||
zone = "ru-central1-a"
|
||||
}
|
||||
61
terraform_init.yml
Normal file
61
terraform_init.yml
Normal file
@@ -0,0 +1,61 @@
|
||||
---
|
||||
- name: Initialize terraform configuration
|
||||
hosts: all
|
||||
gather_facts: false
|
||||
tasks:
|
||||
- name: YC - receive user access token
|
||||
ansible.builtin.command:
|
||||
cmd: yc iam create-token
|
||||
register: create_token_result
|
||||
- name: YC - get token from result
|
||||
set_fact:
|
||||
terraform_yandex_cloud_token={{ create_token_result.stdout }}
|
||||
- name: YC - create service account
|
||||
ansible.builtin.command:
|
||||
cmd: yc iam service-account create --name={{ terraform_service_account }} --format=json
|
||||
register: service_account_create_result
|
||||
failed_when:
|
||||
- service_account_create_result.rc != 0
|
||||
- "'AlreadyExists' not in service_account_create_result.stderr"
|
||||
- name: YC - assign role to service account
|
||||
ansible.builtin.command:
|
||||
cmd: >-
|
||||
yc resource-manager folder add-access-binding --name=default --role=editor
|
||||
--subject=serviceAccount:{{ service_account_create_result.stdout|from_json|json_query('id') }}
|
||||
when: service_account_create_result.rc == 0
|
||||
|
||||
- name: YC - receive service account yc access key
|
||||
ansible.builtin.command:
|
||||
cmd: yc iam access-key create --service-account-name={{ terraform_service_account }} --format=json
|
||||
register: service_account_access_key_result
|
||||
- name: YC - get key id and secret from result
|
||||
set_fact:
|
||||
service_account_key_id={{ service_account_access_key_result.stdout|from_json|json_query('access_key.key_id') }}
|
||||
service_account_secret={{ service_account_access_key_result.stdout|from_json|json_query('secret') }}
|
||||
- name: YC - create bucket
|
||||
ansible.builtin.command:
|
||||
cmd: yc storage bucket create --name={{ terraform_yandex_bucket_name }}
|
||||
register: bucket_create_result
|
||||
failed_when:
|
||||
- bucket_create_result.rc != 0
|
||||
- "'AlreadyExists' not in bucket_create_result.stderr"
|
||||
- name: Terraform - Create variables.tf
|
||||
ansible.builtin.template:
|
||||
src: "templates/variables.tf.j2"
|
||||
dest: "terraform/variables.tf"
|
||||
- name: Terraform - init
|
||||
ansible.builtin.command:
|
||||
chdir: ./terraform
|
||||
cmd: >-
|
||||
terraform init
|
||||
-backend-config="bucket={{ terraform_yandex_bucket_name }}"
|
||||
-backend-config="access_key={{ service_account_key_id }}"
|
||||
-backend-config="secret_key={{ service_account_secret }}"
|
||||
- name: Terraform - create workspace
|
||||
ansible.builtin.command:
|
||||
chdir: ./terraform
|
||||
cmd: terraform workspace new prod
|
||||
register: terraform_new_workspace_result
|
||||
failed_when:
|
||||
- terraform_new_workspace_result.rc != 0
|
||||
- "'already exists' not in terraform_new_workspace_result.stderr"
|
||||
Reference in New Issue
Block a user