Tag Archives: computers

ios-xe port channels & switchports

Am avut prin August un mic proiect sa bag niste Layer 2 peste balta la un client. In general, daca nu am constrangeri, folosesc Juniper pe switch-uri managed L2/L3 din motive de obisnuinta, familiaritate etc.

Anul asta, din cauza de pandemie si timpi de livrare mari, peste 4 luni in medie, am pus niste Cisco Catalyst cu IOS-XE.

Mno, pentru redundanta & stuff, sunt mare fan bundle-uri de X x 1GE sau X x 10GE (in functie de nevoi & stuff).

Pe Juniper, la modul cel mai simplu, un port channel se cheama o interfata ae (aggregated ethernet) si se configureaza in doi pasi.

Prima oara ii zici la interfata fizica din ce port-channel face parte:

ge-0/0/0 {
    description "to xyz vmnic0";
    ether-options {
        802.3ad ae1;
    }
}

ge-1/0/0 {
    description "to xyz vmnic1";
    ether-options {
        802.3ad ae1;
    }
}

Si dupa configurezi si interfata de port channel:

description "to xyz";
mtu 9216;
unit 0 {
    family ethernet-switching {
        interface-mode trunk;
        vlan {
            members [ v101, v121 ];
        }
    }
}

Easy peasy lemon squeezy.

Cu Cisco nu prea am avut treaba in ultimii ani, si am zis ca hei, trebuie sa fie la fel din ce mai tineam eu minte de and era la moda sa fac PAgP pe IOS clasic.

E, e cam la fel si pe IOS-XE. La nivel de interfata ii zici:

interface TenGigabitEthernet1/1/3
 channel-protocol lacp
 channel-group 1 mode active
 lacp rate fast
!
interface TenGigabitEthernet1/1/4
 channel-protocol lacp
 channel-group 1 mode active
 lacp rate fast
!

Si dupa configurezi interfata PortChannel1

interface Port-channel1
 switchport trunk allowed vlan 101-121
 switchport mode trunk
!

E, si te astepti ca la un “sh ru” sa vezi prin configuratie fix acelasi lucru.

Dar nu, IOS-XE e cu “surprise motherfucker”, si zice asa:

interface Port-channel1
 switchport trunk allowed vlan 101-121
 switchport mode trunk
!
interface TenGigabitEthernet1/1/3
 switchport trunk allowed vlan 101-121
 switchport mode trunk
 channel-protocol lacp
 channel-group 1 mode active
 lacp rate fast
!
interface TenGigabitEthernet1/1/4
 switchport trunk allowed vlan 101-121
 switchport mode trunk
 channel-protocol lacp
 channel-group 1 mode active
 lacp rate fast
!

Cand am vazut asta, zic ma oi fi fost io obosit si am scris gresit, si am bagat configuratia si la interfata si la port channel. Si m-am mancat in cur sa “repar” de la distanta treaba asta. Si am sters configuratie de switchport si trunk de pe te/1/1/3. N-a fost chiar cea mai buna idee a mea.

Dupa ce am reparat printr-o sesiune de TeamViewer problema, in sensul ca am facut de la zero toata configuratie de port channel, m-am dus sa ma culc ca se facuse tarziu la mine.

Fast forward vreo 2-3 saptamani, iar a trebuit sa umblu un pic la switch-uri sa mai adaug ceva VLAN-uri, si bam, iar configuratie de switchport pe interfetele din port chanel. Si eram, ba da am sters si-am pus la loc. Ce mortii ma-sii se intampla. Si atunci mi s-a aprins un pic beculetu, si zic ia sa vad daca adaug un VLAN pe interfata de port channel, se pune si in configuratie la interfetele care formeaza port channel-ul?

Raspunsul e da. Si uite asa am invatat eu ca IOS-XE mirroreaza configuratia de pe PortChanel pe interfetele prinse in port chanel.

Nu e mare inginerie treaba asta cu un port channel intre 2 switch-uri, dar lucrurile par complicate cand nu prea ai parte de experienta pe niste echipamente si lucrezi cu ele doar din joi in pasti. Exista si un termen sa zicem stiintific pentru asta: skill fade. Si problema e ca ti se pare ca stii, da de fapt nu prea :(

nereus

In ultima vreme, pe unde am apucat, am schimbat certificatele digitale folosite cu cele emise de Let’s Encrypt. Mai ales ca certbot face minuni pus in cron.

In materie de client-to-site VPN, in ultimii ani am tot bagat PaloAlto ca au un client dragut, configurare este usor de facut si merge si pe IPv6 cum trebuie, inclusiv sa aloce adrese de IPv6 pe tunel.

Problema cu asta e ca e un pic obositor la 3 luni sa uploadez de mana certificat nou, ca automat nu stie. Si pe langa asta, are o cretinatate ca vrea parola la cheia privata daca o uploadez si pe aia o data cu certificatul. Si cum certbot nu pune parole la cheile private, ar trebui sa ma dau un pic si cu OpenSSL sa ii pun parola la cheie, s-o concatenez cu certificatul si dupa sa uploadez totul.

Pe langa asta, eu tot cochetez asa sporadic cu programarea, ca e cam complicat sa faci si DevOps fara Dev :)) Ca ma mai scap sa fac si d’astea.

Anyways, long story short, zilele astea am butonat la un mic script/app (ca toate’s app-uri acum) care automatizeaza distractia asta cu Let’s Encrypt si PAN.

Asa a aparut Nereus. Scris in Python, cat se poate de curat si cat am duce pe mine acum capul sa scriu cod curat.

google cloud support

Una din corporatiile pe unde ma mai duc la produs are chestii in GCP. Si pe acolo am facut si eu un proiect sa tin cateva VM-uri, nimic complicat. VM-urile alea trebuie sa vorbeasca cu niste componente care sunt intr-una din locatiile clientului. Pentru asta am facut un tunel IPSec intre GCP si locatie.

Asta se intampla la inceputul lui August. Acu vreo saptamana, intr-o luni, ma suna omenii din locatia respectiva ca “nu mai merge ping-ul din google la ei in locatie”. Ma uit si eu, si chiar nu mai exista conectivitate. Ma uit pe acolo prin dashboard-ul de la GCP, toate verzi. Ma uit la mine, toate verzi.

Au astia la GCP un “Connectivity tester” si alea zicea ca poa sa dea ping. Nu chiar pana la capat, da a dedus el ca ar trebui sa mearga. Nu vroia ping-ul ala sa mearga neam. Am sapat pe acolo prin loguri pana mi-au sarit mucii, nimic util. Zic bine, hai sa pun tcpdump sa vad ce si cum.

Dau ping din locatie intr-un VM din GCP, ajung pachetele la ala, raspunde la ele, la mine in locatia ajungea fix o pula. M-am scremut un pic sa fac o captura de pachete la mine, ca firewall-urile astea enterprise sunt la fel de utile ca igrasia cand ai de debugat, ca abia poti vedea una alta. Nimic util, nici un pachet.

Zic trec la planul B, imi fac un Linux cu Strongswan si vad pe ala ce se intampla, ca macar pot sa-l debughez calumea. Mai fac repede un tunel cu GCP, se ridica imediat, dau ping, la fel, ajungeau cum trebuie pana acolo, cand sa se intoarca… se intorceau prin gura.

Ma zic, nu e de la mine, hai sa vad daca e de la astia. Ca na, se mai strica si cloud-ul din cand in cand si zic poate pot sa-mi zica si mie daca din “Google Cloud VPN” ies pachetele cum trebuie, ca era pe traseu singura necunoscuta.

Dau acolo $100 sa pot sa deschid caz, fac cazul cu toate astea si in vreo doua-trei ore asa imi raspunde un baiat ca s-a uitat el prin loguri si problema e ca e de la mine, ca nu stie VPN-ul de la mine sa faca tunele ESP, ca zice clar in loguri ca “ESP_TFC_PADDING_NOT_SUPPORTED” si ca sa il configurez sa faca tunele cum trebuie. Si ii zic, bosulache, ia fii atent aici schema: pleaca pachetele de la mine, ajung la voi, VM-ul meu raspunde la ele, dar de la voi ciuciu, deci nu ca nu fac eu tunelul cum trebuie. Si i-am explicat si ce cacat e TFC, sa nu mai aibe idei pe langa daca mai vede asta vreodata. Asa mult imi displac oamenii astia de la suport pe care-i doare in pula de problema ta si cauta repede “error” in loguri ca poate, poate e de la tine ceva si nu trebuie ei sa faca nimic.

Aproape o zi liniste, gen vreo 21-22h de liniste de puteai sa auzi pachetele pe cablu. Mai bag o fisa si upgradez la $250 sa pot sa apas pe butonul de escalate, in ideea ca o sa ma bage cineva in seama. Intr-o ora-doua asa imi raspunde iar baiatul asta si zice ca da, interesant, dar poate e din cauza ca am firewall pus si de aia nu merge. Ii trimit screenshot cu “n-am nimic pus”, si dupa mai raspunde tot asa un pic cu intarziere ca este posibil sa necesite investigatii amanuntite treaba asta si sa completez un template de sloturi disponibile sa facem un call cu screen sharing sa se uite si aia sa vada ce si cum.

Ne intelegem la un slot orar pe la 10 noaptea la mine si ma paseaza la o alta echipa. Se face ora, intra doi in call si le arat exact ce si cum, fix cat puteam sa vad eu loguri in GCP acolo. O ora jumate si dupa ce am trecut cred ca de 4-5 ori prin fix aceleasi meniuri, loguri, pasi. M-au intrebat si astia daca n-am firewall, le-am aratat ca nici macar iptables nu aveam pe una din masini. Astia foarte “thorough” asa, au vrut sa vada de cel putin vreo 2-3 ori daca chiar n-am firewall pe masini. Si intr-un final mi-au zis ca ei n-au acces asa sa vada ce se intampla cu VPN gateway-ul lor si daca scoate pachete cum trebuie.

Dimineata imi dau mail ca “fii antena, tre sa dezactivezi VPC mode auto, ca de aia nu-ti merge ca ai facut VPN-ul gresit”. Zic babaieti, mergea de vreo luna jumate pana cand brusc n-a mai mers. Si a doua la mana, mai am un VPN facut tot asa, fix in proiectul asta care ala n-a sughitat deloc. Nu mai bine reparati voi ce-ati stricat si sa faceti sa mearga lucrurile asa cum erau inainte?

Si ce sa vezi, alt mesaj cu “Nu, la noi e ok, daca schimbi cum ti-am zis o sa mearga, ca asa cum e acum nu are cum sa mearga”. Le mai dau o data screenshot-ul ala cu alt VPN mergand, l-au ignorat cu succes si au tinut-o pe a lor.

Pentru ca statea productia, am facut ce vroiau ei si a luat-o. Doar, doar sa nu se uite la ei sa vada ce sloboz au stricat si sa repare.

Din tot ce am investigat si asa, parea destul de clar ca era o problema de rutare pe undeva prin burta lu’ GCP, ca pachetele ajungeau teoretic unde trebuie, doar ca nu erau criptate mai departe si trimise la mine.

Am trecut in 3 zile prin 4 oameni, unu’ cu cea mai mare durere posibila in pula, altii doi un fel de Lolek si Bolek, ei nu stiau, da erau convinsi ca nu poa’ sa fie de la ei, si un al treilea la care am tipat ca si asta era “noi nu gresim”. Doar, doar sa nu dea un tcpdump la ei sa vada daca ies pachetele cum trebuie sau daca nu ies, sa vada de ce nu ies.

M-au umplut de spume, ca in primul rand i-a durut fix in cur de problema, probabil daca nu dadeam mai multi bani sa pot apasa butonul de escalate raspundea baiatul ala cand ii mai venea lui cheful, probabil peste cateva zile dupa ce-si facea siesta. In al doilea rand au facut tot posibilul sa nu investigheze ceva pe partea lor. In al treilea rand ca mi-au dat un workaround pe post de solutie, desi nu cred ca a fost vreun mesaj in care sa nu le amintesc ca “a mers si brusc n-a mai mers”. Si in al patrulea rand pentru “stonewalling” si faptul ca desi le aratam ca merge ce ziceau ei ca nu merge, insistatau ca nu are cum – ba cu poza in fata gen, ei erau cu “nu merge, ti se pare”.

Ca si cu multe altele, e bine sa n-ai probleme cu cloud-ul, ca daca ai, o sugi cu gratie ca nu-i pasa nimanui de la suport sa-ti rezolve problema.

automation

Cateodata mai am si zile din alea in care chiar trebuie sa muncesc, nu doar sa am opinii despre ce ar trebui altii sa faca. Da stiu, maxim de trist, da’ cateodata mai trag paiu’ scurt…

Cand am mult de lucru, mai ales pe implementari, incerc s-o dau pe automatizare cat se poate de mult din vreo doua motive mari si late:

  • sa nu-mi pierd mintile
  • sa nu gresesc prea mult ca mi-am pierdut mintile

Pentru asta ma dau in general cu Python ca mi-e la indemana si so far mi se pare tata’lor la structuri de date. Adica pentru ca pentru un fisier de intrare de genul:

smc3r01-t1,11.12.13.14,tf
snc4l01-t1,15.16.17.18,t
snt3b02-e1,19.20.21.22,f
tmc5o04-c1,23.24.25.26,tf

pot sa scot o structura de date de tip key/value intr-o linie de cod (bine, 3, da’ oricum):

#!/usr/bin/python3
import csv

with open('t.csv', mode='r') as t_infile:
  reader = csv.reader(t_infile)
  t_nodes = {rows[0]: [rows[1], rows[2]] for rows in reader}

Si dupa aia sa fac chestii cu t_nodes gen:

for n in t_nodes:
  print(n,t_nodes[n][0],t_nodes[n][1])

Pentru ca de fapt t_nodes arata de fapt asa:

{'smc3r01-t1': ['11.12.13.14', 'tf'],'snc4l01-t1': ['15.16.17.18', 't'], 'snt3b02-e1': ['19.20.21.22', 'f'], 'tmc5o04-c1': ['23.24.25.26', 'tf']}

Pai sa ai un key/value store (sau dictionary cum ii zice de fapt) in 3 linii de cod in care valorile sa fie o lista, genius. Sa nu mai zic ca poti avea un dictionare de dictionare pentru cand lucrurile chiar sunt complicate.

Exemplul asta l-am dat ca ca mi-a dat clientul un Excel cu cateva mii de linii si un alt Excel cu doar cateva sute de linii si mi-a zis sa fac sa fie bine :)

Varianta aia indiana era sa zic ca mai am nevoie de cativa oameni care sa utilizeze un GUI, unde dureaza minim 30-40 de secunde de dat click-uri, introdus date si validat sumar pentru fiecare linie din aia din fisier, si asta dupa ce intri intr-un ritm cat de cat decent de lucru.

Varianta mea dureaza 2 secunde pe linie ca e API-ul un pic incet. Si nici nu face greseli. Scriptul meu adica, ca API-ul nu e scris de mine sa fie perfect =)))

Alteori lucrurile sunt mai complicate decat a citi stuff dintr-un CSV, dar alea’s povesti pentru alte alta data.

O alta chestie de vreau sa zic, ca tot am adus vorba de Python, ala de a inventat f” string sa aiba noroc de-un harem de tinere si sa dea la buci pana o sa-i cada pula, ca e absolut geniala functionalitatea asta.

def mkgeneric(what, element):
  if element == '':
      return f' {what} "Any"'
  if len(element.split(',')) == 1:
      return f' {what} "{element.strip()}"'
  if len(element.split(',')) > 1:
      element = element.split(',')
      el = []
      for i in range(len(element)):
          el.append(f'{what}.{i+1} "{element[i].strip()}"')
      return ' '.join(el)

Fara asta scriam la .format() de-mi ieseau ochii, asa il bag direct pe unde trebuie fara nici o treaba, si asta e un exemplu simplu…

Tot pentru automatizare, dar mai mult pentru prototipare (da’ gay mai e cuvantul asta in romana) folosesc Postman, care este genial – mai ales ca poate sa iti zica si cam cum ar trebui sa arate codul intr-un limbaj de programare, gen Python, pentru ce incerci sa faci.


Pe langa treaba de mai sus, cu Postman poti face super debugging cand vrei sa vorbesti cu un API. M-a scos de cateva ori cand vorbeam cu API-uri necunoscute si cu documentatie scrisa de autisti…

Si e bun si cand iti faci singur API si vrei sa-l validezi ca si merge :))

Long story short, lucrurile devin un pic mai usoare daca le faci programatic.

force multiplication

Ma screm la postul asta de vreo luna si ceva. Nu ca ar fi greu, da’ nu pleacau cuvintele din degete spre taste sa ajunga pe ecran.

La fizica e un capitol in care te invata de scripeti si parghii, gen cum sa depui mai putin efort ca sa obtii ceva. Un sistem destept de scripeti sau parghii iti dau posibilitatea sa obtii foarte mult depunand cat mai putin efort.

Cateodata e filosofica asa fizica asta. Si nu, nu baui nimic de scriu asta. M-am mai desteptat un pic pe masura ce am mai imbatranit.

Din comunism am ramas cu punga cu pungi si sertarul in care pui chestii pe principiul ca niciodata nu stii cand iti trebuie o tubulara e 13 sudata intr-o cheie de 16.

Eu am dat sertarul de tubulare pe sertarul cu cunostinte. Punga cu pungi inca e acolo, si la modul ala de “cum recunosti un roman in strainatate”, am punga cu pungi in hotelul unde stau de ceva vreme. Pe principiul ca poti sa scoti romanul din romania, da’ nu poti sa scoti romania din roman.

Dar sa revenim la sertar. Scriam pe la inceputul lui 2019 despre lucrurile de baza. Si nu s-a schimbat nimic de atunci, doar ca am realizat ca nu toate problemele le poti rezolva cu cheia de 13, cateodata trebuie s-o prinzi de aia de 22 sa poti aplica mai multa forta sa insurubezi cum trebuie ceva sau sa desurubezi ceva strans bine. La fel cum cum 2-3 scripeti si un pic de sfoara face anumite lucruri sa fie mai usoare de cat sunt.

Anyways, cu cat ai mai multe cunostinte din cat mai multe domenii sau subdomenii, cu atat poti sa faci mai repede inferinte si sa iti dai seama cum poti rezolva o problema complexa. Asa cum o forta poti s-o desparti in vectorii componenti, asa si o problema complexa o desparti in problemele mai mici si le rezolvi pe toate alea si cand o rezolvi pe ultima mica ai rezolvat si problema mare :) Gen ca atunci cand rezolvi un sistem de necunoscute multiple la algebra.

Cumva ce incerc sa zic e ca cu cat stii mai mult, cu atat poti sa-ti faci treaba mai bine si fara sa ai nevoie de prea mult ajutor din exterior. Problema e ca toata distractia asta nu scaleaza nici vertical si nici orizontal, adica nici nu pot tasta mai repde si nici nu ma pot clona.

Mi-a venit sa scriu asta cumva legat de un proiect in care m-a mancat in cur anul trecut sa ma bag unde toata lumea si-o arde foarte enterprise si corporatist, unde sunt echipe si echipe care stiu doar anumite lucruri si nu e treaba lor sa stie si altceva si gen sunt singurul care nu are nevoie de nimic – independent si autonom ca ungurii, si mai am timp sa le explic si la altii una alta, ca specializarile astea nasc monstri si monstrii cand se imperecheaza nasc nu neparat fotomodele… ca sa termin asa asa pe un ton filosofic subtil.

Pe scurt, cu cat stii mai multe, cu atat lucrurile devin mai usoare si mai simple si au mai multa logica ;)

sunburst

Niste unii, pe nume SolarWinds si-au furat-o intr-un mare fel: niste oameni si-au adaugat niste cod nu tocmai prietenos in directoarele cu surse si cand astia au dat build, au dat la clienti si niste malware sa aiba. Ca doar la cati bani costa produsele astora, merita lumea si un pic de bonus. Din toata distractia asta pot sa trag cateva concluzii super rapide:

  • pula proces de code review la aia, probbil scriu cod in notepad pe share-uri de windows sau ceva
  • pula merge request-uri si alte procese din astea minime de bun simt. oare or folosi vreun soft de version control sau e un share undeva si au directoare cu “final_final_version_1_really_final_2_final”?
  • daca se termina “build”-ul il impacheteaza si-l dau la clienti. Cam cum fac toti astia ultimii ani cu codul: if it builds, it ships.

Printre aia de si-au furat-o sunt si FireEye, cu ale caror produse m-am dat si eu si fac o treaba buna sa analizeze malware si sa zica ce si cum. Mi se pare ironica treaba asta, ca astia de la FireEye erau pe cai mari cum cautau ei chinezi cu binoclul pe google maps si scriau zeci si sute de pagini despre APT-uri si alte minuni si acu si-au luat-o intr-un mare fel. Din punctul meu de vedere meritau sa si-o ia si mai grav pentru simplu motiv ca au uitat regula numarul unu din interne: “oricat de jmecher te crezi, tot timpul o sa fie unul mai jmecher ca tine”. Asa e cand te apropii prea tare de soare, o sugi.

Microsoft a sarit de cur in sus ca vai, dar nu se face asa ceva, spionam, spionam, dar ceste este cu atat de mult “collateral damage” si alte abureli din astea. Microsoft care sunt aia cei mai vocali cand vine vorba de publicarea de vulnerabilitati, ca ei vor ca inainte sa le zici direct lor ca scriu cod prost si sa aiba timp sa puna niste scotch pe ici pe colo si abia dupa nustiucat luni in functie de cum au ei chef ca sa nu se faca de cacat, sa scoate un update de Windows sau de ce produse mai au ei, si abia dupa aia sa faci publica vulnerabilitatea, ca asa este “responsabil”. La fel si astia, si-o ard prost ca sa ascunda faptul ca scriu cod cu picioarele.

Mno, s-o suga toti astia de zic ca sunt cu security da’ ii pisa altii in freza de nu se vad.

uptime

Asta e ultima masina intr-un mediu care incet incet se muta in cloud si zisei sa-i fac o poza, ca sigur o sa uit sa-i mai fac una cand o sa-i dau “Shut down” pentru ultima oara.

Windows 7 uptime

Sa mai zica lumea ca nu a reusit MS sa faca un Windows care sa nu crape :))

Install & boot time

Folosit numai prin RDP pentru lucruri care n-au echivalent pe MacOS.

Ma uitam acu’ la System Boot Time si ma gandeam oare cu ce ocazie i-am dat atunci in Decembrie un reboot.

elasticsearch fun

Elasticsearch asta e misto sa pui chestii in el si dupa aia sa le cauti si sa le analizezi.

Mai putin distractiv e cand de la o versiune la alta nu merg lucruri si in documentatia aia a lor care e scrisa de autisti nu gasesti nimic util.

Pe undeva pe la 6.8 sau 7.0, au renuntat la ideea de a face un index pe zi. Cazul cel mai comun e cand scrie Logstash in el si indecsii se chemau logstash-2019.04.01, logstash-2019.04.02 si asa mai departe.

E, au zis ei ca nu mai e modern sa folosesti curator sa stergi indecsii vechi si l-au invatat pe Elasticsearch sa faca asta. Si nu mai e chiar ok sa ai indecsi dupa data, ci sa ii ai dupa logstash-0001, logstash-0002 si tot asa. Si Logstash sa scrie in indexul numit logstash care e de fapt un alias la logstash-xxxx, care se roteste dupa “rollover policy” – policy care poate fi setat la numar de documente, secunde (gen cat de batran e indexul) sau marime.

Pana aici, nici o problema. Problema apare cand vrei sa pui niste setari mai aparte pe index, cum ar fi numarul maxim de campuri ce pot fi mapate intr-un index. Implicit vine cu 1000 de campuri, care de fapt sunt 1002, da’ nu e important ca nici eu nu ma pricep la matematica.

“Inainte”, dupa ce faceai primul index, ii ziceai asa:

~$ curl -XPUT 'localhost:9200/logstash/_settings' -H 'Content-Type: application/json' -d'{"index":{"mapping":{"total_fields":{"limit":"2000"}}}}'

Si acum poti sa-i zici la fel, da ce sa vezi, uita de treaba asta cand roteste indexul si aplica setarile implicite. Si cum ziceam, documenatie scrisa de autisti, ca nu zice nicaeri cum sloboz sa-l faci sa fie ca inainte.

Azi, dupa ce mi-am futut intermitent creierii cu asta am gasit cum se rezolva: trebuie modificate setarile de pe template la index cam asa:

~$ curl -XPUT localhost:9200/_template/logstash -H 'Content-Type: application/json' -d '{"index_patterns":["logstash-*"],"settings":{"index":{"mapping.total_fields.limit":"2000"}}}'

Care mapping.total.fields.limit “inainte” era un parametru prin elasticsearch.yml, dar daca il pui acum, crapa ca zice ca nu mai e OK parametrul.

Distractia asta a durat super mult timp pana acum gasit termenii pe care sa-i caut pe internet sa ma duca intr-o directie cat de cat ok, si dupa a durat mai putin pana am nascut un JSON care sa fie acceptat de Elasticsearch.

Long story short:

~$ curl -X GET "localhost:9200/_template/logstash?pretty"
 {
   "logstash" : {
     "order" : 0,
     "index_patterns" : [
       "logstash-*"
     ],
     "settings" : {
       "index" : {
         "mapping" : {
           "total_fields" : {
             "limit" : "2000"
           }
         }
       }
     },
     "mappings" : { },
     "aliases" : { }
   }
 }

Da, cand n-ai de lucru, iti dau upgrade-urile de lucru…

unele zile…

Saptamana asta dupa ce am terminat de instalat si configurat un ESXi offline si am pus pe el un server de DHCP a venit vremea sa-l dau in productie sa inlocuiasca actualul server de DHCP. Easy peasy. Scoti cablul de la ala vechi din switch si il pui pe ala nou si gata.

Well… ieri m-am invartit ca un coi intr-o caldare toata ziua pentru ca dupa ce puneam serverul nou in switch, nu mergea DHCP-ul. Cu laptop si cablu direct infipt in el, mergea cum trebuie. Prin switch pula.

Am avut o zi din aia in care am avut un mica criza existentiala despre cunostintele mele de retelistica si Layer2 in special. M-am uitat in vSwitch-ul de pe ESXI mai atent decat m-am uitat vreodata la un switch virtual. La fel si pe portul de pe switch-ul fizic. N-a avut portul ala parte de atata atentie in viata lui.

Cablu direct merge, prin switch nu. Serverul de DHCP zicea ca oferea adrese IP clientilor, da aia nu faceau ACK. Si nu intelegeam de ce. De ce n-ar da? Le placea la clienti asa mult de serverul vechi ca protestau?

Pe la opt seara am cedat si m-am dus acasa deja aveam idei de schimbat cariera.

Am ajuns acasa, am desfacut o bere, am re-vazut jumate de Avengers si inainte sa ma culc am zis sa mai iau o data meniurile de pe switch la rand, chiar si optiunile alea care nu ar avea de ce sa se se aplice.

Si-am gasit ca pe switch exista un meniu de DHCP care are o optiune sa blocheze raspunsurile de DHCP de la adrese MAC necunoscute si doar sa accepte adrese permise. Adica scris MAC-ul acolo cu liniuta.

Primul MAC era pus acolo, pe al doilea l-am pus eu dupa alta criza de draci.

Unele zile…

taxonomia programatorilor

Cand am scris postul cu enigmatique, mi s-a zis ca nu prea mi-am facut prieteni cu el ca se pare ca programtorii se obfuscheaza un pic cand le zici ca’s php-isti si am fost intrebat daca am un model complex de a pune lumea pe categorii ca se pare ca sunt foarte specific cu hatereleala.

Well…

Am un sistem sa zicem bazat pe puncte, ceva gen Fane Trotil dar la modul pozitiv:

  • Stie bine limbaje care te nu te iarta daca gresesti, gen C. +20 puncte
  • Stie sa depaneze cod scris in asemenea limbaje (yes, srsly): +15 puncte
  • Stie mai mult de un limbaj de programare la nivel mediu: +5 puncte
  • Stie mai mult de un limbaj de programare la un nivel avansat: +10 puncte
  • Stie sa scrie cod curat fara ajutorul unui framework: +10 puncte
  • Intelege cum functioneaza serverele pe care pe care le foloseste, si cum sa le foloseasca intr-un mod optim: +20 puncte
    • prin server inteleg: Redis, MySQL, PostgreSQL etc.
  • Intelege ce sunt alea cicluri de procesor si cum codul scris inseamna mai multe sau mai putine cicluri: +30 puncte
  • Nu are gandire fixa: +15 puncte
  • Reuseste sa nu ma enerveze: +20 puncte
  • “Thinking outside the box”: +10 puncte
  • Stie sa debugheze cod (yes, srsly): +10 puncte
  • Nu da vina pe biblioteci sau pe componente 3rd party cand nu merge ceva: +9 puncte
  • Nu se limiteaza la “merge si asa”: +10 puncte
  • Intelege protocoalele folosite de aplicatiile pe care le scrie: +15 puncte
  • Alti oameni in care am eu incredere au o parere buna despre ea/el: +15 puncte
  • Au empatie fata de utilizatorii aplicatiilor scrise de ei: +50 puncte
  • Stiu sa foloseasca si sa inteleaga un profiler: +30 puncte

Probabil mai sunt criterii care imi scapa acum, dar cam asa pun eu problema cu programatorii. Si pot sa am niveluri diferite de respect la un nivel foarte granular si ca si bonus pot sa fiu hater pe bucati :)) Gen e OK ca stie X, dar naspa ca nu stie Y si therefore: hate level 4 :)) Asa ca pot sa stau de vorba cu doi programatori in acelasi timp si sa-i urasc cu intensitati diferite :))

Cateva precizari la cele de mai sus:

  • Sunt de parere ca daca stii sa scrii cod in limbaje mai low level (gen C) intelegi mult mai bine cum functioneaza lucrurile. Daca mai stii sa si debughezi crapuri d’astea cu gdb sau sa le profilezi cu ebpf, deja sunt fanul tau (40% daca stii gdb si inca 60% daca stii si ebpf)
  • De foarte multe ori m-am intalnit cu programatori care nu intelegeau contextul in care faceau aplicatiile, un fel de “noi programam, nu gandim”. Nu prea pot sa inteleg pe aia de programeaza chestii si nu le folosesc sau macar sa le inteleaga.
  • Ii urasc cu pasiune pe aia de au idei fixe (am si eu idei fixe, da ale mele sunt cele mai bune) in materie de tehnologii si modalitati de implementare.
  • Imi displac aia care nu investigheaza de ce orice au scris nu merge si sa gaseasca solutii/workaround-uri la probleme. Adica mereu o sa apreciez pe cineva care face ca astia versus “nu stiu boss, eu am scris bine, problema e in alta parte, sa fixeze ailalti”.
  • Sunt un pic elitist ca mi se pare ca trebuie incurajate practicile bune si “killed with fire” alea proaste.

Cam asta e cu mine si programatorii :)) Ma aberai destul pentru ziua de azi.