Назад | Перейти на главную страницу

автоматически определять сервер Apache, работающий на определенной виртуальной машине и зоне в Google Cloud Platform

Примечание: это Самостоятельный вопрос, что здесь разрешено. Если у вас есть лучшие решения, опубликуйте их.

Гипотетическая автоматизация для облачной веб-школы должна проверить, обладают ли учащиеся минимальной компетенцией, прежде чем продолжить. Учащиеся должны иметь возможность запустить виртуальную машину Google Cloud, установить на нее apache и открыть порт 80 для общедоступного Интернета, прежде чем перейти к следующей задаче.

Вопрос не в том, как настроить apache. Это очевидно.

Вопрос в том, как проверить, было ли это сделано.

Итак, первый шаг - обнаружить виртуальную машину. Мы говорим ученикам назвать это как-нибудь и говорим им, какую зону использовать.

Ранний черновик детектора установки apache, выполняемый на другой виртуальной машине, недоступной для учащегося, но в контексте проекта GCP учащегося, мог бы начинаться следующим образом:

#!/bin/bash
NAME="required-vm-name"
ZONE="us-central1-a"
IP=$(gcloud compute instances describe ${NAME} --zone ${ZONE} --format json | jq ".networkInterfaces[0].accessConfigs[0].natIP")
echo $IP
curl -v "http://${IP}"

но это дает результат

"1.2.3.4"  
* Rebuilt URL to: http://"1.2.3.4"/
* Could not resolve host: "1.2.3.4"
* Closing connection 0 curl: (6) Could not resolve host: "1.2.3.4"

где я отредактировал адрес до 1.2.3.4, но сохранил все остальное форматирование вывода.

Если IP-адрес правильный и тестовая страница debian apache2 правильно отображается по этому адресу, почему curl не может его обнаружить? в чем дело? Правильный IP отлично работает в Chrome.

curl не работает с этой строкой в ​​двойных кавычках в URL-адресе.

Добавить -r вариант для jq чтобы вернуть необработанную строку, а не строку в формате JSON. В противном случае jq по умолчанию будет выводить JSON-формат, который для строковых результатов будет заключен в двойные кавычки.

#!/bin/bash
NAME="required-vm-name"
ZONE="us-central1-a"
IP=$(gcloud compute instances describe ${NAME} --zone ${ZONE} --format json | jq -r ".networkInterfaces[0].accessConfigs[0].natIP")
echo $IP
curl -v "http://${IP}"

Теперь вывод стал лучше. Обратите внимание на отсутствие кавычек вокруг извлеченного общедоступного IP-адреса.

1.2.3.4
* Rebuilt URL to: http://1.2.3.4/
*   Trying 1.2.3.4...
* TCP_NODELAY set
* Connected to 1.2.3.4 (1.2.3.4) port 80 (#0)
> GET / HTTP/1.1
> Host: 1.2.3.4
> User-Agent: curl/7.52.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sun, 24 Feb 2019 11:46:54 GMT
< Server: Apache/2.4.25 (Debian)
< Last-Modified: Sun, 24 Feb 2019 11:21:58 GMT
< ETag: "c-582a20841f053"
< Accept-Ranges: bytes
< Content-Length: 12
< Content-Type: text/html
<
Hello World
* Curl_http_done: called premature == 0
* Connection #0 to host 1.2.3.4 left intact