2017-12-18 15 views
0

私はGCP環境用の最小限のプラットフォーム管理ツールとしてFabricを実験し始めています。実験したいテストケースは、GCE APIからホストのリストを取得し、動的ホストリストを設定することです。このリストに基づいて、シンプルな最小限のセキュリティ更新プログラムを適用したいと考えています。このプロセスは、OSによって異なります。ファブリック - OSタイプを検出してコマンドを実行

# gets running hosts in a single project across all zones 
def ag_get_host(): 
    request = compute.instances().aggregatedList(project=project) 
    response = request.execute() 

    env.hosts = [] 
    for zone, instances in response['items'].items(): 
     for host in instances.get("instances", []): 
      if host['status'] == 'RUNNING': 
       env.hosts.append(host['name']) 


# If redhat, run yum ; if ubuntu, run apt-get 
def sec_update(): 
    if 'redhat' in platform.platform().lower(): 
     sudo('echo 3 > /proc/sys/vm/drop_caches') 
     sudo('yum update yum -y') 
     sudo('yum update-minimal --security -y') 
    elif 'ubuntu' in platform.platform().lower(): 
     sudo('apt-get install unattended-upgrades') 
     sudo('sudo unattended-upgrades –d') 

私は、OSのリリースの詳細を得ることができるロジックを構築するのが難しいです。 platform.platform()は、ターゲットマシンではなくホストOSの詳細を取得します。

from fabric.api import task, sudo 


def get_platform(): 
    x = sudo("python -c 'import platform; print(platform.platform())'") 
    if x.failed: 
     raise Exception("Python not installed") 
    else: 
     return x 


@task 
def my_task(): 
    print("platform", get_platform()) 

が要件をターゲットボックスにインストールのpythonを持つことになるので注意してください:ここで

答えて

1

が可能なソリューションです。

+0

なぜsudoが必要なのかわかりません。 また、 'uname -s'を実行すると、OSタイプも指定する必要があります(LinuxやDarwinなど) –

関連する問題