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

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