Это часть более крупного проекта, но я впервые пытаюсь сопоставить экземпляры AWS старше X дней.
Я изо всех сил пытаюсь работать с отформатированными датами или jq: /
Я попробовал несколько идей форматирования (время Unix, короткая дата и т. Д.)
В конечном итоге было бы проще работать с полем даты в json, которое возвращает awscli
Пример JSON
aws cloudformation list-stacks
{
"StackSummaries": [
{
"StackId": "arn:aws:cloudformation:eu-029e8e947a9c",
"DriftInformation": {
"StackDriftStatus": "NOT_CHECKED"
},
"TemplateDescription": "Testing - SINGLE",
"CreationTime": "2019-04-23T15:25:22.757Z",
"StackName": "HAPPYHARRY123456789",
"StackStatus": "CREATE_COMPLETE"
},
{
"StackId": "arn:aws:cloudformation:eu-0a4e84363f34",
"DriftInformation": {
"StackDriftStatus": "NOT_CHECKED"
},
"TemplateDescription": "Testing - SINGLE",
"CreationTime": "2019-04-15T14:31:42.515Z",
"StackName": "HAPPYHARRY123789456",
"StackStatus": "CREATE_COMPLETE"
},
{
"StackId": "arn:aws:cloudformation:eu-50faeb5394d2",
"LastUpdatedTime": "2018-01-23T15:44:53.640Z",
"TemplateDescription": "Lambda Gateway",
"CreationTime": "2018-01-23T15:44:48.134Z",
"StackName": "BARRYLAMBDA",
"StackStatus": "CREATE_COMPLETE",
"DriftInformation": {
"StackDriftStatus": "NOT_CHECKED"
}
}
]
}
Я ищу дату, чтобы убить облачную информацию
Я пробовал много форматирования даты, включая использование jq для извлечения CreationTime и конвертирования в Unix время и минус с сегодняшнего дня во время Unix ... бла, бла, бла
Теперь я здесь ...
Я создал время ISO, чтобы соответствовать времени AWS
#how far back do I wish
daysback=7
#iso date of today
today=$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")
#take daysback from indicated time of aws instance
killdate=`date -d "$today - $daysback days" +"%Y-%m-%dT%H:%M:%S.000Z"`
#the killdate > kill all older than
echo $killdate
#2019-04-16T16:10:20.000Z
псевдо хочу
Глядя в json, найдите любой стек с датой, более поздней, чем killdate, и перечислите имя стека только в том случае, если начинается с HAPPY, чего я достиг с
echo $json |jq '.StackSummaries[]' | jq -r 'select (.CreationTime>"$killdate") | .StackName' | awk '/^HAPPY/'
Я использую это, чтобы доказать мой синтаксис
Это не дает мне вывода
echo $json |jq '.StackSummaries[]' | jq 'select (.CreationTime<"$killdate") | .CreationTime'
Это дает мне все
echo $json |jq '.StackSummaries[]' | jq 'select (.CreationTime>"$killdate") | .CreationTime'
Я бы ожидал ниже
"2019-04-15T14:31:42.515Z"
"2018-01-23T15:44:48.134Z"
и однажды возвращает имя стека вместо
"HAPPYHARRY123789456"
Может кто-нибудь увидеть, где я иду не так и почему он не возвращает то, что я хочу ??
НАЙДИ МОЙ ОТВЕТ, НАПИСАВАЯ ЭТО ТАК, ПОКАЖИ ЕГО ЗДЕСЬ ДЛЯ ДРУГИХ
echo $json |jq '.StackSummaries[]' | jq --arg kill $killdate 'select (.CreationTime < $kill ) | .CreationTime'