{"id":30933,"date":"2023-05-09T07:02:35","date_gmt":"2023-05-09T05:02:35","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/desired-state-configuration\/"},"modified":"2024-09-30T07:06:55","modified_gmt":"2024-09-30T05:06:55","slug":"desired-state-configuration","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/desired-state-configuration\/","title":{"rendered":"Wprowadzenie do DSC (Desired State Configuration)"},"content":{"rendered":"\n<div class=\"table-of-contents\">\n    <p class=\"title\">PRZEJD\u0179 DO:<\/p>\n    <ol>\n                    <li><a href=\"#(Desired-State-Configuration)\">1.  Czym w\u0142a\u015bciwie jest DSC?<\/a><\/li>\n                    <li><a href=\"#zalety\">2.  Zalety <\/a><\/li>\n                    <li><a href=\"#zastosowanie-\">3.   Zastosowanie w praktyce <\/a><\/li>\n                    <li><a href=\"#sytuacjach-\">4.  W jakich sytuacjach DSC nie zadzia\u0142a?  <\/a><\/li>\n                    <li><a href=\"#Desired-State-Configuration-\u2013-architektura\">5.  Architektura <\/a><\/li>\n                    <li><a href=\"#esired-State-Configuration\">6.  Microsoft Azure Automation Desired State Configuration <\/a><\/li>\n                    <li><a href=\"#Podsumowanie\">7.  Podsumowanie<\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"(Desired-State-Configuration)\">Czym w\u0142a\u015bciwie jest DSC (Desired State Configuration)?<\/h2>\n\n\n\n<p>DSC (Desired State Configuration) jest to sformalizowany spos\u00f3b, kt\u00f3ry pozwala skonfigurowa\u0107 \u015brodowisko tak, aby przybra\u0142o ono oczekiwany przez nas stan. Je\u015bli przyk\u0142adowo chcemy, aby na danej maszynie znajdowa\u0142a si\u0119 aplikacja (np. jaki\u015b program antywirusowy) w okre\u015blonej wersji, to mo\u017cemy to osi\u0105gn\u0105\u0107 w\u0142a\u015bnie za pomoc\u0105 DSC. Mo\u017ce to by\u0107 jedna aplikacja, mo\u017ce by\u0107 ich wiele, jeste\u015bmy tutaj w\u0142a\u015bciwie nieograniczeni. Mo\u017ce potrzebujemy odpowiednio skonfigurowanego serwera IIS? Nie ma problemu. A mo\u017ce chcemy mie\u0107 pewn\u0105 struktur\u0119 katalog\u00f3w na dysku z konkretnymi plikami? Z DSC wszystko jest mo\u017cliwe, ale kto\u015b s\u0142usznie pewnie zauwa\u017cy, \u017ce mo\u017cemy to wszystko r\u00f3wnie\u017c osi\u0105gn\u0105\u0107 za pomoc\u0105 przygotowanego wcze\u015bniej obrazu do stworzenia maszyny wirtualnej. Co r\u00f3\u017cni t\u0119 opcj\u0119 od DSC? Sprawd\u017amy!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zalety\">Desired State Configuration \u2013 zalety<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u0141atwiejsza konfiguracja<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Wyobra\u017amy sobie, \u017ce posiadamy maszyn\u0119 wirtualn\u0105 \u2013 serwer. Chcemy ten serwer skonfigurowa\u0107: zainstalowa\u0107 r\u00f3\u017cne aplikacje, zabezpieczenia, wprowadzi\u0107 zmiany w rejestrze. W zale\u017cno\u015bci od tego, jak du\u017ca jest to konfiguracja, musimy wykona\u0107 odpowiednio du\u017c\u0105 liczb\u0119 krok\u00f3w. Mogliby\u015bmy to rozpisa\u0107 w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Zainstaluj Firefox w wersji X<\/strong><\/li>\n\n\n\n<li><strong>Zainstaluj Dotnet Core w wersji X<\/strong><\/li>\n\n\n\n<li><strong>Dodaj regu\u0142\u0119 X w MS Defenderze<\/strong><\/li>\n\n\n\n<li><strong>Usu\u0144 wpis X w rejestrze<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Aby wykona\u0107 ka\u017cdy z tych krok\u00f3w manualnie, b\u0119dziemy si\u0119 posi\u0142kowa\u0107 r\u00f3\u017cnymi narz\u0119dziami. Je\u015bli ta konfiguracja jest z\u0142o\u017cona, mog\u0105 pojawi\u0107 si\u0119 problemy z kompatybilno\u015bci\u0105. Jedno narz\u0119dzie mo\u017ce nie dzia\u0142a\u0107 z innym w danej wersji albo mog\u0105 sobie wzajemnie nadpisywa\u0107 prac\u0119. Tu z pomoc\u0105 przychodzi w\u0142a\u015bnie DSC. <strong>Zosta\u0142o stworzone<\/strong> w tym celu, <strong>aby wzi\u0105wszy rozwi\u0105zania kilku dostawc\u00f3w, mo\u017cna by\u0142o u\u017cywa\u0107 ich ze sob\u0105 bezkonfliktowo. <\/strong>S\u0142u\u017cy do tego sformalizowanie regu\u0142, kt\u00f3rych powinni si\u0119 trzyma\u0107 dostawcy komponent\u00f3w, jakich chcemy u\u017cywa\u0107.<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Idempotentno\u015b\u0107<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Inn\u0105 zalet\u0105 takiego podej\u015bcia jest idempotentno\u015b\u0107, czyli mo\u017cliwo\u015b\u0107 wykonywania wielokrotnie tej samej operacji bez zmiany wyniku. Dzi\u0119ki temu mamy pewno\u015b\u0107, \u017ce za ka\u017cdym razem, gdy zastosujemy pewn\u0105 konfiguracj\u0119, stan systemu si\u0119 nie zmieni i b\u0119dzie taki, jakiego oczekujemy. Warto zauwa\u017cy\u0107, \u017ce stosowane jest tutaj podej\u015bcie deklaratywne, co jest kolejn\u0105 zalet\u0105 takiego rozwi\u0105zania. Definiujemy zatem stan, jaki chcemy zasta\u0107, zamiast zastanawia\u0107 si\u0119 nad poszczeg\u00f3lnymi etapami, kt\u00f3re pozwol\u0105 nam do tego stanu doj\u015b\u0107.<\/p>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Kompatybilno\u015b\u0107<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Na pocz\u0105tku wspomnia\u0142em o tym, \u017ce DSC pomaga w zarz\u0105dzaniu komponentami tak, aby by\u0142y one kompatybilne ze sob\u0105. Oznacza to, \u017ce <strong>DSC jest pewnego rodzaju ustandaryzowan\u0105 metod\u0105 tworzenia tych komponent\u00f3w.<\/strong> Jest to szereg regu\u0142, kt\u00f3re, stosowane podczas tworzenia komponentu, daj\u0105 nam zapewnienie, \u017ce komponenty te b\u0119d\u0105 mog\u0142y by\u0107 wykorzystywane przez wielu odbiorc\u00f3w. Nie jest to jedynie zale\u017cno\u015b\u0107 komponent \u2013 odbiorca. To r\u00f3wnie\u017c gwarancja, \u017ce komponenty te mog\u0105 by\u0107 ze sob\u0105 \u0142\u0105czone i nie oddzia\u0142uj\u0105 na siebie wzajemnie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zastosowanie-\">Desired State Configuration \u2013 zastosowanie w praktyce<\/h2>\n\n\n\n<p>Kompatybilno\u015b\u0107 komponent\u00f3w i ich idempotentno\u015b\u0107 to niejedyne zalety DSC. Daje nam on r\u00f3wnie\u017c pewno\u015b\u0107, \u017ce cokolwiek by si\u0119 dzia\u0142o, nasza maszyna wr\u00f3ci do stanu okre\u015blonego w pocz\u0105tkowej konfiguracji. W wyj\u0105tkowej sytuacji (np. gdy nast\u0105pi\u0142y jakie\u015b nieodwracalne zmiany) takiego stanu nie uda si\u0119 odtworzy\u0107, ale zostaniemy o tym fakcie poinformowani i b\u0119dziemy mogli odpowiednio zareagowa\u0107. O mo\u017cliwo\u015bciach reagowania szerzej napisz\u0119 w moim kolejnym artykule, w kt\u00f3rym skupi\u0119 si\u0119 na <strong>Azure AA DSC<\/strong>.<\/p>\n\n\n\n<p>Tymczasem wyobra\u017amy sobie, \u017ce serwer zosta\u0142 przez nas skonfigurowany i pozostawiony w pewnym stanie. Pod nasz\u0105 nieobecno\u015b\u0107 kto\u015b, kto by\u0107 mo\u017ce nie zna\u0142 trybu pracy zespo\u0142u, albo ten tryb nie by\u0142 odpowiednio okre\u015blony, dokona\u0142 pewnej zmiany, kt\u00f3ra wp\u0142yn\u0119\u0142a na serwer w taki spos\u00f3b, \u017ce stan przesta\u0142 by\u0107 poprawny. Bez DSC po powrocie do pracy mogliby\u015bmy by\u0107 zaskoczeni, \u017ce wyst\u0105pi\u0142y jakie\u015b nieoczekiwane zmiany. <strong>DSC dba o to, aby w takiej sytuacji \u015brodowisko ca\u0142y czas by\u0142o przywracane do stanu, w jakim je pozostawili\u015bmy i opisali\u015bmy<\/strong>. Je\u015bli skonfigurowa\u0142em serwer do konkretnego stanu, to ten stan ma by\u0107 utrzymany.<\/p>\n\n\n\n<p>\u017beby lepiej to zobrazowa\u0107 \u2013 za\u0142\u00f3\u017cmy, \u017ce na serwerze trzymamy jakie\u015b pliki konfiguracyjne w katalogu X, co zosta\u0142o zdefiniowane w konfiguracji DSC. Tworzy ona odpowiedni katalog i przenosi do niego poszczeg\u00f3lne pliki z wybranego \u017ar\u00f3d\u0142a zewn\u0119trznego. Kto\u015b zalogowa\u0142 si\u0119 na nasz serwer i nieumy\u015blnie ten katalog usun\u0105\u0142. DSC szybko wychwyci, \u017ce tego katalogu nie ma, i na nowo go odtworzy bez zak\u0142\u00f3cania pracy serwera.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sytuacjach-\">W jakich sytuacjach DSC nie zadzia\u0142a?<\/h2>\n\n\n\n<p>Wy\u017cej wspomnia\u0142em, \u017ce DSC nie zawsze pozwoli przywr\u00f3ci\u0107 odpowiedni stan. Podam prosty przyk\u0142ad. Powiedzmy, \u017ce w ramach dzia\u0142ania DSC chcemy zainstalowa\u0107 aplikacj\u0119. Aplikacja ta musi by\u0107 najpierw pobrana, ale kto\u015b na serwerze w firewallu zablokowa\u0142 ruch wychodz\u0105cy. W takiej sytuacji DSC nie poradzi sobie z tym zadaniem, bo \u201enie wie\u201d, \u017ce taka blokada powsta\u0142a. My otrzymamy informacj\u0119, \u017ce ten krok nie zosta\u0142 wykonany, co prawdopodobnie sprowokuje nas do przejrzenia log\u00f3w i trafienia na informacj\u0119, \u017ce nie uda\u0142o si\u0119 po\u0142\u0105czy\u0107 z danym adresem do pobrania pliku. Ostatecznie po g\u0142\u0119bszej analizie zorientujemy si\u0119, \u017ce ruch ten jest zablokowany, ale b\u0119dzie to wymaga\u0142o naszego zaanga\u017cowania. Jedyne, co DSC b\u0119dzie pr\u00f3bowa\u0107 robi\u0107, to pobra\u0107 plik z podanego adresu.<\/p>\n\n\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Desired-State-Configuration-\u2013-architektura\">Desired State Configuration \u2013 architektura<\/h2>\n\n\n\n<p>Powy\u017csze przyk\u0142ady w pewien spos\u00f3b obrazuj\u0105 ju\u017c, jak wygl\u0105da architektura DSC. Mo\u017cemy tu wyr\u00f3\u017cni\u0107 nast\u0119puj\u0105ce elementy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Us\u0142uga Desired State Configuration<\/strong><\/li>\n\n\n\n<li><strong>Zasoby (Powershell Gallery)<\/strong><\/li>\n\n\n\n<li><strong>Konfiguracja<\/strong><\/li>\n\n\n\n<li><strong>Nody (instancje wirtualnych maszyn \u2013 serwer\u00f3w)<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Wszystkie one wsp\u00f3\u0142pracuj\u0105 ze sob\u0105, tworz\u0105c sp\u00f3jn\u0105 ca\u0142o\u015b\u0107 \u2013 architektur\u0119 DSC. Je\u017celi chcieliby\u015bmy szczeg\u00f3\u0142owo om\u00f3wi\u0107 ten w\u0105tek, to nale\u017cy skupi\u0107 si\u0119 na dw\u00f3ch najwa\u017cniejszych modelach, kt\u00f3re spajaj\u0105 powy\u017csze, czyli Push oraz Pull.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Model Push<\/h3>\n\n\n\n<p>Jak sama nazwa wskazuje, model Push polega na \u201e<strong>wypychaniu<\/strong>\u201d \u2013 w tym przypadku wypychamy konfiguracje na nody. Model push jest to aktywna dzia\u0142alno\u015b\u0107 u\u017cytkownika w celu dodania konfiguracji na jednym lub <strong>wielu node\u2019ach \/ serwerach<\/strong>. W modelu tym nasze dzia\u0142anie skupia si\u0119 na skompilowaniu oraz wypchni\u0119ciu konfiguracji <strong>za pomoc\u0105 <strong>komend PowerShell<\/strong>. <\/strong>Ten model stosowany jest, gdy zale\u017cy nam na tym, \u017ceby wszystkie maszyny otrzyma\u0142y tak\u0105 sam\u0105 konfiguracj\u0119 w mo\u017cliwie jak najbardziej zbli\u017conym czasie. Wymaga on zatem odpowiedniego zaplanowania i wdro\u017cenia.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.04.27_graphic_1.png\" alt=\"Desired State Configuration\" class=\"wp-image-7693\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Model Pull<\/h3>\n\n\n\n<p>Model Pull polega natomiast na po\u0142\u0105czeniu maszyn z zewn\u0119trzn\u0105 us\u0142ug\u0105, gdzie zostaje im przypisana konfiguracja. Serwer Pull zawiera w tym przypadku wszystkie niezb\u0119dne konfiguracje oraz zasoby, wymagane do poprawnego rozmieszczenia konfiguracji na poszczeg\u00f3lnych node\u2019ach. Taka konfiguracja na serwerze Pull zostaje zaci\u0105gni\u0119ta wraz ze wszystkimi niezb\u0119dnymi zale\u017cno\u015bciami, a stan node\u2019a jest monitorowany z poziomu us\u0142ugi serwera Pull. Ka\u017cdy z node\u2019\u00f3w, kt\u00f3ry jest wpi\u0119ty do takiej us\u0142ugi, co pewien czas odpytuje serwer zgodnie z lokaln\u0105 konfiguracj\u0105.<\/p>\n\n\n\n<p>S\u0142u\u017cy do tego <strong>LCM (local configuration manager)<\/strong>, kt\u00f3ry dba o to, aby odpyta\u0107 serwer Pull, pobra\u0107 konfiguracj\u0119 i j\u0105 wykona\u0107. Dodatkowo, opr\u00f3cz samego odpytywania serwera Pull w interwa\u0142ach czasowych, LCM dba r\u00f3wnie\u017c o to, aby monitorowa\u0107 stan konfiguracji na bie\u017c\u0105cej maszynie (<strong>compliance check<\/strong>). Informuje nas o tym, czy wszystkie nasze maszyny poprawnie pobra\u0142y najnowsz\u0105 konfiguracj\u0119 i prawid\u0142owo j\u0105 wykona\u0142y. Stosowanie tego modelu jest szczeg\u00f3lnie przydatne, gdy cz\u0119\u015b\u0107 maszyn jest czasowo offline. Gdy tylko przejd\u0105 w tryb online, automatycznie pobior\u0105 i wykonaj\u0105 najnowsz\u0105 konfiguracj\u0119.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/blog_2023.04.27_graphic_2.png\" alt=\"Desired State Configuration\" class=\"wp-image-7694\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Jakie s\u0105 znane rodzaje us\u0142ug obs\u0142uguj\u0105cych metod\u0119 Pull? Na chwil\u0119 obecn\u0105 s\u0105 to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Azure Automation Desired State Configuration<\/strong><\/li>\n\n\n\n<li><strong>Us\u0142uga Pull w systemie Windows Server<\/strong><\/li>\n\n\n\n<li><strong>DSC SMB Pull server<\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"esired-State-Configuration\">Microsoft Azure Automation Desired State Configuration<\/h2>\n\n\n\n<p>W czasach, gdy chmura jeszcze raczkowa\u0142a, implementacja polega\u0142a na pisaniu odpowiednich skrypt\u00f3w i konfigurowaniu w\u0142asnego serwera do zarz\u0105dzania nimi. Dzi\u015b Microsoft w pe\u0142ni ju\u017c wspiera to rozwi\u0105zanie i zintegrowa\u0142 je ze swoj\u0105 chmur\u0105, co jest wygodne i przek\u0142ada si\u0119 na opisane przeze mnie korzy\u015bci. Niedawno podj\u0119ta zosta\u0142a decyzja, \u017ce us\u0142uga DSC Pull servera w systemach Windows Server przestanie by\u0107 rozwijana, a wszelkie prace zostan\u0105 przekierowane na us\u0142ug\u0119 na platformie Azure.<\/p>\n\n\n\n<p><strong>Azure Automation Desired State Configuration jest dedykowan\u0105 us\u0142ug\u0105 oferowan\u0105 i zalecan\u0105 przez Microsoft w wi\u0119kszo\u015bci scenariuszy<\/strong>. Dzi\u0119ki niej jeste\u015bmy w stanie wdro\u017cy\u0107 automatyzacj\u0119 konfiguracji i zarz\u0105dzania<strong> serwerami Windows i Linux<\/strong>. DSC umo\u017cliwia u\u017cytkownikom definiowanie ustawie\u0144, tzw. konfiguracji, w skrypcie PowerShell lub innych j\u0119zykach, takich jak <strong>JSON<\/strong> lub <strong>MOF<\/strong>, kt\u00f3re reprezentuj\u0105 wymagany stan zasob\u00f3w w spos\u00f3b deklaratywny. Po zdefiniowaniu tych konfiguracji mog\u0105 by\u0107 one przypisane do node\u2019\u00f3w.<\/p>\n\n\n\n<p>Azure Automation DSC oferuje wiele funkcji u\u0142atwiaj\u0105cych zarz\u0105dzanie konfiguracj\u0105, w tym:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Zarz\u0105dzanie konfiguracj\u0105<\/strong><\/li>\n\n\n\n<li><strong>Raportowanie stanu oraz poprawno\u015bci na poszczeg\u00f3lnych instancjach (node\u2019ach)<\/strong><\/li>\n\n\n\n<li><strong>Raporty, kt\u00f3re umo\u017cliwiaj\u0105 u\u017cytkownikom \u015bledzenie konfiguracji swoich zasob\u00f3w<\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Podsumowanie\">Podsumowanie<\/h2>\n\n\n\n<p>Desired State Configuration jest pot\u0119\u017cnym narz\u0119dziem, kt\u00f3re daje nam mo\u017cliwo\u015b\u0107 zarz\u0105dzania konfiguracjami (<strong>Configuration Management<\/strong>) na serwerach. Pozwala zminimalizowa\u0107 z\u0142o\u017cono\u015b\u0107 zada\u0144 zwi\u0105zanych z zarz\u0105dzaniem konfiguracj\u0105, zwi\u0119kszy\u0107 niezawodno\u015b\u0107 i zapewni\u0107 zgodno\u015b\u0107 z zasadami bezpiecze\u0144stwa wedle potrzeb.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gdy konfigurujemy maszyny wirtualne, mo\u017cemy wcze\u015bniej stworzy\u0107 ich obraz albo\u2026 Wykorzysta\u0107 mo\u017cliwo\u015bci, jakie daje Desired State Configuration. Czym jest DSC? Jakie ma zalety? Dowiedz si\u0119, w jakiej sytuacji warto wykorzysta\u0107 us\u0142ugi takie jak Microsoft Azure Automation DSC.\u202f<\/p>\n","protected":false},"author":191,"featured_media":30941,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":99,"footnotes":""},"categories":[1,582],"tags":[576],"offering":[516],"class_list":["post-30933","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-technologie","tag-cloud-engineering","offering-cloud-engineering"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30933","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/users\/191"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=30933"}],"version-history":[{"count":2,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30933\/revisions"}],"predecessor-version":[{"id":32956,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/30933\/revisions\/32956"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/30941"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=30933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=30933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=30933"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=30933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}