Рубрики
Uncategorized

Практические сценарии PowerShell для DevOps — Часть 1

Привет друг. Добро пожаловать в практические сценарии PowerShell для DevOps. В этой серии я попытаюсь … Tagged с PowerShell, DevOps, сценарием.

Практические сценарии для 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»