Я нашел способ заставить это работать без подключаемого модуля. По сути, вы можете написать скрипт, обертывающий инструмент gcloud
, и указать параметр ansible_ssh_executable
в этом скрипте, который вы можете определить на уровне инвентаря. Вы должны убедиться, что плагин инвентаризации gcp_compute
идентифицирует хосты по имени, потому что это то, что ожидает gcloud compute ssh
.
Вот скрипт:
#!/bin/sh
set -o errexit
# Wraps the gcloud utility to enable connecting to instances which are behind
# GCP Cloud IAP. Used by setting the `ansible_ssh_executable` setting for a play
# or inventory. Parses out the relevant information from Ansible's call to the
# script and injects into the right places of the gcloud utility.
arg_string="$@"
grep_hostname_regex='[a-z]*[0-9]\{2\}\(live\|test\)'
sed_hostname_regex='[a-z]*[0-9]{2}(live|test)'
target_host=$(
echo "$arg_string\c" | grep -o "$grep_hostname_regex"
)
ssh_args=$(
echo "$arg_string\c" | sed -E "s# ${sed_hostname_regex}.*##"
)
cmd=$(
echo "$arg_string\c" | sed -E "s#.*${sed_hostname_regex} ##"
)
gcloud compute ssh "$target_host" \
--command="$cmd" \
--tunnel-through-iap \
-- $ssh_args
Примечание:
sed
могут отличаться в Linux. Когда вы находитесь вне офиса, просто остановите службу autofs :
sudo systemctl stop autofs
Это не отключит службу, поэтому при перезагрузке в офисе autofs снова будет работать.