From 9e83baffb37b1f3b3546e5bb895113d951c942bc Mon Sep 17 00:00:00 2001 From: Paul-Henri Froidmont Date: Sat, 15 Sep 2018 01:18:57 +0200 Subject: [PATCH] Provision with Teraform instead of Ansible --- .gitignore | 1 + group_vars/all/vars | 1 - inventories/staging/group_vars/all | 4 -- k8s.yml | 5 -- roles/scaleway-provision/tasks/main.yml | 50 ----------------- terraform/.gitignore | 3 + terraform/README.md | 34 ++++++++++++ terraform/sl.tf | 74 +++++++++++++++++++++++++ terraform/variables.tf | 35 ++++++++++++ 9 files changed, 147 insertions(+), 60 deletions(-) delete mode 100644 inventories/staging/group_vars/all delete mode 100644 roles/scaleway-provision/tasks/main.yml create mode 100644 terraform/.gitignore create mode 100644 terraform/README.md create mode 100644 terraform/sl.tf create mode 100644 terraform/variables.tf diff --git a/.gitignore b/.gitignore index 8b083da..104a698 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea .vagrant +.virtualenv *.retry diff --git a/group_vars/all/vars b/group_vars/all/vars index 5cdfece..b51cad9 100644 --- a/group_vars/all/vars +++ b/group_vars/all/vars @@ -3,7 +3,6 @@ scw_token: "{{ scw_token_vault }}" scw_authorized_keys: - 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 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_apiserver_secure_port: "6443" diff --git a/inventories/staging/group_vars/all b/inventories/staging/group_vars/all deleted file mode 100644 index 672f842..0000000 --- a/inventories/staging/group_vars/all +++ /dev/null @@ -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 diff --git a/k8s.yml b/k8s.yml index 81e2bd6..07a4264 100644 --- a/k8s.yml +++ b/k8s.yml @@ -1,9 +1,4 @@ --- -- hosts: localhost - gather_facts: no - roles: - - role: scaleway-provision - tags: role-provision - hosts: localhost become: yes gather_facts: no diff --git a/roles/scaleway-provision/tasks/main.yml b/roles/scaleway-provision/tasks/main.yml deleted file mode 100644 index 9cdde38..0000000 --- a/roles/scaleway-provision/tasks/main.yml +++ /dev/null @@ -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'] }}" - diff --git a/terraform/.gitignore b/terraform/.gitignore new file mode 100644 index 0000000..daa7c5c --- /dev/null +++ b/terraform/.gitignore @@ -0,0 +1,3 @@ +.terraform* +terraform.tfstate +terraform.tfstate.backup diff --git a/terraform/README.md b/terraform/README.md new file mode 100644 index 0000000..1bb70d0 --- /dev/null +++ b/terraform/README.md @@ -0,0 +1,34 @@ +Terraform Scaleaway +=================== + +``` +export SCALEWAY_TOKEN= +export SCALEWAY_ORGANIZATION= +# 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 = +``` + diff --git a/terraform/sl.tf b/terraform/sl.tf new file mode 100644 index 0000000..b906b4b --- /dev/null +++ b/terraform/sl.tf @@ -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}"] +} diff --git a/terraform/variables.tf b/terraform/variables.tf new file mode 100644 index 0000000..80596cb --- /dev/null +++ b/terraform/variables.tf @@ -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 +}