# #google-cloud-platform #gcloud
Вопрос:
Я пытаюсь запустить команду gcloud, которая бы перечисляла экземпляры виртуальных машин и показывала, сколько дней прошло с даты их создания.
Пока у меня есть только приведенная ниже команда, но я не знаю, есть ли способ расположить их в каком-то порядке, сколько дней им от даты создания. Я пытался добавить какой-то фильтр, но мне это не удалось.
Если есть какие-либо советы, я был бы очень признателен.
gcloud projects list --format="table[box,title='My Project List'(createTime:sort=1,name,projectNumber,projectId:label=ProjectID,parent.id:label=Parent)"
Комментарии:
1. Вы хотите перечислить все виртуальные машины в рамках конкретного проекта и отсортировать по метке времени создания?
Ответ №1:
Облачный SDK ( gcloud
) включает в себя прогнозы для date()
и duration()
, но они выиграли бы от более четкой документации. Я хочу, например, думать, что unit=1
это возвращает результат в секундах (что было бы проще) для последующего, но это не так (и я не могу понять, что это на самом деле делает, кто-нибудь?)
unit=1
— Интересно, это просто объединяет временные метки со второй точностью? Поскольку метка времени может иметь точность в наносекунду, возможно, дата(.. единица=1,…) всегда округляется до секунд?
Несмотря gcloud
на то, что (и многие другие CLI) пытаются предоставить этот набор функций, часто лучше следовать рекомендациям UNIX и собирать решение из частей.
createTime
являются метками времени; один из хорошо известных типов Protobuf от Google
Чисто баш:
# createtime Timestamps for all my projects
TIMESTAMPS=$(
gcloud projects list
--format="value(createTime.date())")
# In seconds
NOW=$(date %s)
for TIMESTAMP in ${TIMESTAMPS}
do
# Parse the Google Timestamp and return seconds
CREATED=$(date %s --date=${TIMESTAMP})
# Difference in seconds since ${NOW}
DIFF=$((${NOW}-${CREATED}))
# Seconds-->Days
DAYS=$((${DIFF}/3600/24))
echo ${DAYS}
done
duration()
может быть полезно, но я не знаком с этими сроками действия ISO 8601
gcloud projects list
--format="value(createTime.duration())"
Более полный пример:
# Multiple values are easier to parse as CSV
VALUES=$(
gcloud projects list
--format="csv[no-heading](projectId,createTime.date())")
# In seconds
NOW=$(date %s)
for VALUE in ${VALUES}
do
# Extract PROJECT_ID and TIMESTAMP from VALUE
IFS=, read PROJECT_ID TIMESTAMP <<< ${VALUE}
# Parse the Google Timestamp and return seconds
CREATED=$(date %s --date=${TIMESTAMP})
# Difference in seconds since ${NOW}
DIFF=$((${NOW}-${CREATED}))
# Seconds-->Days
DAYS=$((${DIFF}/3600/24))
printf "%st%sn" "${DAYS}" "${PROJECT_ID}"
done