[PYTHON] Création d'un environnement d'exécution pour Chef-Zero / Solo et SoftLayer CUI

SoftLayer Cooking LABO

Chef est écrit en Ruby et les commandes slcli sont écrites en Python. Vous voudrez peut-être changer la version de Ruby ou Python pour éviter des problèmes avec ces langages de programmation. Cependant, les versions de ces langages de programmation ne sont pas faciles car elles sont déterminées par la distribution Linux. Obtenir le code source sur Internet, le compiler et l'installer sous / usr / local / peut être une tâche ardue.

Pour contourner le problème, installez plusieurs versions de Python et Ruby et utilisez un outil pratique pour changer la version de ruby et python pour un nombre limité d'utilisateurs connectés, pas pour l'ensemble du serveur. Ici, j'écrirai sur la façon d'utiliser la commande slcli et Chef en Python sous l'environnement pyenv et Ruby sous l'environnement rbenv.

Préparer un serveur virtuel pour développer des recettes Chef

Ce serveur virtuel peut être soit la VirtualBox sur votre ordinateur, soit le serveur virtuel SoftLayer. Si vous avez un environnement vagabond et VirtualBox sur votre ordinateur, cela peut être moins cher que de configurer un nouveau serveur virtuel SoftLayer. Ici, nous partirons du principe qu'un serveur virtuel pour le développement de recettes sera mis en place dans SoftLayer.

Préparez le serveur suivant comme environnement minimum pour utiliser Chef-Solo / Chef-Zero.

CPU: 1 cœur RAM: 2 gigaoctets OS: Ubuntu 14.04 64bit Disque: 25 Go

Si vous avez 1 gigaoctet de RAM, vous devrez le maintenir à 2 gigaoctets uniquement lors de l'installation de Chef, car il manquera de mémoire et l'installation s'arrêtera à mi-chemin. Cela semble fonctionner même s'il est réduit à 1 giga après l'introduction.

Si vous avez déjà créé un environnement d'exécution pour la commande slcli, c'est pratique car il vous suffit d'exécuter le shell suivant.

#!/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

Ici, postinstall est un script qui n'est exécuté qu'une seule fois au premier démarrage, et il est acquis depuis GitHub et exécuté. Étant donné que les paramètres sont publiés sur https://github.com/takara9/ProvisioningScript, nous vous recommandons de développer un script d'approvisionnement dédié en vous y référant.

La clé est alors le numéro d'identification de la clé de connexion ssh. Vous pouvez obtenir la comparaison entre le nom de l'étiquette et le numéro d'identification du portail client avec la commande suivante.

$ slcli sshkey list

Ce script de provisioning est conçu pour bloquer l'accès depuis Internet avec un pare-feu OS, alors allez dans "Support" -> "SSL VPN Login" depuis le portail client pour établir une connexion VPN, puis une adresse privée. Vous pourrez vous connecter avec ssh.

Créer un utilisateur actif

Dans SoftLayer, il n'y a qu'un utilisateur root dans l'état initial, alors créez un utilisateur actif. Ici, nous voulons continuer avec le thème de l'automatisation des paramètres du serveur à l'aide de Chef, nous allons donc créer un utilisateur appelé chef.

root@ChefWs:~# adduser chef
utilisateur`chef'Ajoute...
Nouveau groupe`chef' (1000)Ajoute...
Nouvel utilisateur`chef' (1000)Groupe`chef'Ajoute à...
Annuaire personnel`/home/chef'Crée...
`/etc/skel'Copie de fichiers depuis...
Veuillez saisir un nouveau mot de passe UNIX: 
Veuillez saisir à nouveau votre nouveau mot de passe UNIX: 
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 []: 
Est-ce correct?? [Y/n] Y

Faites une copie de la clé de connexion racine afin que les utilisateurs de chef puissent se connecter avec la même clé.

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

Ajoutez ensuite chef à / etc / sudoers.

/etc/sudoers


chef    ALL=(ALL) NOPASSWD: ALL

Création d'environnement SoftLayer CUI

L'interface utilisateur de ligne de commande de SoftLayer est slcli, qui vous avertit en fonction de la version de Python, vous pouvez donc utiliser pyenv pour sélectionner la version dont vous avez besoin, quelle que soit la version Python de votre distribution Linux. Ensuite, l'exemple d'exécution de commande se poursuivra en utilisant Ubuntu 14.04.

Installation et configuration de pyenv

La méthode d'installation détaillée et l'explication des paramètres peuvent être trouvées sur https://github.com/yyuu/pyenv, nous allons donc la présenter comme référence. En guise de mise en garde, exécutez l'installation en tant qu'utilisateur chef au lieu de root.

$ 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

Si vous vous déconnectez, vous reconnectez et vérifiez avec la commande suivante, vous verrez qu'elle ne contient que Python pour Linux Distribution.

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

Avant de déployer Python, gcc et zlib sont requis pour la construction, alors installez-les en tant que root.

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

Ensuite, utilisez la commande Python slcli pour installer la version qui ne sort pas avec un avertissement.

chef@ChefWs:~$ pyenv install 2.7.10

En guise de confirmation, à partir du résultat de la commande suivante, vous pouvez voir qu'elle est installée mais non sélectionnée.

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

Sélectionnez la version introduite cette fois et reconfirmez.

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

Confirmation des rappels à nouveau

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

Ceci termine la création de Python.

Installer slcli à l'aide de pip

La commande suivante termine l'installation de la commande slcli.

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

Obtenir et définir l'ID utilisateur et la clé API

Définissez le nom d'utilisateur et la clé API avec la commande suivante. Ce nom d'utilisateur et cette clé API peuvent être trouvés en cliquant sur Afficher dans la colonne Clé API à l'emplacement de l'ID utilisateur souhaité dans Compte-> Utilisateurs, copiez et entrez.

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

Pour vérifier l'opération, exécutez la commande suivante et si aucune erreur ne se produit, le processus est terminé.

chef@ChefWs:~$ slcli summary

Installation de l'environnement de gestion de version Ruby

Il y a rbenv et rvm, mais je pense que vous pouvez l'utiliser si vous le connaissez. Puisque pyenv a été installé ici, je voudrais vous présenter rbenv. La difficulté est que la méthode d'installation est un peu compliquée, mais la procédure d'installation suit cette URL https://github.com/sstephenson/rbenv.

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.

Exécutez la commande suivante pour ajouter les paramètres du shell.

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

Déconnectez-vous et reconnectez-vous pour voir si votre environnement est correctement configuré. Si le message suivant s'affiche dans le type rbenv, l'environnement est prêt.

chef@ChefWs:~$Se déconnecter
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 est une fonction
rbenv () 
{ 
    local command;
    command="$1";
    if [ "$#" -gt 0 ]; then
        shift;
    fi;
    case "$command" in 
        rehash | shell)
            eval "`rbenv "sh-$command" "$@"`"
        ;;
        *)
            command rbenv "$command" "$@"
        ;;
    esac
}

Obtenez ruby-build à partir de GitHUB.

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

Vous devez avoir un package pour construire Ruby, alors procédez comme suit:

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

La commande suivante sera téléchargée et compilée. Cela prendra un certain temps si 1 cœur a 2 giga de mémoire.

chef@ChefWs:~$ rbenv install 2.2.3
--Omis en chemin--
Installed ruby-2.2.3 to /home/chef/.rbenv/versions/2.2.3

Pour confirmer, procédez comme suit: Il n'est pas sélectionné dans cet état.

chef@ChefWs:~$ rbenv versions
  2.2.3

Pour sélectionner Ruby 2.2.3 et le rendre disponible, exécutez la commande suivante.

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

Installez Chef Solo / Zero

Si vous pensez que Solo ne disparaîtra pas, le lien suivant vous sera utile. (http://www.sawanoboly.net/blog/2014/11/25/chef-solo-zero-knife-solo-zero) Dans un super-résumé, cela signifie qu'il ne disparaîtra pas.

Ajoutez les modules suivants pour créer Chef.

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

Créez un référentiel Chef.

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

Installez bunlder pour utiliser Gemfile.

chef@ChefWs:~/chef-repo$ gem install bundler
--Omis en chemin--
1 gem installed

Créez un modèle Gemfile dans le dossier du référentiel avec la commande suivante.

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

Modifiez avec un éditeur pour ajouter le module que vous souhaitez installer.

/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'

Présentez l'ensemble requis de modules Chef.

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
--Omis en chemin--
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.

Le référentiel actuel est dans l'état suivant.

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

Résumé

Nous avons créé un environnement de développement de recettes Chef pour automatiser la construction de serveurs avec SoftLayer. En utilisant pyenv et rbenv, vous pouvez être libre d'être lié à la version Python ou Ruby de la distribution Linux. A partir de la prochaine fois, nous procéderons au développement de recettes spécifiques.

Recommended Posts

Création d'un environnement d'exécution pour Chef-Zero / Solo et SoftLayer CUI
Conseils d'utilisation de Selenium et Headless Chrome dans un environnement CUI
Etudier Python Part.1 Créer un environnement
Création d'un environnement pour Anaconda et Jupyter
Explication de la création d'une application pour afficher des images et dessiner avec Python
Création d'environnement Ubuntu 18.04 + MAAS2.4 à partir de 0
Le paramètre d'environnement Python amateur (pour MAC) est en cours de création
Créer un environnement virtuel dans un environnement Anaconda
Créer un environnement de développement pour l'apprentissage automatique
Construire un environnement pour "Tello_Video" avec Raspbian
Création d'un environnement pour "Tello_Video" sous Windows