[PYTHON] Erstellen einer Ausführungsumgebung für Chef-Zero / Solo und SoftLayer CUI

SoftLayer Cooking LABO

Chef ist in Ruby geschrieben und slcli-Befehle sind in Python geschrieben. Möglicherweise möchten Sie die Version von Ruby oder Python ändern, um Probleme mit diesen Programmiersprachen zu vermeiden. Die Versionen dieser Programmiersprachen sind jedoch nicht einfach, da sie von der Linux-Distribution bestimmt werden. Das Abrufen des Quellcodes aus dem Internet, das Kompilieren und Installieren unter / usr / local / kann eine entmutigende Aufgabe sein.

Um dieses Problem zu umgehen, installieren Sie mehrere Versionen von Python und Ruby und verwenden Sie ein praktisches Tool, um die Version von Ruby und Python für eine begrenzte Anzahl angemeldeter Benutzer zu ändern, nicht für den gesamten Server. Hier werde ich darüber schreiben, wie der Befehl slcli und Chef in Python in der pyenv-Umgebung und Ruby in der rbenv-Umgebung verwendet werden.

Vorbereiten eines virtuellen Servers zum Entwickeln von Chef-Rezepten

Dieser virtuelle Server kann entweder die VirtualBox Ihres eigenen Computers oder der virtuelle SoftLayer-Server sein. Wenn sich auf Ihrem Computer eine Vagrant- und VirtualBox-Umgebung befindet, ist dies möglicherweise billiger als das Einrichten eines neuen virtuellen SoftLayer-Servers. Hier gehen wir davon aus, dass in SoftLayer ein virtueller Server für die Rezeptentwicklung eingerichtet wird.

Bereiten Sie den folgenden Server als Mindestumgebung für die Verwendung von Chef-Solo / Chef-Zero vor.

CPU: 1 Kern RAM: 2 Gigabyte OS: Ubuntu 14.04 64bit Festplatte: 25 GB

Wenn Sie über 1 Gigabyte RAM verfügen, müssen Sie diesen nur zum Zeitpunkt der Installation auf 2 Gigabyte belassen, da die Installation anscheinend aufgrund von Speichermangel bei der Installation von Chef zur Hälfte abgebrochen wurde. Es scheint zu funktionieren, auch wenn es nach der Einführung auf 1 Giga reduziert wird.

Wenn Sie bereits eine Ausführungsumgebung für den Befehl slcli erstellt haben, ist dies praktisch, da Sie nur die folgende Shell ausführen müssen.

#!/bin/bash
slcli vs create \
--hostname ChefWs --domain softlayer.com \
--datacenter tok02 \
--cpu 1 --memory 2 \
--os UBUNTU_LATEST_64 \
--billing hourly \
--public \
--postinstall https://raw.githubusercontent.com/takara9/ProvisioningScript/master/ubuntu_basic_config \
--key 355919 \
--network 100

Hier ist Postinstall ein Skript, das beim ersten Start nur einmal ausgeführt wird. Es wird von GitHub abgerufen und ausgeführt. Da die Einstellungen unter https://github.com/takara9/ProvisioningScript veröffentlicht werden, empfehlen wir Ihnen, ein spezielles Bereitstellungsskript zu entwickeln, indem Sie darauf verweisen.

Der Schlüssel ist die ID-Nummer des SSH-Anmeldeschlüssels. Mit dem folgenden Befehl können Sie den Vergleich zwischen dem Labelnamen und der ID-Nummer des Kundenportals abrufen.

$ slcli sshkey list

Dieses Bereitstellungsskript blockiert den Zugriff aus dem Internet mit einer Betriebssystem-Firewall. Gehen Sie daher im Kundenportal zu "Support" -> "SSL VPN Login", um eine VPN-Verbindung und dann eine private Adresse herzustellen. Sie können sich mit ssh anmelden.

Einen funktionierenden Benutzer erstellen

In SoftLayer befindet sich im Ausgangszustand nur ein Root-Benutzer. Erstellen Sie daher einen funktionierenden Benutzer. Hier möchten wir mit dem Thema der Automatisierung der Servereinstellungen mit Chef fortfahren, sodass wir einen Benutzer namens chef erstellen.

root@ChefWs:~# adduser chef
Nutzer`chef'Fügt hinzu...
Neue Gruppe`chef' (1000)Fügt hinzu...
Neuer Benutzer`chef' (1000)Gruppe`chef'Fügt hinzu...
Home-Verzeichnis`/home/chef'Schafft...
`/etc/skel'Dateien kopieren von...
Bitte geben Sie ein neues UNIX-Passwort ein: 
Bitte geben Sie Ihr neues UNIX-Passwort erneut ein: 
passwd: password updated successfully
Changing the user information for chef
Enter the new value, or press ENTER for the default
	Full Name []: chef
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Ist das richtig?? [Y/n] Y

Erstellen Sie eine Kopie des Root-Anmeldeschlüssels, damit sich Benutzer des Küchenchefs mit demselben Schlüssel anmelden können.

root@ChefWs:~# cp -r .ssh /home/chef/
root@ChefWs:~# chown -R chef:chef /home/chef/.ssh/

Fügen Sie dann Chef zu / etc / sudoers hinzu.

/etc/sudoers


chef    ALL=(ALL) NOPASSWD: ALL

Erstellung einer SoftLayer-CUI-Umgebung

Die Befehlszeilen-Benutzeroberfläche von SoftLayer ist slcli, das Sie abhängig von der Python-Version warnt. Sie können also pyenv verwenden, um die gewünschte Version auszuwählen, unabhängig von der Python-Version Ihrer Linux-Distribution. Anschließend wird das Befehlsausführungsbeispiel mit Ubuntu 14.04 fortgesetzt.

Installation und Konfiguration von pyenv

Eine ausführliche Erklärung zur Installationsmethode und Einstellung finden Sie unter https://github.com/yyuu/pyenv. Wir werden sie daher als Referenz vorstellen. Führen Sie als Einschränkung die Installation als Chef-Benutzer anstelle von root aus.

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

Wenn Sie sich abmelden, erneut anmelden und mit dem folgenden Befehl prüfen, werden Sie feststellen, dass er nur Python für Linux Distribution enthält.

chef@ChefWs:~$ pyenv versions
* system (set by /home/chef/.pyenv/version)

Vor der Bereitstellung von Python sind gcc und zlib für die Erstellung erforderlich. Installieren Sie sie daher als Root.

root@ChefWs:~$ sudo apt-get install git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev

Verwenden Sie als Nächstes den Befehl Python slcli, um die Version zu installieren, die keine Warnung enthält.

chef@ChefWs:~$ pyenv install 2.7.10

Als Bestätigung können Sie anhand des Ergebnisses des folgenden Befehls sehen, dass es installiert, aber nicht ausgewählt ist.

chef@ChefWs:~$ pyenv versions
* system (set by /home/chef/.pyenv/version)
  2.7.10

Wählen Sie die diesmal eingeführte Version aus und bestätigen Sie erneut.

chef@ChefWs:~$ pyenv global 2.7.10
chef@ChefWs:~$ pyenv versions
  system
* 2.7.10 (set by /home/chef/.pyenv/version)

Bestätigung der Erinnerungen noch einmal

chef@ChefWs:~$ python --version
Python 2.7.10

Damit ist die Python-Erstellung abgeschlossen.

Installieren Sie slcli mit pip

Der folgende Befehl schließt die Installation des Befehls slcli ab.

chef@ChefWs:~$ pip install softlayer
Collecting softlayer
  Downloading SoftLayer-4.1.1-py2.py3-none-any.whl (248kB)
    100% |████████████████████████████████| 249kB 1.3MB/s 
Collecting prompt-toolkit (from softlayer)
  Downloading prompt_toolkit-0.52-py2-none-any.whl (188kB)
    100% |████████████████████████████████| 188kB 1.7MB/s 
Collecting click>=5 (from softlayer)
  Downloading click-5.1-py2.py3-none-any.whl (65kB)
    100% |████████████████████████████████| 65kB 3.9MB/s 
Collecting six>=1.7.0 (from softlayer)
  Downloading six-1.9.0-py2.py3-none-any.whl
Collecting prettytable>=0.7.0 (from softlayer)
  Downloading prettytable-0.7.2.tar.bz2
Collecting requests>=2.7.0 (from softlayer)
  Downloading requests-2.7.0-py2.py3-none-any.whl (470kB)
    100% |████████████████████████████████| 471kB 756kB/s 
Collecting pygments (from prompt-toolkit->softlayer)
  Downloading Pygments-2.0.2-py2-none-any.whl (672kB)
    100% |████████████████████████████████| 675kB 554kB/s 
Collecting wcwidth (from prompt-toolkit->softlayer)
  Downloading wcwidth-0.1.5-py2.py3-none-any.whl
Installing collected packages: six, pygments, wcwidth, prompt-toolkit, click, prettytable, requests, softlayer
  Running setup.py install for prettytable
Successfully installed click-5.1 prettytable-0.7.2 prompt-toolkit-0.52 pygments-2.0.2 requests-2.7.0 six-1.9.0 softlayer-4.1.1 wcwidth-0.1.5

Benutzer-ID und API-Schlüssel abrufen und festlegen

Legen Sie den Benutzernamen und den API-Schlüssel mit dem folgenden Befehl fest. Diesen Benutzernamen und API-Schlüssel finden Sie, indem Sie in der Spalte API-Schlüssel an der Stelle der gewünschten Benutzer-ID unter Konto-> Benutzer auf Ansicht klicken, kopieren und eingeben.

chef@ChefWs:~$ slcli config setup
Username []: *********
API Key or Password []: 
Endpoint (public|private|custom) [public]: 
Timeout [0]: 
:..............:..................................................................:
:         Name : Value                                                            :
:..............:..................................................................:
:     Username : *********                                                        :
:      API Key : **************************************************************** :
: Endpoint URL : https://api.softlayer.com/xmlrpc/v3.1/                           :
:      Timeout : not set                                                          :
:..............:..................................................................:
Are you sure you want to write settings to "/home/chef/.softlayer"? [Y/n]: Y
Configuration Updated Successfully

Führen Sie den folgenden Befehl aus, um den Vorgang zu überprüfen. Wenn kein Fehler auftritt, ist der Vorgang abgeschlossen.

chef@ChefWs:~$ slcli summary

Installation der Ruby-Versionsverwaltungsumgebung

Es gibt rbenv und rvm, aber ich denke, dass Sie es verwenden können, wenn Sie damit vertraut sind. Da pyenv hier installiert wurde, möchte ich rbenv vorstellen. Die Schwierigkeit besteht darin, dass die Installationsmethode etwas kompliziert ist, der Installationsvorgang jedoch dieser URL https://github.com/sstephenson/rbenv folgt.

chef@ChefWs:~$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
Cloning into '/home/chef/.rbenv'...
remote: Counting objects: 2079, done.
remote: Total 2079 (delta 0), reused 0 (delta 0), pack-reused 2079
Receiving objects: 100% (2079/2079), 353.65 KiB | 237.00 KiB/s, done.
Resolving deltas: 100% (1267/1267), done.
Checking connectivity... done.

Führen Sie den folgenden Befehl aus, um die Shell-Einstellungen hinzuzufügen.

chef@ChefWs:~$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
chef@ChefWs:~$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

Melden Sie sich ab und wieder an, um festzustellen, ob Ihre Umgebung korrekt eingerichtet ist. Wenn die folgende Meldung im Typ rbenv angezeigt wird, ist die Umgebung bereit.

chef@ChefWs:~$Ausloggen
Connection to 10.132.253.38 closed.
imac:~ maho$ ssh [email protected] -i key/takara3
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-55-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
Last login: Wed Sep 30 17:37:00 2015 from 10.2.224.229
chef@ChefWs:~$ type rbenv
rbenv ist eine Funktion
rbenv () 
{ 
    local command;
    command="$1";
    if [ "$#" -gt 0 ]; then
        shift;
    fi;
    case "$command" in 
        rehash | shell)
            eval "`rbenv "sh-$command" "$@"`"
        ;;
        *)
            command rbenv "$command" "$@"
        ;;
    esac
}

Holen Sie sich Ruby-Build von GitHUB.

chef@ChefWs:~$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
--Unterwegs weggelassen--
Checking connectivity... done.

Sie benötigen ein Paket, um Ruby zu erstellen. Gehen Sie also wie folgt vor:

chef@ChefWs:~$ sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev

Der folgende Befehl wird heruntergeladen und erstellt. Es wird einige Zeit dauern, wenn 1 Kern 2 Giga-Speicher hat.

chef@ChefWs:~$ rbenv install 2.2.3
--Unterwegs weggelassen--
Installed ruby-2.2.3 to /home/chef/.rbenv/versions/2.2.3

Gehen Sie zur Bestätigung wie folgt vor: In diesem Zustand ist es nicht ausgewählt.

chef@ChefWs:~$ rbenv versions
  2.2.3

Führen Sie den folgenden Befehl aus, um Ruby 2.2.3 auszuwählen und verfügbar zu machen.

chef@ChefWs:~$ rbenv global 2.2.3
chef@ChefWs:~$ ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]

Installieren Sie Chef Solo / Zero

Wenn Sie glauben, dass Solo nicht verschwindet, ist der folgende Link hilfreich. (http://www.sawanoboly.net/blog/2014/11/25/chef-solo-zero-knife-solo-zero) In einer Super-Zusammenfassung bedeutet dies, dass es nicht verschwindet.

Fügen Sie die folgenden Module hinzu, um Chef zu erstellen.

chef@ChefWs:~/chef-repo$ sudo apt-get install g++ autoconf

Erstellen Sie ein Chef-Repository.

chef@ChefWs:~$ pwd
/home/chef
chef@ChefWs:~$ mkdir chef-repo
chef@ChefWs:~$ cd chef-repo/

Installieren Sie bunlder, um Gemfile zu verwenden.

chef@ChefWs:~/chef-repo$ gem install bundler
--Unterwegs weggelassen--
1 gem installed

Erstellen Sie mit dem folgenden Befehl eine Gemfile-Vorlage im Repository-Ordner.

chef@ChefWs:~/chef-repo$ bundle init
Writing new Gemfile to /home/chef/chef-repo/Gemfile

Bearbeiten Sie mit einem Editor, um das Modul hinzuzufügen, das Sie installieren möchten.

/home/chef/chef-repo/Gemfile


# A sample Gemfile
source "https://rubygems.org"

gem 'chef'
gem 'knife-zero'
gem 'knife-solo'
gem 'berkshelf'
gem 'knife-softlayer'

Stellen Sie die erforderlichen Chef-Module vor.

chef@ChefWs:~/chef-repo$ bundle install
Fetching gem metadata from https://rubygems.org/.........
Fetching version metadata from https://rubygems.org/...
Fetching dependency metadata from https://rubygems.org/..
Resolving dependencies.................
Using rake 10.4.2
--Unterwegs weggelassen--
Using bundler 1.10.6
Bundle complete! 5 Gemfile dependencies, 96 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
Post-install message from knife-solo:
Thanks for installing knife-solo!

If you run into any issues please let us know at:
  https://github.com/matschaffer/knife-solo/issues

If you are upgrading knife-solo please uninstall any old versions by
running `gem clean knife-solo` to avoid any errors.

See http://bit.ly/CHEF-3255 for more information on the knife bug
that causes this.

Das aktuelle Repository befindet sich im folgenden Status.

chef@ChefWs:~/chef-repo$ pwd
/home/chef/chef-repo
chef@ChefWs:~/chef-repo$ ls -la
Insgesamt 20
drwxrwxr-x 2 Küchenchef 4096 30. September 18:48 .
drwxr-xr-x 8 Küchenchef 4096 30. September 18:22 ..
-rw-r--r--1 Küchenchef 133 30. September 18:22 Gemfile
-rw-rw-r--1 Küchenchef 6402 30. September 18:48 Gemfile.lock

Zusammenfassung

Wir haben eine Chef-Rezeptentwicklungsumgebung zur Automatisierung der Serverkonstruktion mit SoftLayer erstellt. Durch die Verwendung von pyenv und rbenv können Sie nicht an die Python- oder Ruby-Version der Linux-Distribution gebunden werden. Ab dem nächsten Mal werden wir mit der Entwicklung spezifischer Rezepte fortfahren.

Recommended Posts

Erstellen einer Ausführungsumgebung für Chef-Zero / Solo und SoftLayer CUI
Tipps zur Verwendung von Selen und Headless Chrome in einer CUI-Umgebung
Python studieren Teil 1 Erstellen einer Umgebung
Errichtete eine Umgebung für Anaconda & Jupyter
Erläuterung zum Erstellen einer Anwendung zum Anzeigen von Bildern und Zeichnen mit Python
Erstellen einer Ubuntu 18.04 + MAAS 2.4-Umgebung ab 0
Die Einstellung für die Amateur-Python-Umgebung (für MAC) wird erstellt
Erstellen einer virtuellen Umgebung in einer Anaconda-Umgebung
Erstellen einer Entwicklungsumgebung für maschinelles Lernen
Erstellen einer Umgebung für "Tello_Video" mit Raspbian
Erstellen einer Umgebung für "Tello_Video" unter Windows