{"id":35972,"date":"2019-10-31T22:08:54","date_gmt":"2019-10-31T19:08:54","guid":{"rendered":"https:\/\/prohoster.info\/blog\/avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie\/"},"modified":"2019-10-31T22:08:54","modified_gmt":"2019-10-31T19:08:54","slug":"avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie","title":{"rendered":"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>O CDS acabou, mas o desejo incontrol\u00e1vel de escrever permanece. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/fs.linkmeup.ru\/images\/adsm\/0\/kdpv.jpg\"><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/2da9a566e92a782cf1205a6da716d4c4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Durante muitos anos, nosso irm\u00e3o sofreu com o trabalho rotineiro, cruzando os dedos antes do commit e perdendo sono por causa de rollbacks noturnos.<br \/>\nMas os tempos sombrios chegam ao fim.<\/p>\n<p>Com este artigo, come\u00e7arei uma s\u00e9rie sobre como <i>saber. Espero que este artigo tenha ajudado voc\u00ea em seus neg\u00f3cios. Quero acreditar que, ao l\u00ea-lo, voc\u00ea aprendeu tanto quanto eu aprendi enquanto lidava com tudo o que descrevi.<\/i> a automa\u00e7\u00e3o \u00e9 vista. <br \/>\nAo longo do caminho, abordaremos as etapas da automa\u00e7\u00e3o, o armazenamento de vari\u00e1veis, a formaliza\u00e7\u00e3o do design, com RestAPI, NETCONF, YANG, YDK e programaremos extensivamente. <br \/>\n<i>Para mim,<\/i> significa que a) n\u00e3o \u00e9 uma verdade objetiva, b) n\u00e3o \u00e9 a melhor abordagem incondicionalmente, c) meu ponto de vista pode at\u00e9 mudar ao longo do progresso da s\u00e9rie, para ser honesto, desde o rascunho at\u00e9 a publica\u00e7\u00e3o, eu reescrevi tudo completamente duas vezes. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1>Conte\u00fado<\/h1>\n<p><\/p>\n<ol>\n<li> <b>Objetivos<\/b>\n<ol>\n<li>A rede \u00e9 como um organismo \u00fanico<\/li>\n<li>Testando a configura\u00e7\u00e3o<\/li>\n<li>Versionamento<\/li>\n<li>Monitoramento e autorrecupera\u00e7\u00e3o de servi\u00e7os<\/li>\n<\/ol>\n<p>\n <\/li>\n<li> <b>Ferramentas<\/b>\n<ol>\n<li>Sistema de invent\u00e1rio<\/li>\n<li>Sistema de gerenciamento de espa\u00e7o de IP<\/li>\n<li>Sistema de descri\u00e7\u00e3o de servi\u00e7os de rede<\/li>\n<li>Mecanismo de inicializa\u00e7\u00e3o de dispositivos<\/li>\n<li>Modelo de configura\u00e7\u00e3o agn\u00f3stico ao fornecedor<\/li>\n<li>Driver espec\u00edfico para Interface de fornecedor<\/li>\n<li>Mecanismo de entrega de configura\u00e7\u00e3o para o dispositivo<\/li>\n<li>CI\/CD<\/li>\n<li>Mecanismo de backup e busca de desvios<\/li>\n<li>Sistema de monitoramento<\/li>\n<\/ol>\n<p>\n <\/li>\n<li> <b>Conclus\u00e3o<\/b>\n <\/li>\n<\/ol>\n<p>\nTentarei conduzir o ADS em um formato um pouco diferente do CDS. A perspectiva ainda ter\u00e1 grandes artigos numerados, e entre eles publicarei pequenas notas da experi\u00eancia cotidiana. Vou lutar contra o perfeccionismo e n\u00e3o polir todas elas. <\/p>\n<blockquote><p> \u00c9 curioso como, pela segunda vez, temos que percorrer o mesmo caminho.<\/p>\n<p> No in\u00edcio, tive que escrever os artigos sobre redes porque n\u00e3o haviam nenhum dispon\u00edvel na internet russa.<\/p>\n<p> Agora, n\u00e3o consegui encontrar um documento abrangente que sistematizasse as abordagens de automa\u00e7\u00e3o e analisasse as tecnologias mencionadas com exemplos pr\u00e1ticos simples.<\/p>\n<p> Pode ser que eu esteja errado, ent\u00e3o, deixem links para recursos bons. No entanto, isso n\u00e3o alterar\u00e1 minha determina\u00e7\u00e3o de escrever, porque o objetivo principal \u00e9 aprender algo para mim mesmo, e facilitar a vida do pr\u00f3ximo \u00e9 um bom b\u00f4nus que agrada \u00e0 propaga\u00e7\u00e3o de conhecimento.\n<\/p><\/blockquote>\n<p>Tentaremos pegar um data center de tamanho m\u00e9dio, o LAN DC, e trabalhar em todo o esquema de automa\u00e7\u00e3o. <br \/>\nFarei algumas coisas praticamente pela primeira vez junto com voc\u00eas. <\/p>\n<blockquote><p> Nas ideias e ferramentas descritas aqui, n\u00e3o serei original. Dmitry Figol tem um excelente <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MLeiShwb7Qo&amp;list=PLSwGHYY8t8JiGI9powOXDHTAXDSs7FZqt\">canal com transmiss\u00f5es sobre esse tema.<\/a><\/noindex>. <br \/>\n Os artigos, em muitos aspectos, v\u00e3o se sobrepor a eles. \n<\/p><\/blockquote>\n<p>No LAN DC, h\u00e1 4 DCs, cerca de 250 switches, meia d\u00fazia de roteadores e alguns firewalls. <br \/>\nN\u00e3o \u00e9 o Facebook, mas \u00e9 suficiente para refletir profundamente sobre automa\u00e7\u00e3o. <br \/>\nNo entanto, h\u00e1 uma opini\u00e3o de que se voc\u00ea tem mais de 1 dispositivo, a automa\u00e7\u00e3o j\u00e1 \u00e9 necess\u00e1ria. <br \/>\nNa verdade, \u00e9 dif\u00edcil imaginar que algu\u00e9m hoje possa viver sem pelo menos um punhado de scripts de automa\u00e7\u00e3o. <br \/>\nEmbora eu tenha ouvido que existem empresas onde o controle de endere\u00e7os IP \u00e9 feito em uma planilha, e cada um dos milhares de dispositivos de rede \u00e9 configurado manualmente, tendo sua pr\u00f3pria configura\u00e7\u00e3o \u00fanica. Isso, \u00e9 claro, pode ser considerado arte moderna, mas os sentimentos dos engenheiros certamente ser\u00e3o ofendidos. <\/p>\n<h1>Objetivos<\/h1>\n<p>\nAgora, vamos estabelecer metas o mais abstratas poss\u00edvel:<\/p>\n<ul>\n<li>A rede \u00e9 como um organismo \u00fanico<\/li>\n<li>Testando a configura\u00e7\u00e3o<\/li>\n<li>Versionamento do estado da rede.<\/li>\n<li>Monitoramento e autorrecupera\u00e7\u00e3o de servi\u00e7os<\/li>\n<\/ul>\n<p>\nMais adiante neste artigo, vamos discutir quais ferramentas usaremos, e em artigos subsequentes, detalharemos tanto as metas quanto os meios.<\/p>\n<h2>A rede \u00e9 como um organismo \u00fanico<\/h2>\n<p>\nA frase definidora do ciclo, embora \u00e0 primeira vista possa parecer insignificante: <b>vamos configurar a rede, e n\u00e3o dispositivos individuais.<\/b>. <br \/>\nNos \u00faltimos anos, temos observado uma mudan\u00e7a de foco para tratar a rede como uma \u00fanica entidade, da\u00ed v\u00eam os <i>Redes Definidas por Software<\/i>, <i>Redes Orientadas por Inten\u00e7\u00e3o<\/i> e <i>Redes Aut\u00f4nomas<\/i>. <br \/>\nPois o que os aplicativos realmente precisam da rede: conectividade entre os pontos A e B (e \u00e0s vezes +B-J) e isolamento de outros aplicativos e usu\u00e1rios. <\/p>\n<p><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/f8b43928ccc6d487722ce7724f5c4829.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAssim, nossa tarefa nesta s\u00e9rie \u00e9 <b>estabelecer um sistema<\/b>, que suporte a configura\u00e7\u00e3o atual <b>de toda a rede<\/b>, que j\u00e1 se decomp\u00f5e na configura\u00e7\u00e3o atual de cada dispositivo, de acordo com seu papel e localiza\u00e7\u00e3o. <br \/>\n<b>Sistema<\/b> a gest\u00e3o da rede implica que, para fazer mudan\u00e7as, precisamos interagir com ela, e ela, por sua vez, calcula o estado necess\u00e1rio para cada dispositivo e o configura. <br \/>\nDesse modo, minimizamos quase a zero o uso do CLI manualmente \u2014 quaisquer altera\u00e7\u00f5es nas configura\u00e7\u00f5es dos dispositivos ou no design da rede devem ser formalizadas e documentadas \u2014 e s\u00f3 depois implementadas nos elementos relevantes da rede. <\/p>\n<blockquote><p> Ou seja, por exemplo, se decidirmos que, a partir deste momento, os switches de rack em Kazan devem anunciar duas redes em vez de uma, n\u00f3s<\/p>\n<ol>\n<li>Primeiro, documentamos as altera\u00e7\u00f5es nos sistemas<\/li>\n<li>Geramos a configura\u00e7\u00e3o de destino de todos os dispositivos da rede<\/li>\n<li>Executamos o programa de atualiza\u00e7\u00e3o da configura\u00e7\u00e3o da rede, que calcula o que precisa ser removido em cada n\u00f3, o que adicionar e leva os n\u00f3s ao estado desejado.<\/li>\n<\/ol>\n<p>\n Nesse \u00ednterim, fazemos altera\u00e7\u00f5es manualmente apenas no primeiro passo.\n<\/p><\/blockquote>\n<h2>Testando a configura\u00e7\u00e3o<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/www.wikisummaries.org\/wiki\/Visible_Ops\">\u00c9 sabido<\/a><\/noindex>, que 80% dos problemas ocorrem durante a altera\u00e7\u00e3o da configura\u00e7\u00e3o \u2014 um ind\u00edcio disso \u00e9 que, durante as f\u00e9rias de Natal, normalmente tudo fica tranquilo. <br \/>\nEu pessoalmente testemunhei dezenas de quedas globais devido a erros humanos: comando errado, execu\u00e7\u00e3o na configura\u00e7\u00e3o errada, esquecimento da comunidade, remo\u00e7\u00e3o global do MPLS no roteador, configura\u00e7\u00e3o de cinco dispositivos, e no sexto n\u00e3o notamos o erro, cometemos altera\u00e7\u00f5es antigas feitas por outra pessoa. H\u00e1 uma infinidade de cen\u00e1rios. <\/p>\n<p>A automa\u00e7\u00e3o nos permitir\u00e1 cometer menos erros, mas em uma escala maior. Assim, podemos travar n\u00e3o apenas um dispositivo, mas toda a rede de uma vez. <\/p>\n<p>Desde tempos imemoriais, nossos ancestrais verificavam a precis\u00e3o das altera\u00e7\u00f5es feitas com um olhar atento, coragem e a funcionalidade da rede ap\u00f3s sua implementa\u00e7\u00e3o. <br \/>\nAqueles ancestrais cujos trabalhos resultavam em paralisa\u00e7\u00f5es e perdas catastr\u00f3ficas deixavam menos descendentes e deveriam, ao longo do tempo, desaparecer, mas a evolu\u00e7\u00e3o \u00e9 um processo lento, e ainda hoje nem todos verificam previamente as altera\u00e7\u00f5es em um laborat\u00f3rio. <br \/>\nNo entanto, na vanguarda do progresso est\u00e3o aqueles que automatizaram o processo de teste de configura\u00e7\u00e3o e sua aplica\u00e7\u00e3o subsequente na rede. Em outras palavras \u2014 tomaram emprestado o procedimento CI\/CD (<noindex><a rel=\"nofollow\" href=\"https:\/\/img.devrant.com\/devrant\/rant\/r_1535091_ErSUL.jpg\">Integra\u00e7\u00e3o Cont\u00ednua, Implanta\u00e7\u00e3o Cont\u00ednua<\/a><\/noindex>) dos desenvolvedores.<br \/>\nEm uma das partes, veremos como implementar isso com um sistema de controle de vers\u00e3o, possivelmente o GitHub. <\/p>\n<blockquote><p> Assim que voc\u00ea se acostumar com a ideia de CI\/CD para redes, de repente, o m\u00e9todo de verificar a configura\u00e7\u00e3o atrav\u00e9s de sua aplica\u00e7\u00e3o na rede de trabalho parecer\u00e1 uma ignor\u00e2ncia da Idade M\u00e9dia. Algo como bater com um martelo em uma ogiva.\n<\/p><\/blockquote>\n<p>Uma continua\u00e7\u00e3o org\u00e2nica das ideias sobre <b>o sistema<\/b> de gerenciamento de rede e CI\/CD torna-se a versionamento completo da configura\u00e7\u00e3o. <\/p>\n<h2>Versionamento<\/h2>\n<p>\nVamos considerar que, com qualquer altera\u00e7\u00e3o, at\u00e9 mesmo as mais pequenas, mesmo em um dispositivo impercept\u00edvel, toda a rede passa de um estado a outro.<br \/>\nE nunca executamos o comando em um dispositivo, mudamos o estado da rede. <br \/>\nVamos chamar esses estados de vers\u00f5es?<\/p>\n<p>Suponha que a vers\u00e3o atual seja 1.0.0.<br \/>\nO endere\u00e7o IP da interface Loopback mudou em um dos ToR? Esta \u00e9 uma vers\u00e3o menor \u2014 receber\u00e1 o n\u00famero 1.0.1.<br \/>\nRevisamos as pol\u00edticas de importa\u00e7\u00e3o de rotas no BGP \u2014 um pouco mais s\u00e9rio \u2014 j\u00e1 \u00e9 1.1.0.<br \/>\nDecidimos eliminar o IGP e passar apenas para BGP \u2014 isso j\u00e1 \u00e9 uma mudan\u00e7a radical de design \u2014 2.0.0.<\/p>\n<p>Ao mesmo tempo, diferentes DCs podem ter vers\u00f5es diferentes \u2014 a rede evolui, novos equipamentos s\u00e3o instalados, novos n\u00edveis de spine s\u00e3o adicionados em alguns lugares, enquanto em outros n\u00e3o, etc.<\/p>\n<p>Sobre <noindex><a rel=\"nofollow\" href=\"https:\/\/semver.org\">versionamento sem\u00e2ntico<\/a><\/noindex> vamos falar sobre isso em um artigo separado.<\/p>\n<p>Reitero \u2014 qualquer mudan\u00e7a (exceto comandos de depura\u00e7\u00e3o) \u00e9 uma atualiza\u00e7\u00e3o de vers\u00e3o. Os administradores devem ser notificados sobre qualquer desvio da vers\u00e3o atual.<\/p>\n<p>O mesmo se aplica ao rollback de mudan\u00e7as \u2014 isso n\u00e3o \u00e9 a anula\u00e7\u00e3o dos \u00faltimos comandos, n\u00e3o \u00e9 um rollback realizado pelo sistema operacional do dispositivo \u2014 \u00e9 trazer toda a rede para uma nova (ou antiga) vers\u00e3o. <\/p>\n<h2>Monitoramento e autorrecupera\u00e7\u00e3o de servi\u00e7os<\/h2>\n<p>\nEssa \u00e9 uma tarefa evidente que, nas redes modernas, atinge um novo n\u00edvel.<br \/>\nFrequentemente, grandes provedores de servi\u00e7os adotam a abordagem de que um servi\u00e7o que falha deve ser rapidamente encerrado e um novo deve ser iniciado, em vez de investigar o que ocorreu.<br \/>\n\u00abMuito\u00bb significa que \u00e9 preciso estar fortemente coberto por sistemas de monitoramento, que conseguem detectar at\u00e9 as menores anomalias em segundos.<br \/>\nE aqui j\u00e1 n\u00e3o \u00e9 suficiente as m\u00e9tricas habituais, como carga da interface ou disponibilidade do n\u00f3. O monitoramento manual por parte do operador tamb\u00e9m n\u00e3o \u00e9 suficiente.<br \/>\nPara muitas coisas, deve haver um <noindex><a rel=\"nofollow\" href=\"https:\/\/www.irisns.com\/self-healing-network-tomorrow-look-like\/\">Self-Healing<\/a><\/noindex> \u2014 os monitoramentos acenderam em vermelho e foram sozinhos cuidar do que estava doendo.<\/p>\n<p>E aqui tamb\u00e9m monitoramos n\u00e3o s\u00f3 dispositivos individuais, mas a sa\u00fade da rede como um todo, tanto como um whitebox, que \u00e9 relativamente claro, quanto como um blackbox, que \u00e9 mais complicado.<\/p>\n<p>\nO que precisamos para implementar esses planos ambiciosos?<\/p>\n<ul>\n<li>Ter uma lista de todos os dispositivos na rede, sua localiza\u00e7\u00e3o, fun\u00e7\u00f5es, modelos, vers\u00f5es de software. <br \/>\n <i>kazan-leaf-1.lmu.net, Kazan, leaf, Juniper QFX 5120, R18.3.<\/i>\n <\/li>\n<li>Ter um sistema de descri\u00e7\u00e3o de servi\u00e7os de rede. <br \/>\n <i>IGP, BGP, L2\/3VPN, Pol\u00edtica, ACL, NTP, SSH.<\/i><\/li>\n<li>Ser capaz de inicializar o dispositivo. <br \/>\n <i>Hostname, IP de gerenciamento, rota de gerenciamento, usu\u00e1rios, chaves RSA, LLDP, NETCONF<\/i><\/li>\n<li>Configurar o dispositivo e trazer a configura\u00e7\u00e3o para a vers\u00e3o desejada (incluindo uma vers\u00e3o anterior).<\/li>\n<li>Testar a configura\u00e7\u00e3o<\/li>\n<li>Verificar periodicamente o estado de todos os dispositivos quanto a desvio do status atual e informar a quem for pertinente.<br \/>\n <i>\u00c0 noite, algu\u00e9m silenciosamente adicionou uma regra no ACL<\/i>.<\/li>\n<li>Monitorar a funcionalidade.<\/li>\n<\/ul>\n<p><\/p>\n<h1>Ferramentas<\/h1>\n<p>\nParece suficientemente complicado para come\u00e7ar a decompor o projeto em componentes.<\/p>\n<p>E ser\u00e3o dez:<\/p>\n<ol>\n<li>Sistema de invent\u00e1rio<\/li>\n<li>Sistema de gerenciamento de espa\u00e7o de IP<\/li>\n<li>Sistema de descri\u00e7\u00e3o de servi\u00e7os de rede<\/li>\n<li>Mecanismo de inicializa\u00e7\u00e3o de dispositivos<\/li>\n<li>Modelo de configura\u00e7\u00e3o agn\u00f3stico ao fornecedor<\/li>\n<li>Driver espec\u00edfico para Interface de fornecedor<\/li>\n<li>Mecanismo de entrega de configura\u00e7\u00e3o para o dispositivo<\/li>\n<li>CI\/CD<\/li>\n<li>Mecanismo de backup e busca de desvios<\/li>\n<li>Sistema de monitoramento<\/li>\n<\/ol>\n<blockquote><p> Este, ali\u00e1s, \u00e9 um exemplo de como a perspectiva sobre os objetivos do ciclo mudou \u2013 no rascunho dos componentes havia 4.\n<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/91132e29d359a4042b213529511f6d7d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa ilustra\u00e7\u00e3o, eu representei todos os componentes e o dispositivo propriamente dito. <br \/>\nComponentes interconectados interagem uns com os outros. <br \/>\nQuanto maior o bloco, mais aten\u00e7\u00e3o precisa ser dada a esse componente. <\/p>\n<p><\/p>\n<h2>Componente 1. Sistema de invent\u00e1rio<\/h2>\n<p>\nObviamente, queremos saber qual equipamento est\u00e1 onde e a que est\u00e1 conectado. <br \/>\nO sistema de invent\u00e1rio \u00e9 uma parte essencial de qualquer empresa. <br \/>\nNa maioria das vezes, para dispositivos de rede, a empresa possui um sistema de invent\u00e1rio separado que resolve tarefas mais espec\u00edficas. <br \/>\nNo \u00e2mbito do ciclo de artigos, nos referiremos a isso como DCIM \u2013 Gest\u00e3o de Infraestrutura de Data Center. Embora o pr\u00f3prio termo DCIM, estritamente falando, inclua muito mais.<\/p>\n<p>Para nossas tarefas nele, armazenaremos as seguintes informa\u00e7\u00f5es sobre o dispositivo:<\/p>\n<ul>\n<li>N\u00famero de invent\u00e1rio<\/li>\n<li>Nome\/descri\u00e7\u00e3o <\/li>\n<li>Modelo (<i>Huawei CE12800, Juniper QFX5120, etc.<\/i>)<\/li>\n<li>Par\u00e2metros caracter\u00edsticos (<i>placas, interfaces, etc.<\/i>)<\/li>\n<li>Fun\u00e7\u00e3o (<i>Leaf, Spine, Border Router, etc.<\/i>)<\/li>\n<li>Localiza\u00e7\u00e3o (<i>regi\u00e3o, cidade, data center, rack, unidade<\/i>)<\/li>\n<li>Interconex\u00f5es entre dispositivos<\/li>\n<li>Topologia da rede<\/li>\n<\/ul>\n<p><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/fac708b1bf3640a943f90247bff8216e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c9 perfeitamente claro que queremos saber tudo isso. <br \/>\nMas isso ajudar\u00e1 nos objetivos de automa\u00e7\u00e3o? <br \/>\nCertamente. <br \/>\nPor exemplo, sabemos que neste data center, em switches Leaf, se for Huawei, as ACL para filtrar determinado tr\u00e1fego devem ser aplicadas na VLAN, e se for Juniper \u2013 ent\u00e3o na unidade 0 da interface f\u00edsica. <br \/>\nOu precisamos implementar um novo servidor Syslog em todos os bordas da regi\u00e3o.<\/p>\n<p>Nele tamb\u00e9m armazenaremos dispositivos de rede virtuais, como roteadores virtuais ou route reflectors. Podemos adicionar servidores DNS, NTP, Syslog e tudo que de alguma forma se relacione \u00e0 rede. <\/p>\n<h2>Componente 2. Sistema de gest\u00e3o de espa\u00e7o de IP<\/h2>\n<p>\nSim, ainda hoje existem grupos de pessoas que mant\u00eam um registro de prefixos e endere\u00e7os IP em um arquivo Excel. Mas a abordagem moderna \u00e9 realmente um banco de dados, com frontend em nginx\/apache, API e amplas funcionalidades para gest\u00e3o de endere\u00e7os e redes IP, com separa\u00e7\u00e3o por VRF.<br \/>\nIPAM \u2014 Gest\u00e3o de Endere\u00e7os IP. <\/p>\n<p>Para nossas necessidades, iremos armazenar as seguintes informa\u00e7\u00f5es:<\/p>\n<ul>\n<li>VLAN<\/li>\n<li>VRF<\/li>\n<li>Redes\/Subredes<\/li>\n<li>endere\u00e7os IP<\/li>\n<li>Vincula\u00e7\u00e3o de endere\u00e7os a dispositivos, redes a locais e n\u00fameros VLAN<\/li>\n<\/ul>\n<p><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/6d476d48f95ed663d84cae052a86d129.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNovamente, \u00e9 claro que queremos ter a certeza de que, ao atribuir um novo endere\u00e7o IP para o loopback do ToR, n\u00e3o estaremos trope\u00e7ando no fato de que ele j\u00e1 foi designado a algu\u00e9m. Ou que o mesmo prefixo foi usado duas vezes em diferentes extremidades da rede. <br \/>\nMas como isso ajudar\u00e1 na automa\u00e7\u00e3o? <br \/>\nF\u00e1cil. <br \/>\nSolicitamos \u00e0 sistema um prefixo com a fun\u00e7\u00e3o de Loopbacks, onde existem endere\u00e7os IP dispon\u00edveis para aloca\u00e7\u00e3o \u2014 se encontrado, alocamos o endere\u00e7o; se n\u00e3o, pedimos a cria\u00e7\u00e3o de um novo prefixo. <br \/>\nOu ao criar a configura\u00e7\u00e3o do dispositivo, podemos descobrir atrav\u00e9s deste mesmo sistema em qual VRF o interface deve estar. <br \/>\nE ao iniciar um novo servidor, o script ir\u00e1 consultar o sistema, descobrir em qual switch do servidor, em qual porta e qual sub-rede est\u00e1 designada ao interface \u2014 a partir dele, ser\u00e1 alocado o endere\u00e7o do servidor. <\/p>\n<p>\nSurge o desejo de unir DCIM e IPAM em um \u00fanico sistema, para n\u00e3o duplicar fun\u00e7\u00f5es e n\u00e3o gerenciar duas entidades semelhantes. <br \/>\nE assim faremos. <\/p>\n<h2>Componente 3. Sistema de descri\u00e7\u00e3o de servi\u00e7os de rede<\/h2>\n<p>\nEnquanto os dois primeiros sistemas armazenam vari\u00e1veis que ainda precisam ser utilizadas de alguma forma, o terceiro descreve para cada fun\u00e7\u00e3o do dispositivo como deve ser configurado. <br \/>\nVale ressaltar dois tipos diferentes de servi\u00e7os de rede: <\/p>\n<ul>\n<li>Servi\u00e7os de infraestrutura<\/li>\n<li>Servi\u00e7os de cliente.<\/li>\n<\/ul>\n<p>Os primeiros s\u00e3o destinados a assegurar a conectividade b\u00e1sica e a gest\u00e3o do dispositivo. Aqui podemos incluir VTY, SNMP, NTP, Syslog, AAA, protocolos de roteamento, CoPP, etc. <br \/>\nOs segundos organizam um servi\u00e7o para o cliente: MPLS L2\/L3VPN, GRE, VXLAN, VLAN, L2TP, etc. <br \/>\nObviamente, h\u00e1 tamb\u00e9m casos limites \u2014 como classificar MPLS LDP, BGP? E os protocolos de roteamento podem ser utilizados para clientes. Mas isso n\u00e3o \u00e9 fundamental. <\/p>\n<p>Ambos os tipos de servi\u00e7os se desdobram em primitivas de configura\u00e7\u00e3o:<\/p>\n<ul>\n<li>interfaces f\u00edsicas e l\u00f3gicas (tag\/ante-tag, mtu)<\/li>\n<li>endere\u00e7os IP e VRF (IP, IPv6, VRF)<\/li>\n<li>ACLs e pol\u00edticas de tratamento de tr\u00e1fego<\/li>\n<li>protocolos (IGP, BGP, MPLS)<\/li>\n<li>pol\u00edticas de roteamento (listas de prefixos, comunidades, filtros ASN).<\/li>\n<li>Servi\u00e7os auxiliares (SSH, NTP, LLDP, Syslog\u2026)<\/li>\n<li>Etc.<\/li>\n<\/ul>\n<p>\nAinda n\u00e3o sei como exatamente vamos fazer isso. Vamos abordar em um artigo separado.<\/p>\n<p><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/092bc3a4b875f4a6422ee13fb580ba4f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSe voltarmos um pouco para a realidade, poder\u00edamos descrever que<br \/>\nO switch Leaf deve ter sess\u00f5es BGP com todos os switches Spine conectados, importar para o processo as redes conectadas, e aceitar dos switches Spine apenas redes de um prefixo espec\u00edfico. Restringir CoPP IPv6 ND a 10 pps etc. <br \/>\nOs switches Spine, por sua vez, mant\u00eam sess\u00f5es com todos os switches Leaf conectados, atuando como refletores raiz, e aceitam deles apenas rotas de determinado comprimento e com certas comunidades.<\/p>\n<h2>Componente 4. Mecanismo de inicializa\u00e7\u00e3o do dispositivo<\/h2>\n<p>\nSob este t\u00edtulo, agrupo uma s\u00e9rie de a\u00e7\u00f5es que precisam acontecer para que o dispositivo apare\u00e7a nos radares e possa ser acessado remotamente.<\/p>\n<ol>\n<li>Registrar o dispositivo no sistema de invent\u00e1rio.<\/li>\n<li>Alocar um endere\u00e7o IP de gerenciamento.<\/li>\n<li>Configurar o acesso b\u00e1sico para ele: <br \/>\nHostname, endere\u00e7o IP de gerenciamento, rota para a rede de gerenciamento, usu\u00e1rios, chaves SSH, protocolos \u2014 telnet\/SSH\/NETCONF<\/li>\n<\/ol>\n<p>Aqui existem tr\u00eas abordagens:<\/p>\n<ul>\n<li>Tudo manualmente. O dispositivo \u00e9 levado ao estande, onde um ser humano comum o registrar\u00e1 nos sistemas, conectar\u00e1 pelo console e o configurar\u00e1. Pode funcionar em pequenas redes est\u00e1ticas.<\/li>\n<li>ZTP \u2014 Zero Touch Provisioning. O hardware chegou, se posicionou, obteve um endere\u00e7o via DHCP, consultou um servidor espec\u00edfico e se configurou automaticamente. <\/li>\n<li>Infraestrutura de servidores de console, onde a configura\u00e7\u00e3o inicial ocorre atrav\u00e9s da porta de console em modo autom\u00e1tico.<\/li>\n<\/ul>\n<p>Vamos discutir os tr\u00eas em um artigo separado.<\/p>\n<p><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/6d8d061e53b508edbbcbd98fe496ca91.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Componente 5. Modelo de configura\u00e7\u00e3o independente do fornecedor<\/h2>\n<p>\nAt\u00e9 agora, todos os sistemas eram fragmentos d\u00edspares que forneciam descri\u00e7\u00f5es vari\u00e1veis e declarativas do que gostar\u00edamos de ver na rede. Mas cedo ou tarde, teremos que lidar com a concretude. <br \/>\nNeste est\u00e1gio, para cada dispositivo espec\u00edfico, primitivos, servi\u00e7os e vari\u00e1veis s\u00e3o combinados em um modelo de configura\u00e7\u00e3o, que descreve efetivamente a configura\u00e7\u00e3o completa de um dispositivo espec\u00edfico, apenas de uma maneira independente de fornecedor. <br \/>\nO que esse passo oferece? Por que n\u00e3o criar imediatamente a configura\u00e7\u00e3o do dispositivo, que pode ser simplesmente carregada? <br \/>\nNa verdade, isso permite resolver tr\u00eas tarefas:<\/p>\n<ol>\n<li> N\u00e3o se adaptar a uma interface de intera\u00e7\u00e3o espec\u00edfica com o dispositivo. Seja CLI, NETCONF, RESTCONF, SNMP \u2014 o modelo ser\u00e1 o mesmo.<\/li>\n<li> N\u00e3o manter o n\u00famero de templates\/script pelo n\u00famero de fornecedores na rede, e caso haja uma mudan\u00e7a no design, alterar a mesma coisa em v\u00e1rios lugares.<\/li>\n<li> Carregar a configura\u00e7\u00e3o do dispositivo (backup), organiz\u00e1-la em um modelo exatamente igual e diretamente comparar a configura\u00e7\u00e3o alvo e a existente para calcular a delta e preparar um patch de configura\u00e7\u00e3o, que mudar\u00e1 apenas as partes que s\u00e3o necess\u00e1rias ou para identificar desvios.<\/li>\n<\/ol>\n<p><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/a154c42ebe7978fcc5b2ce4f235516c9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo resultado desta etapa, obtemos uma configura\u00e7\u00e3o independente de fornecedor.<\/p>\n<h2>Componente 6. Driver espec\u00edfico de interface de fornecedor.<\/h2>\n<p>\nN\u00e3o vale a pena ter esperan\u00e7as de que algum dia configurar um Cisco ser\u00e1 t\u00e3o f\u00e1cil quanto configurar um Juniper, simplesmente enviando chamadas id\u00eanticas a eles. Apesar da crescente popularidade dos whiteboxes e do surgimento do suporte a NETCONF, RESTCONF e OpenConfig, o conte\u00fado espec\u00edfico que esses protocolos entregam varia de fornecedor para fornecedor, e essa \u00e9 uma das suas diferen\u00e7as competitivas que eles n\u00e3o desistir\u00e3o facilmente. <br \/>\nIsso \u00e9 mais ou menos como OpenContrail e OpenStack, que t\u00eam RestAPI como sua interface northbound, mas esperam chamadas completamente diferentes. <\/p>\n<p>Portanto, no quinto passo, o modelo independente de fornecedor deve assumir a forma em que ir\u00e1 para o hardware. <br \/>\nE aqui todos os meios s\u00e3o v\u00e1lidos (na verdade, n\u00e3o): CLI, NETCONF, RESTCONF, SNMP s\u00e3o todos v\u00e1lidos.<\/p>\n<p>Portanto, precisaremos de um driver que traduza o resultado do passo anterior para o formato necess\u00e1rio de um fornecedor espec\u00edfico: um conjunto de comandos CLI, uma estrutura XML.<\/p>\n<p><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/6ed8e935183075fda60a209477f84937.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Componente 7. Mecanismo de entrega da configura\u00e7\u00e3o para o dispositivo.<\/h2>\n<p>\nA configura\u00e7\u00e3o foi gerada, mas ainda precisa ser entregue aos dispositivos \u2014 e, obviamente, n\u00e3o manualmente. <br \/>\n<b>Primeiro<\/b>, surge a quest\u00e3o de qual transporte vamos utilizar? E a escolha hoje j\u00e1 n\u00e3o \u00e9 pequena:<\/p>\n<ul>\n<li>CLI (telnet, ssh)<\/li>\n<li>SNMP<\/li>\n<li>NETCONF<\/li>\n<li>RESTCONF<\/li>\n<li>REST API<\/li>\n<li>OpenFlow (embora ele se destaque na lista, pois \u00e9 uma forma de entregar FIB e n\u00e3o configura\u00e7\u00f5es)<\/li>\n<\/ul>\n<p>Vamos aqui colocar os pontos sobre as letras. CLI \u2014 \u00e9 legado. SNMP\u2026 ahem.<br \/>\nRESTCONF \u2014 ainda \u00e9 uma criatura desconhecida, REST API quase ningu\u00e9m suporta. Portanto, vamos nos concentrar em NETCONF no ciclo.<\/p>\n<p>Na verdade, como j\u00e1 percebeu o leitor, com a interface j\u00e1 estamos decididos neste ponto \u2014 o resultado da etapa anterior j\u00e1 est\u00e1 apresentado no formato da interface escolhida.<\/p>\n<p><b>Em segundo lugar<\/b>, e quais ferramentas usaremos para isso?<br \/>\nAqui tamb\u00e9m h\u00e1 uma grande escolha:<\/p>\n<ul>\n<li>Um script feito sob medida ou uma plataforma. Vamos nos armar com ncclient e asyncIO e fazer tudo n\u00f3s mesmos. O que nos custa construir um sistema de deployment do zero?<\/li>\n<li>Ansible com sua rica biblioteca de m\u00f3dulos de rede.<\/li>\n<li>Salt com sua escassa funcionalidade em redes e liga\u00e7\u00e3o com Napalm.<\/li>\n<li>Pr\u00f3prio Napalm, que conhece alguns vendors e tudo, at\u00e9 logo.<\/li>\n<li>Nornir \u2014 mais uma fera que vamos dissecar no futuro.<\/li>\n<\/ul>\n<p>Aqui tamb\u00e9m o favorito ainda n\u00e3o foi escolhido \u2014 vamos explorar.<\/p>\n<p>O que mais \u00e9 importante aqui? As consequ\u00eancias da aplica\u00e7\u00e3o da configura\u00e7\u00e3o. <br \/>\nSe \u00e9 bem-sucedido ou n\u00e3o. Se o acesso ao hardware permanece ou n\u00e3o. <br \/>\nParece que aqui vai ajudar um commit com confirma\u00e7\u00e3o e valida\u00e7\u00e3o do que foi carregado no dispositivo. <br \/>\nIsso, em conjunto com a implementa\u00e7\u00e3o adequada do NETCONF, reduz significativamente o n\u00famero de dispositivos compat\u00edveis \u2014 commits normais n\u00e3o s\u00e3o suportados por muitos fabricantes. Mas isso \u00e9 apenas uma das condi\u00e7\u00f5es obrigat\u00f3rias na <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%BF%D1%80%D0%BE%D1%81_%D0%BF%D1%80%D0%B5%D0%B4%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F\">RFP<\/a><\/noindex>. Afinal, ningu\u00e9m se preocupa que nenhum vendor russo passar\u00e1 sob a condi\u00e7\u00e3o de 32*100GE de interface. Ou se preocupa?<\/p>\n<p><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/59d8ad3b55b9c107642550bb06fc759a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Componente 8. CI\/CD<\/h2>\n<p>\nNeste ponto, j\u00e1 temos a configura\u00e7\u00e3o para todos os dispositivos da rede.<br \/>\nEstou escrevendo \"para todos\", porque estamos falando sobre versionamento do estado da rede. E mesmo que seja necess\u00e1rio mudar as configura\u00e7\u00f5es de apenas um switch, as altera\u00e7\u00f5es s\u00e3o calculadas para toda a rede. Obviamente, elas podem ser nulas para a maioria dos n\u00f3s.<\/p>\n<p>Mas, como j\u00e1 mencionado acima, n\u00e3o somos uns b\u00e1rbaros para implementar tudo de uma vez em produ\u00e7\u00e3o. <br \/>\nA configura\u00e7\u00e3o gerada deve passar primeiro pelo Pipeline CI\/CD.<\/p>\n<blockquote><p>CI\/CD significa Integra\u00e7\u00e3o Cont\u00ednua, Deployment Cont\u00ednuo. \u00c9 uma abordagem na qual a equipe n\u00e3o lan\u00e7a um novo release major a cada seis meses, substituindo completamente o antigo, mas implementa regularmente, de forma incremental (Deployment), novas funcionalidades em pequenas parcelas, cada uma das quais \u00e9 testada minuciosamente quanto \u00e0 compatibilidade, seguran\u00e7a e funcionamento (Integra\u00e7\u00e3o).\n<\/p><\/blockquote>\n<p>Para isso, temos um sistema de controle de vers\u00e3o que acompanha as altera\u00e7\u00f5es de configura\u00e7\u00e3o, um laborat\u00f3rio que verifica se o servi\u00e7o do cliente n\u00e3o apresenta falhas, um sistema de monitoramento que confirma isso e, por fim, o \u00faltimo passo \u2014 a implementa\u00e7\u00e3o das altera\u00e7\u00f5es na rede operacional.<\/p>\n<p>Exceto para comandos de depura\u00e7\u00e3o, todas as mudan\u00e7as na rede devem passar pelo CI\/CD Pipeline \u2014 essa \u00e9 a nossa garantia de uma vida tranquila e uma carreira longa e bem-sucedida.<\/p>\n<p><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/101a5ff87c7a9c7b6776aca9daf762a4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Componente 9. Sistema de backup e detec\u00e7\u00e3o de desvios<\/h2>\n<p>\nN\u00e3o \u00e9 necess\u00e1rio falar repetidamente sobre backups. <br \/>\nVamos apenas armazen\u00e1-los por cron ou quando houver uma altera\u00e7\u00e3o na configura\u00e7\u00e3o no Git.<\/p>\n<p>A segunda parte \u00e9 mais interessante \u2014 algu\u00e9m deve monitorar esses backups. Em alguns casos, essa pessoa deve reverter tudo como estava, e em outros, avisar algu\u00e9m sobre um problema. <br \/>\nPor exemplo, se um novo usu\u00e1rio aparecer que n\u00e3o est\u00e1 listado nas vari\u00e1veis, deve-se remov\u00ea-lo para evitar problemas. E se uma nova regra de firewall surgir \u2014 \u00e9 melhor n\u00e3o mexer, talvez algu\u00e9m apenas tenha ativado o modo de depura\u00e7\u00e3o, ou pode ser que um novo servi\u00e7o tenha sido mal configurado e j\u00e1 esteja sendo utilizado pelas pessoas.<\/p>\n<p>Em rela\u00e7\u00e3o a uma pequena delta em termos de toda a rede, n\u00e3o conseguiremos evitar isso, independentemente dos sistemas de automa\u00e7\u00e3o e da m\u00e3o firme da gest\u00e3o. Para a depura\u00e7\u00e3o de problemas, ningu\u00e9m far\u00e1 modifica\u00e7\u00f5es nas configura\u00e7\u00f5es nos sistemas. Especialmente considerando que a pr\u00f3pria modelagem de configura\u00e7\u00e3o pode n\u00e3o prever tais mudan\u00e7as. <\/p>\n<blockquote><p>Por exemplo, uma regra de firewall para contar o n\u00famero de pacotes em um determinado IP, para localiza\u00e7\u00e3o de problemas \u2014 \u00e9 uma configura\u00e7\u00e3o tempor\u00e1ria bastante comum.\n<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/390f78139d336f1fc2c60573bccfe76c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Componente 10. Sistema de monitoramento<\/h2>\n<p>\nInicialmente, eu n\u00e3o planejava abordar o tema de monitoramento \u2014 \u00e9 um assunto extenso, pol\u00eamico e complexo. Mas, ao longo do processo, ficou claro que \u00e9 uma parte integrante da automa\u00e7\u00e3o. E n\u00e3o podemos ignor\u00e1-lo, mesmo sem pr\u00e1tica. <\/p>\n<p>Desenvolvendo o pensamento \u2014 isso \u00e9 uma parte org\u00e2nica do processo CI\/CD. Ap\u00f3s a implementa\u00e7\u00e3o da configura\u00e7\u00e3o na rede, precisamos ser capazes de determinar se tudo est\u00e1 em ordem. <br \/>\nE n\u00e3o se trata apenas de gr\u00e1ficos de uso das interfaces ou da disponibilidade dos n\u00f3s, mas sim de quest\u00f5es mais sutis \u2014 a exist\u00eancia de rotas necess\u00e1rias, os atributos dessas rotas, o n\u00famero de sess\u00f5es BGP, vizinhos OSPF, a operabilidade de ponta a ponta dos servi\u00e7os subjacentes.<br \/>\nAs logs are not being written to the external server, has the SFlow agent malfunctioned, have drops in queues started to increase, or has connectivity between any pair of prefixes been disrupted?<\/p>\n<p>In a separate article, we will reflect on this as well.<\/p>\n<p><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/08aeee4939081abb21e61abadd0ce5de.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><img decoding=\"async\" alt=\"Automatiza\u00e7\u00e3o para os menores. Parte zero. Planejamento\" src=\"\/wp-content\/uploads\/2019\/07\/13c186070c85fd00f7b6923df154f1b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h1>Conclus\u00e3o<\/h1>\n<p>\nAs a basis, I chose one of the modern data center network designs \u2014 L3 Clos Fabric with BGP as the routing protocol.<br \/>\nThis time, we will build the network on Juniper, because now the JunOs interface is something special.<\/p>\n<p>We'll complicate our lives by using only Open Source tools and a multi-vendor network \u2014 so in addition to Juniper, I will choose another lucky player along the way.<\/p>\n<p>The plan for the upcoming publications is approximately as follows:<br \/>\nFirst, I will talk about virtual networks. Primarily because I want to, and second, because without this, the design of the infrastructure network will not be very clear.<br \/>\nThen, about the network design itself: topology, routing, policies.<br \/>\nWe will assemble a laboratory setup.<br \/>\nWe will reflect and maybe practice initializing a device in the network.<br \/>\nAnd then about each component in intimate detail.<\/p>\n<p>And yes, I do not promise to elegantly conclude this cycle with a ready solution. \ud83d\ude42<\/p>\n<h5>Links \u00dateis<\/h5>\n<p><\/p>\n<ul>\n<li>Before diving into the series, it is worth reading Natasha Samoylenko's book <noindex><a rel=\"nofollow\" href=\"https:\/\/natenka.gitbook.io\/pyneng\/\">\"Python for Network Engineers\".<\/a><\/noindex>Oh, and perhaps take a <noindex><a rel=\"nofollow\" href=\"https:\/\/natenka.github.io\/pyneng-online\/\">course.<\/a><\/noindex>.<\/li>\n<li>It would also be useful to read <noindex><a rel=\"nofollow\" href=\"https:\/\/tools.ietf.org\/html\/rfc7938\">RFC<\/a><\/noindex> on the design of data center fabrics from Facebook authored by Petr Lapukhov.<\/li>\n<li>A documenta\u00e7\u00e3o sobre a arquitetura fornecer\u00e1 uma vis\u00e3o de como funciona o SDN sobre Overlay. <noindex><a rel=\"nofollow\" href=\"https:\/\/tungstenfabric.github.io\/website\/Tungsten-Fabric-Architecture.html\">Tungsten Fabric<\/a><\/noindex> (formerly Open Contrail).<\/li>\n<\/ul>\n<h5>Obrigado<\/h5>\n<p>\nRoman Gorg\u00e9. For comments and edits.<br \/>\nArtyom Chernobay. For KDPV.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/453516\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u0414\u0421\u041c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u2014 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c. \u0414\u043e\u043b\u0433\u0438\u0435 \u0433\u043e\u0434\u044b \u043d\u0430\u0448 \u0431\u0440\u0430\u0442 \u0441\u0442\u0440\u0430\u0434\u0430\u043b \u043e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0443\u0442\u0438\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b, \u0441\u043a\u0440\u0435\u0449\u0438\u0432\u0430\u043b \u043f\u0430\u043b\u044c\u0446\u044b \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u043c \u0438 \u043d\u0435\u0434\u043e\u0441\u044b\u043f\u0430\u043b \u0438\u0437-\u0437\u0430 \u043d\u043e\u0447\u043d\u044b\u0445 \u0440\u043e\u043b\u0431\u044d\u043a\u043e\u0432. \u041d\u043e \u0442\u0451\u043c\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a\u043e\u043d\u0435\u0446. \u042d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0451\u0439 \u044f \u043d\u0430\u0447\u043d\u0443 \u0441\u0435\u0440\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043d\u0435 \u0432\u0438\u0434\u0438\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f. \u041f\u043e \u0445\u043e\u0434\u0443 \u0434\u0435\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f \u0441 \u044d\u0442\u0430\u043f\u0430\u043c\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438, \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u0441 RestAPI, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26891,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35972","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u0414\u0421\u041c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u2014 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445. \u0427\u0430\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u0430\u044f. \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u0414\u0421\u041c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u2014 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:08:54+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:08:54+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Automation for the smallest. Zero part. Planning | ProHoster","description":"O CDS acabou, mas o desejo incontrol\u00e1vel de escrever permanece.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445. \u0427\u0430\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u0430\u044f. \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 | ProHoster","og:description":"\u0421\u0414\u0421\u041c \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u2014 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/avtomatizatsiya-dlya-samyh-malenkih-chast-nulevaya-planirovanie","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:08:54+00:00","article:modified_time":"2019-10-31T19:08:54+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35972","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 01:28:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 09:58:22","updated":"2026-01-22 01:28:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/35972","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=35972"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/35972\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/26891"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=35972"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=35972"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=35972"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}