2016-06-18 3 views
1

docker-engineをインストールし、rhel/suse/centosイメージを取得するかどうかをユーザーに尋ねるプロセスを自動化しようとしています。pythonやbashを使ってDockerとイメージプルの自動インストール

私の最初のアイデアはPythonを使用していましたが、私はもっと簡単にするためにbashスクリプトを追加しました。

今、私は機能を拡張する予定であり、シェルスクリプトは拡大縮小されません。 このスクリプトをPythonに変換するにはどうすればよいですか? "yum install"などの多くの一般的なコマンドライン操作は、追加のPythonインポートを使用しなければ簡単ではありません。

何か簡単に提案がある場合、

感謝をアドバイスをしてください!

これは...作品にはまだ

#!/bin/sh 

if [ "$(id -u)" != "0" ]; then 
    echo "This script must be run as root" 1>&2 
    exit 1 
fi 

echo 
echo " - Installing packages" 
echo 

if [[ -e /usr/bin/yum ]]; then 
    #Verify packages are up to date 
    yum update 
    #Install Docker 
    yum install docker-engine 
else 
    echo "No yum, lets try apt-get" 
    sudo apt-get update 
    #sudo apt-get -y upgrade 
    #sudo apt-get install linux-image-extra-`uname -r` 
    #sudo apt-get install docker-engine 
fi 

if [ $? -eq 0 ]; then 
    echo success 
else 
    echo failed 
    exit 
fi 

#start Docker 
echo "Would you like to start Docker and pull Images? Select 1 or 2" 
select y1 in "Yes" "No"; do 
    case $y1 in 
     Yes) service docker start; docker pull "rhel:7.2" ;docker pull "mstormo/suse" ;break;; 
     No) exit;; 
    esac 



echo " - Complete!" 
echo 

done 
+4

複数のマシンを自動的にセットアップしたい場合は、Puppet https://github.com/garethr/garethr-dockerやシェフのツールhttps://supermarket.chef.io/cookbooks/docker – StateOfTheArt89

+0

ポインタのために。私はサブプロセスを使用してPythonで作業することができました。 – Rohit

答えて

1

[OK]をbashスクリプトであるので、私はそれがPythonで動作させることができました。誰もが必要とする場合に備えて、ここにコードを残します。

乾杯! のRohit

from subprocess import Popen, PIPE 

uid = Popen(['id', '-u'], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
uid_get = uid.stdout.read(1) 
if uid_get != '0': 
    print "This script needs to be run as root" 

print " - Installing packages " 

check1 = Popen(['/usr/bin/yum'], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
check_yum = check1.stdout.read() 
if check_yum == ' ': 
    print "Yum is not found, trying apt-get" 
    proc = Popen('apt-get update', shell=True, stdin=None, executable="/bin/bash") 
    proc.wait() 
    proc = Popen('apt-get upgrade', shell=True, stdin=None, executable="/bin/bash") 
    proc.wait() 
    proc = Popen('apt-get install', shell=True, stdin=None, executable="/bin/bash") 
    proc.wait() 
    proc = Popen('apt-get install docker-engine', shell=True, stdin=None, executable="/bin/bash") 
    proc.wait() 
else: 
    print "Running yum install" 
    proc = Popen('yum update', shell=True, stdin=None, executable="/bin/bash") 
    proc.wait() 
    proc = Popen('yum install docker-engine', shell=True, stdin=None, executable="/bin/bash") 
    proc.wait() 

print "Would you like to start Docker and pull images - RHEL and SUSE? -> y or n ?" 
y="yes" 
n="no" 
choice = raw_input().lower() 
if choice in y: 
    print "Pulling RHEL and SUSE images" 
    proc = Popen('service docker start; docker pull "rhel:7.2" ;docker pull "mstormo/suse" ; docker run rhel sh -c "cat /etc/*release"; docker run "mstormo/suse" sh -c "cat /etc/*release"', shell=True, stdin=None, executable="/bin/bash") 
     proc.wait() 
elif choice in n: 
    print "Thank you, exiting...." 
else: 
print " Invalid selection" 


print " - Complete! " 
0

私はSHモジュールを試すことをお勧め:

from sh import docker 
for line in docker('build', '-t', some_tag, '.', _iter=True): 
    sys.stdout.write(str(line)) 

ラインによって、その出力 ラインを表示するいいですので、これは、実行時間の長いコマンドです。これは、for loop_iterの機能です。

関連する問題