Fabric - 检测OS类型并执行命令

时间:2017-12-18 21:46:14

标签: python linux fabric gcp

我开始尝试使用Fabric作为我的GCP环境的最小平台管理工具。我想试验的测试用例是从GCE API获取主机列表并设置动态主机列表。基于此列表,我想应用简单的最小安全更新。此过程因操作系统而异。

# 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')

我很难构建允许我获取操作系统发布细节的逻辑。 platform.platform()获取主机操作系统的详细信息,而不是目标计算机。

1 个答案:

答案 0 :(得分:1)

这是一个可能的解决方案:

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。