Я ищу, чтобы найти экземпляры AWS старше X дней, чтобы закрыть - PullRequest
0 голосов
/ 23 апреля 2019

Это часть более крупного проекта, но я впервые пытаюсь сопоставить экземпляры 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'

1 Ответ

0 голосов
/ 23 апреля 2019
echo $json |jq '.StackSummaries[]' | jq --arg kill $killdate 'select (.CreationTime < $kill ) | .CreationTime'

Аргумент должен прийти извне выбора: /

спасибо

...