2017-12-18 30 views
0

내 GCP 환경을위한 최소 플랫폼 관리 도구로 Fabric을 실험하기 시작했습니다. 실험하고자하는 테스트 사례는 GCE API에서 호스트 목록을 가져 와서 동적 호스트 목록을 설정하는 것입니다. 이 목록을 토대로 간단한 최소 보안 업데이트를 적용하고 싶습니다. 이 프로세스는 운영 체제에 따라 다릅니다.Fabric - 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()) 

이 요구 사항은 대상 상자에 파이썬을 설치 한 것입니다주의 :

답변

1

여기에 가능한 솔루션입니다.

+0

왜 sudo가 필요한지 잘 모르겠습니다. 또한'uname -s'를 실행하면 OS 유형도 알 수 있습니다 (예 : Linux 또는 Darwin). –