W pierwszej części pokazałem jak definiować listę oraz w jaki sposób odczytywać pojedyncze, lub całe grupy elementów listy. Operacji na listach i jej elementach jest nieco więcej. Raz utworzona lista nie jest obiektem stałym i można zarówno modyfikować wartość każdego z jej elementów jak i dodawać oraz usuwać poszczególne elementy. Listy w Python pozwalają na przeprowadzenie tych operacji w prosty sposób. W tym artykule zaprezentuję Ci jak to zrobić.
DevNet Associate
Czytaj dalej
Enumerate() i przeglądanie elementów listy
Wykonując operacje na listach musimy jasno sprecyzować, do którego je elementu chcemy uzyskać dostęp. Dokonujemy tego za pomocą indeksów wskazując wprost interesujący nas element listy. Często jednak dane zapisane na liście przetwarzamy w pętli. Pokażę Ci w jaki sposób najprościej w pętli odczytać kolejne wartości elementów listy oraz ekstremalnie przydatny sposób wykorzystania funkcji enumerate()
do znalezienia numeru indeksu listy, pod którym poszukiwana wartość została zapisana.
Przez Piotr Wojciechowski, temu
DevNet Associate
Czytaj dalej
Przestał budować się obraz kontenera
Częścią obrazów kontenerów, które używam w swoich środowiskach sieciowych zarządzam samodzielnie. Ich cykliczną budową zajmuje się Jenkins. Także kontenery z obrazem samego Jenkinsa są budowane w ten sposób. 10 sierpnia coś się jednak stało. Mój skrypt przestał działać. W efekcie tego przestał budować się obraz kontenera. Wszystko ze względu na zmiany w pakietach z językiem Python w dystrybucji Alpine Linux. Jeżeli budujesz obrazy w oparciu o tą właśnie dystrybucję, to w tym artykule znajdziesz rozwiązanie.
Przez Piotr Wojciechowski, temu
DevNet Associate
Czytaj dalej
Zakładamy projekt na GitHub i dodajemy go do pyCharm
Nadszedł ten moment, w którym, aby rozpocząć pracę nad moim projektem muszę go założyć. A dokładniej stworzyć dla niego repozytorium kodu źródłowego. CMLNetKit, tak nazwałem swój projekt, będzie publicznie dostępny na platformie GitHub, aby każda zainteresowana osoba mogła z niego korzystać. Jako środowisko do pracy nad projektem będę używał PyCharm, o którym pisałem już wcześniej. Przeprowadzę Cię teraz przez wszystkie kroki niezbędne do utworzenia nowego projektu i stworzenia dla niego środowiska w PyCharm.
Przez Piotr Wojciechowski, temu
DevNet Associate
Czytaj dalej
Namespace i podłączenie gniazda Dockera do kontenera
Bezpieczne urządzenie w domyślnej konfiguracji to takie wyłączone urządzenie. A najlepiej także odłączone od prądu. Bezpieczna aplikacja to wyłączona aplikacja, a najlepiej odinstalowana. Tak, trochę za dużo chyba ostatnio z “bezpiecznikami” rozmawiam… Niemniej tych zasad nie uda nam się spełniać w systemach IT, musimy zatem zadbać o odpowiednie mechanizmy bezpieczeństwa. Nie inaczej jest z Dockerem. W poprzednim swoim artykule zaznaczałem, że Docker w swojej domyślnej instalacji może się co najwyżej nadawać do domowego odizolowanego laboratorium. Nawet w systemach testowych czy developerskich powinniśmy wdrożyć mechanizm zwany namespace. Jego aktywacja powoduje jednak problemy z dostępem do gniazda (socket), służącego do lokalnej komunikacji z demonem Dockera.
Przez Piotr Wojciechowski, temu
Ansible
Czytaj dalej
Backup konfiguracji routera za pomocą Ansible
Kolejne dni pracy z Cisco Modeling Labs 2.0. Przygotowywałem się do pierwszego wykorzystania go w większej topologii i scenariuszu w ramach webinaru. Ale tym razem nie będę pisał o CML 2.0. Przygotowując scenariusza laba chciałem mieć zapisane wzorcowe konfiguracje urządzeń z kolejnych etapów. Niestety CML 2.0 nie pozwala na łatwe zgranie konfiguracji z urządzeń biorących udział w symulacji. Napisanie playbooka wykonującego backup konfiguracji routera za pomocą Ansible jest przecież bardzo proste.
Przez Piotr Wojciechowski, temu
DevNet Associate
Czytaj dalej
Dokumentacja playbooków Ansible
Każdy programista wie, że umieszczanie komentarzy w kodzie źródłowym aplikacji jest nie tylko elementem dobrej praktyki, ale także często wymogiem. Często jednak nie ma na to czas lub jest go zbyt mało. W domowych czy firmowych labach często w ogóle nie zawracamy sobie tym głowy. Jednak nawet gdy piszemy aplikację lub playbook tylko dla siebie warto zadbać o choćby minimalną jego dokumentację, a komentarze zawarte w kodzie źródłowym przydadzą się, jeżeli będziemy chcieli go wykorzystać potem w innym projekcie.
Przez Piotr Wojciechowski, temu
DevNet Associate
Czytaj dalej
Po co nam JSON Schema
W poprzednim artykule pokrótce pokazałem, czym są, jak wyglądają i gdzie mają zastosowanie struktury danych JSON, Ponieważ programiści dowolnie mogą projektować strukturę obiektów, to musiał powstać standard pozwalający na ich dokumentowanie, czy weryfikację. Sam standard struktury nie przewiduje nawet możliwości dodania komentarzy wewnątrz obiektu. Poznajmy więc JSON Schema.
Przez Piotr Wojciechowski, temu
DevNet Associate
Czytaj dalej
Poznaj JSON-a
Konfigurując mechanizmy automatyzujące codzienne czynności, bardzo szybko spotkasz się z koniecznością przekazywania danych pomiędzy modułami, pomiędzy aplikacjami, czy pomiędzy Twoją aplikacją a interfejsem API. Zmienne systemu operacyjnego do takich zadań nie wystarczą, dlatego musisz skorzystać z jednej z dostępnych struktur danych. Znajomość dwóch z nich jest wręcz niezbędna – są to XML i JSON. Osobiście preferuję korzystanie z tego drugiego, gdzie tylko jest to możliwe. Przede wszystkim ze względu na lepszą czytelność informacji i prostotę użycia.
Przez Piotr Wojciechowski, temu
Ansible
Czytaj dalej
Instalacja Dockera za pomocą Ansible
Ostatni artykuł, w którym pokazałem jak skonfigurować API Dockera za pomocą playbooka Ansible zaowocował przysłanym mi pytaniem, czy równie prosto da się zautomatyzować instalację samego Dockera. Oczywiście że się da! Pierwsze moduły do Ansible miały na celu ułatwić zarządzanie pakietami i konfigurację systemów typu Linux. Pokarzę Ci teraz fragmenty z mojego playbooka (poszczególne zadania), którego używam do instalacji Dockera na RaspberryPi i dystrybucji Raspbian. Instalacja Dockera za pomocą Ansible składa się jedynie z kilku zadań.
Przez Piotr Wojciechowski, temu