From: Frank Brehm Date: Fri, 3 Jan 2020 14:41:08 +0000 (+0100) Subject: Beginn Überarbeitung README.md X-Git-Tag: 1.4.6~2^2~11 X-Git-Url: https://git.uhu-banane.de/?a=commitdiff_plain;h=d1cf1573cec64f081624a0988cca2db11eada5b8;p=pixelpark%2Fcreate-terraform.git Beginn Überarbeitung README.md --- diff --git a/README.md b/README.md index a3d3fc1..5df6179 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Das verwendete Python-Script verwendet **Terraform** und **Python3** für die Provisionierung. -Weiterhin empfehle ich auch grundsätzlich die Verwendung von _Python virtualenv_ zur Ausführung, +Weiterhin empfehle ich auch dringend die Verwendung von _Python virtualenv_ zur Ausführung, da damit relativ einfach zusätzlich weiter Python-Module installiert und isoliert von anderen Benutzern und Prozessen ausgeführt werden können. @@ -20,132 +20,181 @@ wird. Diese wird zwar nur für den aktuellen Nutzer lesbar angelegt und auch fü aber wenn andere Nutzer mit Root-Rechten auf der Kiste angemeldet sind, können sie diese trotzdem lesen. Das Gleiche trifft für die allgemeine Konfigurationsdatei zu, wenn man diese anlegt (siehe Punkt 1.4.). -### 1.1. Betriebssystem-Pakete +### 1.1. Auschecken des Repositories -#### 1.1.1. Bei Debian-basierten Distributionen: +Es werden drei Git-Repositories aus dem Pixelpark-Gitlab verwendet. Für die Anwender dieses +Provisionierungstools ist erst einmal nur das Arbeits-Repository wichtig, welches man sich +auf der eigenen Arbeitsstation klont. Die URL lautet: + + git@git.pixelpark.com:ppadmin/terraform.git + +Grundsätzlich arbeiten wir immer in dem Workdir des Arbeits-Repositories. Die beiden anderen +Repositories werden bei der Aktualisierung der Python-Virtuellen-Umgebung automatisch mit +ausgecheckt (Siehe Punkt **1.4.**). + +**Hinweis:** Engedenk schlechter Erfahrungen weise ich darauf hin, auf einer Arbeitsstation +zu arbeiten, mit der alle Netze erreicht werden können, da die Postinstall-Skripte per SCP +auf die neu provisionierten Maschinen kopiert und dort per SSH ausgeführt werden. + +### 1.2. Betriebssystem-Pakete + +#### 1.2.1. Bei Debian-basierten Distributionen: also zum Beispiel _Debian_, _Ubuntu_ usw. * python3 * python3-virtualenv -#### 1.1.2. Bei RPM-basierten Distributionen: +#### 1.2.2. Bei RPM-basierten Distributionen: also CentOS, Fedora, RHEL, OEL, SuSE usw. * python36 * python-virtualenv (ist zwar für Python 2.7, dient aber als Wrapper für virtualenv mit Python 3.6) -### 1.2. Installation Terraform +### 1.3. Installation Terraform Leider gibt es keine Terraform-Pakete. Man ist daher darauf angewiesen, sich das Terrform-ZIP-Paket von folgender URL zu holen: https://www.terraform.io/downloads.html Dort das ZIP-File für Linux 64 Bit downloaden, entpacken, und die herauspurzelnde Datei ausführbar machen und irgendwo in den Pfad legen. -### 1.3. Installion einer virtuellen Umgebung +**Hinweis:** Da im Backend von Terraform die Versionsnummer von Terraform, mit dem der Plan +aufgestellt wurde, hinterlassen wird, diese Backend geteilt ist (via Consul), und die Pläne nicht +abwärtskompatibel sind, sollte Terraform immer auf dem aktuellen Stand gehalten werde, + +### 1.4. Installion einer virtuellen Umgebung -Nach dem Auschecken dieses Repos sollte eine virtuelle Umgebung für Python3 eingerichtet werden. +#### 1.4.1. Initiale Installation der virtuellen Umgebung + +Nach dem Auschecken dieses Repos muss eine virtuelle Umgebung für Python3 eingerichtet werden. Um die Arbeit zu vereinfachen, habe ich im Wurzelverzeichnis das Skript **update-env.sh** hingelegt, das alle notwendigen Schritte unternimmt, um die Arbeitsumgebung einzurichten bzw. zu aktualisieren. Das sind folgende Dinge: * Einrichten des Virtual Environments in `venv`, falls es noch nicht geschehen sein sollte, -* Installieren und aktualisieren aller benötigten PIP-Module, -* Aktualisieren des Git-Submodules unter **python_fb_tools**, -* Kompilieren der i18n-Dateien (für die Herren, die des Englischen nicht ganz so mächtig sind). +* Installieren und aktualisieren aller benötigten PIP-Module, einschließlich der + **python_fb_tools** (aus Gitlab heraus onstalliert), +* Kompilieren der i18n-Dateien (für die Damen und Herren, die des Englischen nicht ganz so mächtig sind). Das sieht beim ersten Mal so aus: ``` -frank.brehm@ns1-local ~/Develop/provisioning (test) > ./update-env.sh -Preparing virtual environment ... +frank.brehm@ns1-local ~/Work/terraform (test) > ./update-env.sh + * Searching for valid Python … -Found python3.6. + * Found 'python3.6'. + * Searching for valid virtualenv … + * Found 'virtualenv'. -Running virtualenv with interpreter /usr/bin/python3.6 -Using base prefix '/usr' -New python executable in /home/frank.brehm/Develop/provisioning/venv/bin/python3.6 -Also creating executable in /home/frank.brehm/Develop/provisioning/venv/bin/python -Installing setuptools, pip, wheel...done. --------------------------------------------------- -Installing and/or upgrading necessary modules ... + * Preparing virtual environment … -Cache entry deserialization failed, entry ignored -Collecting pip (from -r requirements.txt (line 1)) - Using cached https://files.pythonhosted.org/packages/46/dc/7fd5df840efb3e56c8b4f768793a237ec4ee59891959d6a215d63f727023/pip-19.0.1-py2.py3-none-any.whl - -. -. -. - -Installing collected packages: pip, setuptools, pycparser, cffi, six, asn1crypto, cryptography, PyYAML, MarkupSafe, jinja2, pynacl, pyasn1, bcrypt, paramiko, ansible, pytz, babel, chardet, idna, certifi, urllib3, requests, pyvmomi, dnspython, pyflakes, pycodestyle, mccabe, entrypoints, flake8, websocket-client, docker-pycreds, docker-py, pathlib - Found existing installation: pip 9.0.1 - Uninstalling pip-9.0.1: - Successfully uninstalled pip-9.0.1 - Found existing installation: setuptools 28.8.0 - Uninstalling setuptools-28.8.0: - Successfully uninstalled setuptools-28.8.0 -Successfully installed MarkupSafe-1.1.0 PyYAML-3.13 ansible-2.7.6 asn1crypto-0.24.0 babel-2.6.0 bcrypt-3.1.6 certifi-2018.11.29 cffi-1.11.5 chardet-3.0.4 cryptography-2.5 dnspython-1.16.0 docker-py-1.10.6 docker-pycreds-0.4.0 entrypoints-0.3 flake8-3.7.3 idna-2.8 jinja2-2.10 mccabe-0.6.1 paramiko-2.4.2 pathlib-1.0.1 pip-19.0.1 pyasn1-0.4.5 pycodestyle-2.5.0 pycparser-2.19 pyflakes-2.1.0 pynacl-1.3.0 pytz-2018.9 pyvmomi-6.7.1.2018.12 requests-2.21.0 setuptools-40.7.1 six-1.12.0 urllib3-1.24.1 websocket-client-0.54.0 +Running virtualenv with interpreter /usr/bin/python3.6 +Using base prefix '/usr' +New python executable in /home/fbrehm/Work/terraform/venv/bin/python3.6 +Also creating executable in /home/fbrehm/Work/terraform/venv/bin/python +Installing setuptools, pkg_resources, pip, wheel...done. --------------------------------------------------- -Installed modules: + * Upgrading PIP … -Package Version ----------------- ------------- -ansible 2.7.6 -asn1crypto 0.24.0 -Babel 2.6.0 -. -. -. -wheel 0.29.0 +Requirement already up-to-date: pip in ./venv/lib/python3.6/site-packages (19.3.1) --------------------------------------------------- -Updating Git submodule python_fb_tools ... -git init ... - + * Upgrading setuptools + wheel + six … --------------- -git update ... +Requirement already up-to-date: setuptools in ./venv/lib/python3.6/site-packages (44.0.0) +Requirement already up-to-date: wheel in ./venv/lib/python3.6/site-packages (0.33.6) +Collecting six + Using cached https://files.pythonhosted.org/packages/65/26/32b8464df2a97e6dd1b656ed26b2c194606c16fe163c695a992b36c11cdf/six-1.13.0-py2.py3-none-any.whl +Installing collected packages: six +Successfully installed six-1.13.0 +--------------------------------------------------- + * Installing and/or upgrading necessary modules … + +Collecting git+https://git.pixelpark.com/python/python_fb_tools.git@master (from -r requirements.txt (line 1)) + Cloning https://git.pixelpark.com/python/python_fb_tools.git (to revision master) to /tmp/pip-req-build-e3j7xdeq + Running command git clone -q https://git.pixelpark.com/python/python_fb_tools.git /tmp/pip-req-build-e3j7xdeq +Collecting git+ssh://****@git.pixelpark.com/ppadmin/create-terraform.git@master (from -r requirements.txt (line 2)) + Cloning ssh://****@git.pixelpark.com/ppadmin/create-terraform.git (to revision master) to /tmp/pip-req-build-ae6iyodq + Running command git clone -q 'ssh://****@git.pixelpark.com/ppadmin/create-terraform.git' /tmp/pip-req-build-ae6iyodq +Collecting requests + Using cached https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl +Collecting Babel + Using cached https://files.pythonhosted.org/packages/15/a1/522dccd23e5d2e47aed4b6a16795b8213e3272c7506e625f2425ad025a19/Babel-2.8.0-py2.py3-none-any.whl +Processing /home/fbrehm/.cache/pip/wheels/54/b7/c7/2ada654ee54483c9329871665aaf4a6056c3ce36f29cf66e67/PyYAML-5.2-cp36-cp36m-linux_x86_64.whl +Processing /home/fbrehm/.cache/pip/wheels/79/04/32/49efab8d7c4728408253a358c51b7eeaed8778b9c529422715/pyvmomi-6.7.3-py2.py3-none-any.whl +Requirement already up-to-date: six in ./venv/lib/python3.6/site-packages (from create-terraform==1.4.5->-r requirements.txt (line 2)) (1.13.0) +Collecting pytz + Using cached https://files.pythonhosted.org/packages/e7/f9/f0b53f88060247251bf481fa6ea62cd0d25bf1b11a87888e53ce5b7c8ad2/pytz-2019.3-py2.py3-none-any.whl +Collecting dnspython + Using cached https://files.pythonhosted.org/packages/ec/d3/3aa0e7213ef72b8585747aa0e271a9523e713813b9a20177ebe1e939deb0/dnspython-1.16.0-py2.py3-none-any.whl +Collecting certifi>=2017.4.17 + Using cached https://files.pythonhosted.org/packages/b9/63/df50cac98ea0d5b006c55a399c3bf1db9da7b5a24de7890bc9cfd5dd9e99/certifi-2019.11.28-py2.py3-none-any.whl +Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 + Using cached https://files.pythonhosted.org/packages/b4/40/a9837291310ee1ccc242ceb6ebfd9eb21539649f193a7c8c86ba15b98539/urllib3-1.25.7-py2.py3-none-any.whl +Collecting idna<2.9,>=2.5 + Using cached https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl +Collecting chardet<3.1.0,>=3.0.2 + Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl +Building wheels for collected packages: fb-tools, create-terraform + Building wheel for fb-tools (setup.py) ... done + Created wheel for fb-tools: filename=fb_tools-1.6.3-cp36-none-any.whl size=176047 sha256=f4ed06120c58121e97adce0a9965d2cb1cc8680a817577040397517c6c72673c + Stored in directory: /tmp/pip-ephem-wheel-cache-okkvs3lr/wheels/f8/76/fc/061af9e9c357147e9edcac185c3edb280f5366ddba4ce6ed5a + Building wheel for create-terraform (setup.py) ... done + Created wheel for create-terraform: filename=create_terraform-1.4.5-cp36-none-any.whl size=91977 sha256=1115a8cc682af20ce272191375b966fb88fd0a21bbe87551996393d4e7df17a0 + Stored in directory: /tmp/pip-ephem-wheel-cache-okkvs3lr/wheels/d2/18/30/66c65b0882f4db9e8f159f049e7086a17e7a56bd3ea0c32cbb +Successfully built fb-tools create-terraform +Installing collected packages: certifi, urllib3, idna, chardet, requests, pytz, Babel, fb-tools, PyYAML, pyvmomi, dnspython, create-terraform +Successfully installed Babel-2.8.0 PyYAML-5.2 certifi-2019.11.28 chardet-3.0.4 create-terraform-1.4.5 dnspython-1.16.0 fb-tools-1.6.3 idna-2.8 pytz-2019.3 pyvmomi-6.7.3 requests-2.22.0 urllib3-1.25.7 --------------- -Updating i18n files in /home/frank.brehm/Develop/provisioning ... - -340 of 340 messages (100%) translated in locale/de_DE/LC_MESSAGES/pp_provisioning.po -compiling catalog locale/de_DE/LC_MESSAGES/pp_provisioning.po to locale/de_DE/LC_MESSAGES/pp_provisioning.mo -12 of 340 messages (3%) translated in locale/en_US/LC_MESSAGES/pp_provisioning.po -compiling catalog locale/en_US/LC_MESSAGES/pp_provisioning.po to locale/en_US/LC_MESSAGES/pp_provisioning.mo - --------------- -Updating i18n files in python_fb_tools ... - -253 of 253 messages (100%) translated in locale/de_DE/LC_MESSAGES/fb_tools.po -compiling catalog locale/de_DE/LC_MESSAGES/fb_tools.po to locale/de_DE/LC_MESSAGES/fb_tools.mo -4 of 253 messages (1%) translated in locale/en_US/LC_MESSAGES/fb_tools.po -compiling catalog locale/en_US/LC_MESSAGES/fb_tools.po to locale/en_US/LC_MESSAGES/fb_tools.mo +--------------------------------------------------- + * Installed modules: + +Package Version +---------------- ---------- +Babel 2.8.0 +certifi 2019.11.28 +chardet 3.0.4 +create-terraform 1.4.5 +dnspython 1.16.0 +fb-tools 1.6.3 +idna 2.8 +pip 19.3.1 +pkg-resources 0.0.0 +pytz 2019.3 +pyvmomi 6.7.3 +PyYAML 5.2 +requests 2.22.0 +setuptools 44.0.0 +six 1.13.0 +urllib3 1.25.7 +wheel 0.33.6 -------- -Fertig. +--------------------------------------------------- + * Fertig. -frank.brehm@ns1-local ~/Develop/provisioning (test) > +frank.brehm@ns1-local ~/Work/terraform (test) > ``` +#### 1.4.2. Update der virtuellen Umgebung + Der nächste Schrit ist grundsätzlich vor jeder Arbeitssitzung zu machen, um die virtuelle Umgebung zu aktivieren: ``` -frank.brehm@ns1-local ~/Develop/provisioning (test) > . venv/bin/activate -(venv) frank.brehm@ns1-local ~/Develop/provisioning (test) > +frank.brehm@ns1-local ~/Work/terraform (test) > . venv/bin/activate +frank.brehm@ns1-local ~/Work/terraform (test) > ``` Mindestens einmal nach der Einrichtung der virtuellen Umgebung, aber auch später regelmäßig sollte danach die Umgebung mittels **update-env.sh** aktualisiert werden: ``` -(venv) frank.brehm@ns1-local ~/Develop/provisioning (test) > ./update-env.sh +frank.brehm@ns1-local ~/Work/terraform (test) > ./update-env.sh Preparing virtual environment ... --------------------------------------------------- @@ -155,53 +204,72 @@ Requirement already up-to-date: pip in ./venv/lib/python3.6/site-packages (from . . . -(venv) frank.brehm@ns1-local ~/Develop/provisioning (test) > +frank.brehm@ns1-local ~/Work/terraform (test) > ``` -### 1.4. Grundlegende Installation +#### 1.4.3. Aktivieren virtuellen Umgebung + +Vor jeder Arbeit ist die virtualle Umgebung zu aktivieren: + +``` +frank@bruni ~/Develop/PP/terraform (master) > . venv/bin/activate +(venv) frank@bruni ~/Develop/PP/terraform (master) > +(venv) frank@bruni ~/Develop/PP/terraform (master) > which create-terraform +/home/frank/Develop/PP/terraform/venv/bin/create-terraform +(venv) frank@bruni ~/Develop/PP/terraform (master) > +``` -Nach dem Clonen befindet sich im Arbeitzsverzeichnis unter _etc_ die Datei _'create-terraform.ini.default'_, welches -nicht die allgemeine Konfigurationsdatei ist, sondern nur ein Muster dafür. Zwar ist das Anlegen der allgemeinen -Konfigurationsdatei _'create-terraform.ini'_ unter _etc_ nicht unbedingt erforderlich, da für fast alle Konfigurations-Parameter -sinnvolle Vorgabewerte definiert wurden, aber es gibt exakt drei Ausnahmen dazu, nämlich: +Wie oben ersichtlich, befindet sich Befehl **create-terraform** nach der Aktivierung im +Pfad für ausführbare Dateien. +### 1.5. Grundlegende Konfiguration + +Nach dem Clonen und dem Update der Virtuellen Umgebung befindet sich im Arbeitzsverzeichnis unter _venv/etc_ +die Datei _'create-terraform.ini.default'_, welches nicht die allgemeine Konfigurationsdatei ist, +sondern nur ein Muster dafür. + +Die eigentliche Konfigurationsdatei ist _'venv/etc/create-terraform.ini'_, welche nicht in Git +eingecheckt ist, da sich darin Passwörter und API-Keys befinden müssen. + +Um diese Konfigurationsdatei initial zu erstellen, ist es am einfachsten, die Datei _'venv/etc/create-terraform.ini.default'_ +nach _'venv/etc/create-terraform.ini'_ zu kopieren und dort alle fehlenden Werte manuell nachzutragen. + +``` +venv) frank@bruni ~/Develop/PP/terraform (master) > ll venv/etc/ +insgesamt 4 +-rw-r--r-- 1 frank users 3291 Jan 3 15:13 create-terraform.ini.default +(venv) frank@bruni ~/Develop/PP/terraform (master) > +(venv) frank@bruni ~/Develop/PP/terraform (master) > +(venv) frank@bruni ~/Develop/PP/terraform (master) > cp -vi venv/etc/create-terraform.ini.default venv/etc/create-terraform.ini +'venv/etc/create-terraform.ini.default' -> 'venv/etc/create-terraform.ini' +(venv) frank@bruni ~/Develop/PP/terraform (master) > +(venv) frank@bruni ~/Develop/PP/terraform (master) > chmod 0600 venv/etc/create-terraform.ini +(venv) frank@bruni ~/Develop/PP/terraform (master) > +(venv) frank@bruni ~/Develop/PP/terraform (master) > vi venv/etc/create-terraform.ini +(venv) frank@bruni ~/Develop/PP/terraform (master) > +``` + +Für fast alle Konfigurations-Parameter sind bereits sinnvolle Vorgabewerte definiert worden (welches auch die +auskommentierten Einträge in der _create-terraform.ini.default_ sind). Aber es gibt Ausnahmen: + +* die Passwörter der Nutzer der verschiedenen VSPhere-Umgebungen. Als Vorgabe-Nutzername ist + _'Administrator@vsphere.local'_ vorkonfiguriert. Wenn man diesen verwenden möchte, muss also + dessen Passwort bei allen VSPhere-Umgebungen eingetragen werden. Falls man aus Paranoia-Gründen + einen anderen Nutzer nehmen möchte, dann halt dessen Namen und Passwort in allen Umgebungen eintragen. + Aufpassen - nicht jeder hat alle Rechte in VSPhere, um VMs zu provisionieren. * das Passwort für den VSphere Nutzer (welcher übrigens per Default auf _'Administrator@vsphere.local'_ gesetzt ist), * den Key für die globale PowerDNS-API und * das root-Passwort für die installierten Kisten (wird derzeit nicht verwendet, ist aber für später vorgesehen). -Wenn man die nachfolgend beschriebene Einrichung der _'etc/create-terraform.ini'_ nicht macht, wird man -bei jeder Ausführung des Scripts nach dem Passwort des VSphere-Nutzers _'Administrator@vsphere.local'_ -und nach dem API-Key für PowerDNS gefragt. Da es _dringend empfohlen_ ist, sich mit einem personalisierten -Account bei VSphere anzumelden (und die dauernden Fragen nach Passwort und Key natürlich nerven), hier -kurz, wie man die _'etc/create-terraform.ini'_ einrichtet: - -``` -(venv) frank.brehm@ns1-local ~/Develop/provisioning (test) > cp -vi etc/create-terraform.ini.default etc/create-terraform.ini -„etc/create-terraform.ini.default“ -> „etc/create-terraform.ini“ -(venv) frank.brehm@ns1-local ~/Develop/provisioning (test) > -(venv) frank.brehm@ns1-local ~/Develop/provisioning (test) > chmod 0600 etc/create-terraform.ini -(venv) frank.brehm@ns1-local ~/Develop/provisioning (test) > -(venv) frank.brehm@ns1-local ~/Develop/provisioning (test) > ls -lA etc/ -insgesamt 8 --rw------- 1 frank.brehm pixel 1475 22. Jun 10:36 create-terraform.ini --rw-r--r-- 1 frank.brehm pixel 1354 21. Jun 17:51 create-terraform.ini.default -(venv) frank.brehm@ns1-local ~/Develop/provisioning (test) > -(venv) frank.brehm@ns1-local ~/Develop/provisioning (test) > vi etc/create-terraform.ini -(venv) frank.brehm@ns1-local ~/Develop/provisioning (test) > -(venv) frank.brehm@ns1-local ~/Develop/provisioning (test) > cat etc/create-terraform.ini | egrep -v '^[ ]*(;|#|$)' -[global] -puppet_master = puppetmaster02.pixelpark.com -[vSphere] -user = frank.brehm -password = -[PowerDNS] -api_key = -[Terraform] - -*Hinweis*: Den API-Key für die globale PowerDNS-Instanz findet man hier: https://intra.pixelpark.com/confluence/display/its/DNS+Server+-+Betriebsdokumentation+-+Maschinen+und+Software#DNSServer-Betriebsdokumentation-MaschinenundSoftware-Zugangsdaten - Service _'PowerDNS-API global'_. - -Die weiteren Angaben sind in der Datei _'etc/create-terraform.ini.default'_ beschrieben und brauchen nicht -unbedingt überschrieben werden, ausser, man will zum Beispiel den Test-VSphere-Cluster nehmen. +**Hinweise:** +* Das Passwort des VSphere-Administrators findet man hier: https://intra.powerofone.de/confluence/x/IpKCAg, + im Abschnitt Live Umgebung - vCenter Single Sign On-Dienst +* Den API-Key für die globale PowerDNS-Instanz findet man hier: https://intra.powerofone.de/confluence/x/gIjrAQ + im Abschnitt '5. Zugangsdaten'. +* Bitte immer eine Sicherheitskopie der fertigen Datei _'venv/etc/create-terraform.ini'_ irgendwo außerhalb + des Arbeitsverzeichnisses aufbewahren. Es kann passieren, dass man aus irgendwelchen Gründen die + virtuelle Umgebung komplett wegwerfen und neu erstellen muss. Bei der Gelegenheit wird auch die manuell + erstellte Date _'venv/etc/create-terraform.ini'_ weggeworfen - was doch schade wäre. ## 2. Arbeit mit Provisionierungs-Projekten