Практические сценарии для DevOps с PowerShell (4 серии деталей)
Привет друг. Добро пожаловать в практические сценарии PowerShell для DevOps. В этой серии я попытаюсь научить вам, как писать сценарии PowerShell и решить некоторые реальные проблемы DevOps, написав сценарии на языке PowerShell.
Сценарии или программирование в целом являются обязательными для тех, кто хочет искать карьеру облака или DevOps сегодня. Эта серия направлена на то, чтобы дать некоторое руководство о том, как самостоятельно создать свои собственные сценарии PowerShell.
Для кого этот сериал?
Инженеры DevOps поручено работать в облачных средах с большим масштабом ресурсов. Часто сценарии — это простой способ автоматизации задач, которые можно программно достичь, чтобы сэкономить время и давать постоянные результаты.
Если вы пытаетесь выучить PowerShell для того, чтобы попасть в карьеру Cloud/DevOps и изо всех сил пытаетесь найти некоторые проблемы с упражнениями для решения.
Это не лучшие практики или формальный ресурс образования PowerShell, я просто пытаюсь предоставить некоторые изготовленные сценарии DevOps/Cloud, которые можно использовать для создания некоторых сценариев PowerShell в попытке практиковать и изучить навыки сценариев.
Я полагаю, используя справочную документацию PowerShell как можно больше. Проведите время на терминале и поиграйте с разными командниками. Ваша конечная цель должна быть попытаться выучить стиль для разработки и создания решения для автоматизации для любого сценария.
Инструменты, которые вы будете изучать и забрать по пути, в то время как решение этих сценариев будет накапливаться, и будут расширять ваш горизонт с точки зрения того, что вы можете сделать с автоматизацией и сценариями.
Проблема
Представьте, что вы инженера DevOps для проекта с несколькими общедоступными веб -конечными точками, подверженными интернету. У вашего хостингового провайдера прерывистый отключение сети в инфраструктуре балансировки нагрузки. Вам нужно написать сценарий PowerShell:
1-, который принимает список URL-адресов для выполнения HTTP-теста Ping (HTTP GET запрос) из файла конфигурации 2- Выполняет тест HTTP GET запрос на указанный список конечных точек и результаты обратных испытаний, содержащих
- Код состояния возвращался http -ответ
- Описание статуса для ответа HTTP
- Время ответа запроса
- Неэпби времени для результата теста
как коллекция
3- Приводы к терминалу в читаемом формате человека
Некоторые указатели на написание собственного решения
Некоторые конечные точки теста, которые вы можете использовать
Хотя вы можете использовать любую публичную конечную точку, я использую https://httpbin.org Конечная точка статуса, чтобы случайным образом вернуть мне код состояния HTTP для моделирования реального сценария тестирования. Когда мы достигнем тестового URL с несколькими кодами статуса, также известными и о Flaky сайтах, мы получим разные результаты.
Если вы используете » https://httpbin.org/status/200,403,404,500 » URL, вы случайным образом получите код ответа, 200, будучи успешными и другие коды ответов, моделирующие различные типы сбоев.
Вы можете использовать » https://httpbin.org/status/200 «, чтобы получить только успешные результаты теста. Эти конечные точки могут быть вашей отправной точкой для использования в качестве игровой площадки для курирования вашего сценария.
Мясо раствора
Обычно каждый сценарий имеет основную функциональность, который вы хотите использовать, разработка обычно начинается с результатов, полученных от этого основного командлета.
Вы можете выполнять HTTP -запрос по -разному в PowerShell, но большинство из них используют командлеты:
Invoke-restmethod
и Invoke-webrequest
Я предлагаю сначала начать чтение документации для этих командлетов, попробуйте сначала использовать их для проведения некоторых тестов вручную в терминале, захватив результат, а затем курируйте план оттуда.
Ввод и вывод для вашего решения
Я поместил требование для подготовки и употребления списка конечных точек для тестов из файла. Вы можете использовать любой формат, который вам нравится, текстовый файл отдельного строки, файл CSV — все это хорошо.
Я использовал и рекомендую JSON, поскольку это самая богатая и универсальная нотация, которую можно использовать среди множества языков программирования.
Этот навык, который когда-то изучил, пригодится для вас в различных сценариях, где вам нужно будет обрабатывать набор данных, вы не можете просто сохранить и обрабатывать в качестве аргумента командной строки.
Задачи, которые вам нужно выполнить в своем сценарии
1- Получите свой ввод, попробуйте выяснить отдельные задачи, которые вам нужно выполнить первым, чтобы добраться до состояния, которое вы действительно можете выполнить.
В нашем случае вы хотите получить свой список конечной точки. Чтобы достичь этого, нам необходимо получить доступ к нашему файлу конфигурации, который удерживает наши конечные точки теста.
Может быть, есть параметр для принятия пути файла, а затем потреблять содержимое этого файла.
2- Иметь функцию для выполнения вашего теста, это хорошая практика, чтобы создать функцию для повторяющихся вызовов кода, в нашем случае мы знаем, что мы будем запустить тест и даст результат теста для нескольких конечных точек, следовательно, это хорошая идея, чтобы отделить эту часть наш код в функцию.
3- На данный момент у вас есть все, что вам нужно
Проверьте свои тестовые конечные точки, вызовите свою тестовую функцию для каждого и захватите результаты.
4- Распечатайте результат
Покажите результаты с способом выбора.
Последние советы
С этого момента ниже вы увидите мое примеры решения. В зависимости от вашего уровня и стиля обучения, либо взгляните до, либо после того, как вы сделали его выстрел.
Мой образцеп -раствор
Структура папки
Файлы
GitHub
УРЛ репозитория
Tests.json
Это список конечных точек, которые я хотел бы протестировать, хранящийся в формате JSON, который может быть произведен и потребляется с различными современными языками. Что у нас есть здесь, так это множество объектов, которые имеют имени и ключи для URL для нас, чтобы выполнить и маркировать тесты.
[{ "name": "FlakyWebsite-#1", "url": "https://httpbin.org/status/200,403,404,500" }, { "name": "StableWebsite-#1", "url": "https://httpbin.org/status/200" }, { "name": "FlakyWebsite-#2", "url": "https://httpbin.org/status/200,403,404,500" }, { "name": "StableWebsite-#2", "url": "https://httpbin.org/status/200" }, { "name": "StableWebsite-#3", "url": "https://httpbin.org/status/200" }, { "name": "StableWebsite-#4", "url": "https://httpbin.org/status/200" }, { "name": "FlakyWebsite-#3", "url": "https://httpbin.org/status/200,403,404,500" }, { "name": "FlakyWebsite-#4", "url": "https://httpbin.org/status/200,403,404,500" }, { "name": "FaultyWebsite-#1", "url": "https://httpbin.org/status/500" } ]
Наша вспомогательная функция, создайте этот файл по пути ./lib/New-httptestesult.ps1
Этот скрипт выполнит тест на Ping HTTP с передаваемыми параметрами и возвращает объект результата тестирования
function New-HttpTestResult { param ( [Parameter(ValueFromPipeline=$true)] [PSCustomObject] $TestArgs ) $ProgressPreference = 'SilentlyContinue' $Method = 'Get' $duration = Measure-Command { $Response = Invoke-WebRequest -Uri $TestArgs.url -Method $Method -SkipHttpErrorCheck } $result = [PSCustomObject]@{ name = $TestArgs.name status_code = $Response.StatusCode.ToString() status_description = $Response.StatusDescription responsetime_ms = $duration.Milliseconds timestamp = (get-date).ToString('O') } return $result }
Test-httpendpoints.ps1
Наш главный скрипт, мы приведем этот скрипт, чтобы запустить тесты, произвести и вернуть результаты теста множество
[CmdletBinding()] param ( [Parameter(ValueFromPipeline = $true)] [string] $TestsFilePath = '.\Tests.json' ) # Convert JSON Config Files String value to a PowerShell Object $TestsObj = Get-Content -Path $TestsFilePath | ConvertFrom-Json # Import the Tester Function . ./lib/New-HttpTestResult.ps1 # Loop through Test Objects and get the results as a collection $TestResults = foreach ($Test in $TestsObj) { New-HttpTestResult -TestArgs $Test } $TestResults | Format-Table -AutoSize
Образец пробега
При каждом забеге есть шанс получить другой результат для облегающих конечных точек.
Вывод
Я надеюсь, что этот образец вызов помог вам немного обучать PowerShell и дать ему больше контекста о том, как вы можете создать пользовательские инструменты, за короткие сроки.
Вы можете поделиться своими решениями через комментарии, если вы хотите, чтобы я просмотрел их или у вас были какие -либо вопросы.
Во второй части этой серии я планирую войти в Azure Cloud, и я поделюсь еще одной проблемой с использованием модуля AZ PowerShell. Надеюсь увидеть тебя там.
Практические сценарии для DevOps с PowerShell (4 серии деталей)
Оригинал: «https://dev.to/mertsenel/practical-powershell-scripting-for-devops-part-1-1283»