Provision with Teraform instead of Ansible

This commit is contained in:
Paul-Henri Froidmont 2018-09-15 01:18:57 +02:00
parent 3f36885343
commit 9e83baffb3
9 changed files with 147 additions and 60 deletions

1
.gitignore vendored
View file

@ -1,3 +1,4 @@
.idea .idea
.vagrant .vagrant
.virtualenv
*.retry *.retry

View file

@ -3,7 +3,6 @@ scw_token: "{{ scw_token_vault }}"
scw_authorized_keys: scw_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRX1scknsDkFvi1DRfNzYKPpyn9x4tiPjqkSlCQnXtmZUmK8ssYAQrM9iSIszT1tr5nQERBAHtUMjSJN8Ofi42LCJWakdYiSQSaSx3kM4TpYx8bKTEX2oxdifOovaGyn7jz8DmTipJLlrxjkQZ0HU8f6lhNPpke/jGioH6lvVtUVVDb1Ny+ygvoJsZHPuU/KSSnFED91sNrSoE8NGa29gPBrDMUZHSZVJW8+c0DWENxKpu7TKx/s64SsT3jX6gx76J/umvS7OfDu1SXg9lX6+1OUQMexjRImmzUy4VFrJAf9iAVvwYI5RlcLR9j2DbNBg0gikLAc+1OeBQcGrwYzid froidmpa@froidmpa-2017-07-31 - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRX1scknsDkFvi1DRfNzYKPpyn9x4tiPjqkSlCQnXtmZUmK8ssYAQrM9iSIszT1tr5nQERBAHtUMjSJN8Ofi42LCJWakdYiSQSaSx3kM4TpYx8bKTEX2oxdifOovaGyn7jz8DmTipJLlrxjkQZ0HU8f6lhNPpke/jGioH6lvVtUVVDb1Ny+ygvoJsZHPuU/KSSnFED91sNrSoE8NGa29gPBrDMUZHSZVJW8+c0DWENxKpu7TKx/s64SsT3jX6gx76J/umvS7OfDu1SXg9lX6+1OUQMexjRImmzUy4VFrJAf9iAVvwYI5RlcLR9j2DbNBg0gikLAc+1OeBQcGrwYzid froidmpa@froidmpa-2017-07-31
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMPhCld0dsDzpdkMvPRdiwd6IX8HF8Mb2V6uQzBl8/syeny8FbZxlZR8gk39RGxNYcLaZ+nA50DS6mOIplXCGdtozfw0Vm+FdITN3apMufWIdobG7Igs1vxKBBbkAb5lwxkEFUCUMzPdCLFHd5zabVH0WE42Be8+hYPLd5W/ikPCOgxRaGwryHHroxRMdkD3PcNE8upSEMdGl51pzgXhO6Fcig8UokOYHxV92SiQ0KEsCbc+oe8e9Gkr7g78tz+6YcTYLY2p2ygR7Vrh/WyTaUVnrNNqL8NIqp+Lc2kVtnqGXHFBJ0Wggaly+AeKWygy+dnOMEGSirhQ6/dUcB/Phz phfroidmont@archdesktop-2017-07-31 - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMPhCld0dsDzpdkMvPRdiwd6IX8HF8Mb2V6uQzBl8/syeny8FbZxlZR8gk39RGxNYcLaZ+nA50DS6mOIplXCGdtozfw0Vm+FdITN3apMufWIdobG7Igs1vxKBBbkAb5lwxkEFUCUMzPdCLFHd5zabVH0WE42Be8+hYPLd5W/ikPCOgxRaGwryHHroxRMdkD3PcNE8upSEMdGl51pzgXhO6Fcig8UokOYHxV92SiQ0KEsCbc+oe8e9Gkr7g78tz+6YcTYLY2p2ygR7Vrh/WyTaUVnrNNqL8NIqp+Lc2kVtnqGXHFBJ0Wggaly+AeKWygy+dnOMEGSirhQ6/dUcB/Phz phfroidmont@archdesktop-2017-07-31
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDJqXLGhN77S73f6hpyWZ7j/coHVPQ9fWWfNnyi2It8uh1mjaNDoO2VtLRaNcWc0novaYjB1ijTSTmpHw9ZUaGApXBdHuOgG+YA7gKtPrA6pxzevI1AAsJDljje0ph6D2GBzj8NvPxYXqrG4huOrREkRRQQC6qa8wNoDQljO6Qzv67OPr/Efgs/TknTSFufthu6FSn5TOejM+us4QEy7+4twSVTMLTAOYmqLzQUj2NfJ0qIGduIovwxYqt5eWdYw4EUtjdYK8BTbFE1ZPGmhTcuqPZUo5EmZcD5/ir+wJZ5ILtu6KiN/MDM5HBUQthTo8jR0cFwt/Nu7vfhcxR/KRZoPuxmg4wStrT1fMCgbmHMP4JDecnOoZZgnmelaABDjWfE2gMUq5Fz5mTx5CQAT5ebtf8NiiwSEyV72q3KTbh4MJVf8y/eWLlH1qcraMLZL/iXXfChx7tNwBO8qoKV6LsbMts3OYqbFVFOd2Df8l7PQ+1AnUK0sAuJYCUdAUFyFjF7P5amHul9Z+iUDcNDMXYme73pOOvF1T8bEHinkU66YtZHFYm9W6HmqB8HgaUgeZVInoZ4fdzxvhsh4wjGIRkhK5i0Pq/AHUXg9uevDxdWPifFlNCG3nR3BKolM4EeL0JrGO++igrXmxuk+T9Xss27bumViM3Fi/q71ft3SlxwUQ== root@ansible-controller-2018-07-22
k8s_release: "1.10.6" k8s_release: "1.10.6"
k8s_apiserver_secure_port: "6443" k8s_apiserver_secure_port: "6443"

View file

@ -1,4 +0,0 @@
k8s_scw_master_nodes_count: 3
k8s_scw_worker_nodes_count: 2
k8s_scw_environment: staging
k8s_scw_environment_short: test

View file

@ -1,9 +1,4 @@
--- ---
- hosts: localhost
gather_facts: no
roles:
- role: scaleway-provision
tags: role-provision
- hosts: localhost - hosts: localhost
become: yes become: yes
gather_facts: no gather_facts: no

View file

@ -1,50 +0,0 @@
---
- name: Adding authorized SSH keys
scaleway_sshkey:
ssh_pub_key: "{{ item }}"
oauth_token: "{{ scw_token }}"
state: present
loop: "{{ scw_authorized_keys|flatten(levels=1) }}"
- name: Provision master nodes
scaleway_compute:
name: k8s-{{ k8s_scw_environment_short }}-master{{ item }}
state: running
image: ca9a9340-92e8-4c5f-8ae1-423466f7ef30
organization: 4dcd777e-6ace-48ad-9f36-0b090880dcdb
oauth_token: "{{ scw_token }}"
region: ams1
commercial_type: VC1S
wait: true
tags:
- group:k8s
- group:k8s_master
- group:k8s_etcd
- fact:index:{{ item }}
- env:{{ k8s_scw_environment }}
loop: "{{ range(1,k8s_scw_master_nodes_count+1)|list }}"
- name: Provision worker nodes
scaleway_compute:
name: k8s-{{ k8s_scw_environment_short }}-worker{{ item }}
state: running
image: ca9a9340-92e8-4c5f-8ae1-423466f7ef30
organization: 4dcd777e-6ace-48ad-9f36-0b090880dcdb
oauth_token: "{{ scw_token }}"
region: ams1
commercial_type: VC1S
wait: true
tags:
- group:k8s
- group:k8s_worker
- fact:index:{{ item }}
- env:{{ k8s_scw_environment }}
loop: "{{ range(1,k8s_scw_worker_nodes_count+1)|list }}"
- name: Refresh inventory
meta: refresh_inventory
- name: Add the instances to known hosts
local_action: command sh -c 'ssh-keyscan -t rsa {{ hostvars[item].ansible_host }} >> $HOME/.ssh/known_hosts'
with_items: "{{ groups['k8s'] }}"

3
terraform/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
.terraform*
terraform.tfstate
terraform.tfstate.backup

34
terraform/README.md Normal file
View file

@ -0,0 +1,34 @@
Terraform Scaleaway
===================
```
export SCALEWAY_TOKEN=<your-access-key>
export SCALEWAY_ORGANIZATION=<your-organization-key>
# terraform init
# terraform plan
# terraform apply
# terraform show
data.scaleway_image.ubuntu:
id =
architecture = x86_64
creation_date = 2017-01-05T10:01:28.406069+00:00
name = Ubuntu Xenial (16.04 latest)
organization =
public = true
scaleway_server.server1:
id =
enable_ipv6 = false
image =
name = server1
private_ip =
public_ip =
state = stopped
state_detail =
tags.# = 0
type = VC1S
volume.# = 1
volume.0.size_in_gb = 50
volume.0.type = l_ssd
volume.0.volume_id =
```

74
terraform/sl.tf Normal file
View file

@ -0,0 +1,74 @@
provider "scaleway" {
region = "${var.region}"
}
data "scaleway_image" "ubuntu" {
architecture = "${var.architecture}"
name = "${var.image}"
}
//resource "scaleway_ip" "public_ip" {
// count = 1
//}
resource "scaleway_server" "worker" {
count = "${var.worker_instance_count}"
name = "worker${count.index+1}"
image = "${data.scaleway_image.ubuntu.id}"
type = "${var.worker_instance_type}"
state = "running"
tags = ["k8s","k8s_workers"]
// volume {
// size_in_gb = 50
// type = "l_ssd"
// }
}
resource "scaleway_server" "master" {
count = "${var.master_instance_count}"
name = "master${count.index+1}"
image = "${data.scaleway_image.ubuntu.id}"
type = "${var.master_instance_type}"
state = "running"
tags = ["k8s","k8s_masters"]
}
resource "scaleway_server" "proxy1" {
count = 1
name = "proxy1"
image = "${data.scaleway_image.ubuntu.id}"
type = "${var.proxy_instance_type}"
public_ip = "51.158.77.6"
state = "running"
tags = ["k8s","k8s_proxy","primary"]
}
resource "scaleway_server" "proxy2" {
count = 1
name = "proxy2"
image = "${data.scaleway_image.ubuntu.id}"
type = "${var.proxy_instance_type}"
state = "running"
tags = ["k8s","k8s_proxy","secondary"]
}
output "worker_private_ips" {
value = ["${scaleway_server.worker.*.private_ip}"]
}
output "master_private_ips" {
value = ["${scaleway_server.master.*.private_ip}"]
}
output "proxy0_private_ips" {
value = ["${scaleway_server.proxy1.*.private_ip}"]
}
output "proxy1_private_ips" {
value = ["${scaleway_server.proxy2.*.private_ip}"]
}
output "public_ip" {
value = ["${scaleway_server.proxy1.*.public_ip}"]
}

35
terraform/variables.tf Normal file
View file

@ -0,0 +1,35 @@
variable "region" {
default = "par1"
}
variable "architecture" {
default = "x86_64"
}
variable "image" {
default = "Ubuntu Bionic"
}
variable "master_instance_type" {
default = "START1-S"
}
variable "master_instance_count" {
default = 3
}
variable "proxy_instance_type" {
default = "START1-S"
}
variable "worker_instance_type" {
default = "START1-S"
}
variable "worker_volume_size" {
default = 100
}
variable "worker_instance_count" {
default = 3
}