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を持つことになるので注意してください:ここで
なぜsudoが必要なのかわかりません。 また、 'uname -s'を実行すると、OSタイプも指定する必要があります(LinuxやDarwinなど) –