[{"data":1,"prerenderedAt":1912},["ShallowReactive",2],{"doc-es-\u002Fes\u002Fdocs\u002Foperaciones\u002Freferencia-cli":3,"docs-es-all":1842},{"id":4,"title":5,"body":6,"category":1824,"description":1825,"draft":1826,"extension":1827,"icon":1828,"lastReviewed":1829,"meta":1830,"navigation":1831,"order":611,"path":1832,"prerequisites":1833,"readingTime":1834,"seo":1835,"stem":1836,"tags":1837,"__hash__":1841},"docs_es\u002Fes\u002Fdocs\u002Foperaciones\u002Freferencia-cli.md","Referencia completa del CLI",{"type":7,"value":8,"toc":1752},"minimark",[9,24,29,32,39,42,77,93,99,102,141,155,162,172,175,179,182,188,191,212,218,224,227,261,273,279,282,315,321,324,343,349,352,368,382,384,388,391,397,400,420,428,434,437,454,460,463,486,495,501,504,536,538,542,545,551,554,572,582,588,591,615,621,624,641,647,650,666,672,675,695,709,715,718,740,746,749,771,773,777,780,786,789,814,820,823,839,845,848,863,869,872,887,893,899,922,924,928,931,937,940,981,987,990,1019,1025,1032,1062,1068,1071,1092,1098,1101,1117,1119,1123,1130,1136,1139,1157,1163,1166,1187,1193,1196,1212,1218,1221,1237,1243,1246,1262,1264,1268,1271,1277,1280,1299,1305,1308,1324,1326,1330,1336,1339,1358,1364,1367,1390,1392,1396,1402,1405,1450,1466,1468,1472,1475,1481,1484,1502,1505,1511,1514,1532,1539,1545,1548,1579,1581,1585,1591,1594,1626,1632,1635,1652,1654,1658,1745,1748],[10,11,12,13,17,18,23],"p",{},"Esta página lista todos los comandos del binario ",[14,15,16],"code",{},"heroctl",". Úsala como referencia de mesa, no como tutorial. Para introducción, empieza en ",[19,20,22],"a",{"href":21},"\u002Fes\u002Fdocs\u002Foperaciones\u002Finstalacion","Instalación",".",[25,26,28],"h2",{"id":27},"modos-del-binario","Modos del binario",[10,30,31],{},"El mismo ejecutable cambia de rol por la flag inicial.",[33,34,36],"h3",{"id":35},"heroctl-server",[14,37,38],{},"heroctl server",[10,40,41],{},"Inicia el plano de control. Corre como servicio systemd en producción.",[43,44,49],"pre",{"className":45,"code":46,"language":47,"meta":48,"style":48},"language-bash shiki shiki-themes github-dark-default","sudo heroctl server --bootstrap --advertise 10.0.0.1\n","bash","",[14,50,51],{"__ignoreMap":48},[52,53,56,60,64,67,71,74],"span",{"class":54,"line":55},"line",1,[52,57,59],{"class":58},"sQhOw","sudo",[52,61,63],{"class":62},"s9uIt"," heroctl",[52,65,66],{"class":62}," server",[52,68,70],{"class":69},"sFSAA"," --bootstrap",[52,72,73],{"class":69}," --advertise",[52,75,76],{"class":69}," 10.0.0.1\n",[10,78,79,80,83,84,83,87,83,90,23],{},"Flags principales: ",[14,81,82],{},"--bootstrap",", ",[14,85,86],{},"--advertise",[14,88,89],{},"--config",[14,91,92],{},"--data-dir",[33,94,96],{"id":95},"heroctl-agent",[14,97,98],{},"heroctl agent",[10,100,101],{},"Inicia un worker. Ejecuta contenedores y reporta salud.",[43,103,105],{"className":45,"code":104,"language":47,"meta":48,"style":48},"sudo heroctl agent --token \u003CT> --advertise 10.0.0.10 --servers 10.0.0.1:8080,10.0.0.2:8080,10.0.0.3:8080\n",[14,106,107],{"__ignoreMap":48},[52,108,109,111,113,116,119,123,127,130,132,135,138],{"class":54,"line":55},[52,110,59],{"class":58},[52,112,63],{"class":62},[52,114,115],{"class":62}," agent",[52,117,118],{"class":69}," --token",[52,120,122],{"class":121},"suJrU"," \u003C",[52,124,126],{"class":125},"sZEs4","T",[52,128,129],{"class":121},">",[52,131,73],{"class":69},[52,133,134],{"class":69}," 10.0.0.10",[52,136,137],{"class":69}," --servers",[52,139,140],{"class":62}," 10.0.0.1:8080,10.0.0.2:8080,10.0.0.3:8080\n",[10,142,143,144,83,147,83,149,83,152,23],{},"Flags: ",[14,145,146],{},"--token",[14,148,86],{},[14,150,151],{},"--servers",[14,153,154],{},"--node-class",[33,156,158,161],{"id":157},"heroctl-cmd-modo-cli",[14,159,160],{},"heroctl \u003Ccmd>"," (modo CLI)",[10,163,164,165,168,169,23],{},"Sin flag de modo, el binario se vuelve cliente. Lee la dirección del servidor de la variable ",[14,166,167],{},"HEROCTL_ADDR"," o de la flag ",[14,170,171],{},"--addr",[173,174],"hr",{},[25,176,178],{"id":177},"cluster","Cluster",[10,180,181],{},"Comandos que cambian la topología del plano de control.",[33,183,185],{"id":184},"heroctl-cluster-init",[14,186,187],{},"heroctl cluster init",[10,189,190],{},"Crea el primer nodo. Corre una vez por instalación.",[43,192,194],{"className":45,"code":193,"language":47,"meta":48,"style":48},"sudo heroctl cluster init --advertise 10.0.0.1\n",[14,195,196],{"__ignoreMap":48},[52,197,198,200,202,205,208,210],{"class":54,"line":55},[52,199,59],{"class":58},[52,201,63],{"class":62},[52,203,204],{"class":62}," cluster",[52,206,207],{"class":62}," init",[52,209,73],{"class":69},[52,211,76],{"class":69},[10,213,214,215,23],{},"Salida: ",[14,216,217],{},"cluster initialized, node-id: node-1",[33,219,221],{"id":220},"heroctl-cluster-join",[14,222,223],{},"heroctl cluster join",[10,225,226],{},"Agrega un servidor al cluster existente.",[43,228,230],{"className":45,"code":229,"language":47,"meta":48,"style":48},"sudo heroctl cluster join --token \u003CT> --advertise 10.0.0.2 --servers 10.0.0.1:8080\n",[14,231,232],{"__ignoreMap":48},[52,233,234,236,238,240,243,245,247,249,251,253,256,258],{"class":54,"line":55},[52,235,59],{"class":58},[52,237,63],{"class":62},[52,239,204],{"class":62},[52,241,242],{"class":62}," join",[52,244,118],{"class":69},[52,246,122],{"class":121},[52,248,126],{"class":125},[52,250,129],{"class":121},[52,252,73],{"class":69},[52,254,255],{"class":69}," 10.0.0.2",[52,257,137],{"class":69},[52,259,260],{"class":62}," 10.0.0.1:8080\n",[10,262,143,263,83,265,83,267,83,269,272],{},[14,264,146],{},[14,266,86],{},[14,268,151],{},[14,270,271],{},"--role"," (server|agent).",[33,274,276],{"id":275},"heroctl-cluster-join-token",[14,277,278],{},"heroctl cluster join-token",[10,280,281],{},"Genera token firmado con TTL.",[43,283,285],{"className":45,"code":284,"language":47,"meta":48,"style":48},"heroctl cluster join-token --ttl 1h --role server\n# eyJhbGciOi...8X7Z\n",[14,286,287,308],{"__ignoreMap":48},[52,288,289,291,293,296,299,302,305],{"class":54,"line":55},[52,290,16],{"class":58},[52,292,204],{"class":62},[52,294,295],{"class":62}," join-token",[52,297,298],{"class":69}," --ttl",[52,300,301],{"class":62}," 1h",[52,303,304],{"class":69}," --role",[52,306,307],{"class":62}," server\n",[52,309,311],{"class":54,"line":310},2,[52,312,314],{"class":313},"sH3jZ","# eyJhbGciOi...8X7Z\n",[33,316,318],{"id":317},"heroctl-cluster-status",[14,319,320],{},"heroctl cluster status",[10,322,323],{},"Visión general del plano de control.",[43,325,327],{"className":45,"code":326,"language":47,"meta":48,"style":48},"heroctl cluster status\n# cluster: 3 nodes, quorum: ok, leader: node-1\n",[14,328,329,338],{"__ignoreMap":48},[52,330,331,333,335],{"class":54,"line":55},[52,332,16],{"class":58},[52,334,204],{"class":62},[52,336,337],{"class":62}," status\n",[52,339,340],{"class":54,"line":310},[52,341,342],{"class":313},"# cluster: 3 nodes, quorum: ok, leader: node-1\n",[33,344,346],{"id":345},"heroctl-cluster-leave",[14,347,348],{},"heroctl cluster leave",[10,350,351],{},"Remueve el nodo actual del cluster con salida ordenada.",[43,353,355],{"className":45,"code":354,"language":47,"meta":48,"style":48},"sudo heroctl cluster leave\n",[14,356,357],{"__ignoreMap":48},[52,358,359,361,363,365],{"class":54,"line":55},[52,360,59],{"class":58},[52,362,63],{"class":62},[52,364,204],{"class":62},[52,366,367],{"class":62}," leave\n",[369,370,371],"blockquote",{},[10,372,373,377,378,381],{},[374,375,376],"strong",{},"Atención:"," salir sin ",[14,379,380],{},"drain"," antes interrumpe los contenedores corriendo. Drena siempre primero.",[173,383],{},[25,385,387],{"id":386},"nodos","Nodos",[10,389,390],{},"Comandos que afectan a un nodo individual.",[33,392,394],{"id":393},"heroctl-node-list",[14,395,396],{},"heroctl node list",[10,398,399],{},"Lista todos los nodos con status.",[43,401,403],{"className":45,"code":402,"language":47,"meta":48,"style":48},"heroctl node list\n# node-1  server  ready   3.2 GB free   2 jobs\n",[14,404,405,415],{"__ignoreMap":48},[52,406,407,409,412],{"class":54,"line":55},[52,408,16],{"class":58},[52,410,411],{"class":62}," node",[52,413,414],{"class":62}," list\n",[52,416,417],{"class":54,"line":310},[52,418,419],{"class":313},"# node-1  server  ready   3.2 GB free   2 jobs\n",[10,421,143,422,83,425,23],{},[14,423,424],{},"--filter status=ready",[14,426,427],{},"--json",[33,429,431],{"id":430},"heroctl-node-info",[14,432,433],{},"heroctl node info",[10,435,436],{},"Detalles de un nodo: recursos, allocs, eventos.",[43,438,440],{"className":45,"code":439,"language":47,"meta":48,"style":48},"heroctl node info node-2\n",[14,441,442],{"__ignoreMap":48},[52,443,444,446,448,451],{"class":54,"line":55},[52,445,16],{"class":58},[52,447,411],{"class":62},[52,449,450],{"class":62}," info",[52,452,453],{"class":62}," node-2\n",[33,455,457],{"id":456},"heroctl-node-drain",[14,458,459],{},"heroctl node drain",[10,461,462],{},"Mueve workloads a otros nodos e impide nuevos jobs. Úsalo antes de mantenimiento.",[43,464,466],{"className":45,"code":465,"language":47,"meta":48,"style":48},"heroctl node drain node-2 --deadline 5m\n",[14,467,468],{"__ignoreMap":48},[52,469,470,472,474,477,480,483],{"class":54,"line":55},[52,471,16],{"class":58},[52,473,411],{"class":62},[52,475,476],{"class":62}," drain",[52,478,479],{"class":62}," node-2",[52,481,482],{"class":69}," --deadline",[52,484,485],{"class":62}," 5m\n",[10,487,143,488,83,491,494],{},[14,489,490],{},"--deadline",[14,492,493],{},"--force"," (no espera).",[33,496,498],{"id":497},"heroctl-node-eligibility",[14,499,500],{},"heroctl node eligibility",[10,502,503],{},"Marca un nodo como elegible o no para recibir workloads.",[43,505,507],{"className":45,"code":506,"language":47,"meta":48,"style":48},"heroctl node eligibility node-2 --ineligible\nheroctl node eligibility node-2 --eligible\n",[14,508,509,523],{"__ignoreMap":48},[52,510,511,513,515,518,520],{"class":54,"line":55},[52,512,16],{"class":58},[52,514,411],{"class":62},[52,516,517],{"class":62}," eligibility",[52,519,479],{"class":62},[52,521,522],{"class":69}," --ineligible\n",[52,524,525,527,529,531,533],{"class":54,"line":310},[52,526,16],{"class":58},[52,528,411],{"class":62},[52,530,517],{"class":62},[52,532,479],{"class":62},[52,534,535],{"class":69}," --eligible\n",[173,537],{},[25,539,541],{"id":540},"jobs","Jobs",[10,543,544],{},"Definición de aplicación. Corazón del sistema.",[33,546,548],{"id":547},"heroctl-job-submit",[14,549,550],{},"heroctl job submit",[10,552,553],{},"Envía un spec YAML al cluster.",[43,555,557],{"className":45,"code":556,"language":47,"meta":48,"style":48},"heroctl job submit app.yaml\n",[14,558,559],{"__ignoreMap":48},[52,560,561,563,566,569],{"class":54,"line":55},[52,562,16],{"class":58},[52,564,565],{"class":62}," job",[52,567,568],{"class":62}," submit",[52,570,571],{"class":62}," app.yaml\n",[10,573,143,574,577,578,581],{},[14,575,576],{},"--detach"," (no acompaña), ",[14,579,580],{},"--no-rolling"," (deploy inmediato).",[33,583,585],{"id":584},"heroctl-job-list",[14,586,587],{},"heroctl job list",[10,589,590],{},"Todos los jobs del cluster.",[43,592,594],{"className":45,"code":593,"language":47,"meta":48,"style":48},"heroctl job list\n# api-vendas    running   2\u002F2   v3   2h\n# worker-email  running   1\u002F1   v1   5d\n",[14,595,596,604,609],{"__ignoreMap":48},[52,597,598,600,602],{"class":54,"line":55},[52,599,16],{"class":58},[52,601,565],{"class":62},[52,603,414],{"class":62},[52,605,606],{"class":54,"line":310},[52,607,608],{"class":313},"# api-vendas    running   2\u002F2   v3   2h\n",[52,610,612],{"class":54,"line":611},3,[52,613,614],{"class":313},"# worker-email  running   1\u002F1   v1   5d\n",[33,616,618],{"id":617},"heroctl-job-status",[14,619,620],{},"heroctl job status",[10,622,623],{},"Estado detallado de un job: tasks, allocs, eventos.",[43,625,627],{"className":45,"code":626,"language":47,"meta":48,"style":48},"heroctl job status api-vendas\n",[14,628,629],{"__ignoreMap":48},[52,630,631,633,635,638],{"class":54,"line":55},[52,632,16],{"class":58},[52,634,565],{"class":62},[52,636,637],{"class":62}," status",[52,639,640],{"class":62}," api-vendas\n",[33,642,644],{"id":643},"heroctl-job-restart",[14,645,646],{},"heroctl job restart",[10,648,649],{},"Reinicia todas las réplicas con la misma versión. Útil tras cambiar secretos.",[43,651,653],{"className":45,"code":652,"language":47,"meta":48,"style":48},"heroctl job restart api-vendas\n",[14,654,655],{"__ignoreMap":48},[52,656,657,659,661,664],{"class":54,"line":55},[52,658,16],{"class":58},[52,660,565],{"class":62},[52,662,663],{"class":62}," restart",[52,665,640],{"class":62},[33,667,669],{"id":668},"heroctl-job-stop",[14,670,671],{},"heroctl job stop",[10,673,674],{},"Detiene el job y remueve los contenedores.",[43,676,678],{"className":45,"code":677,"language":47,"meta":48,"style":48},"heroctl job stop api-vendas --purge\n",[14,679,680],{"__ignoreMap":48},[52,681,682,684,686,689,692],{"class":54,"line":55},[52,683,16],{"class":58},[52,685,565],{"class":62},[52,687,688],{"class":62}," stop",[52,690,691],{"class":62}," api-vendas",[52,693,694],{"class":69}," --purge\n",[10,696,697,698,701,702,705,706,23],{},"La flag ",[14,699,700],{},"--purge"," borra historial. Sin ella, el job queda en ",[14,703,704],{},"stopped"," y puede volver con ",[14,707,708],{},"submit",[33,710,712],{"id":711},"heroctl-job-scale",[14,713,714],{},"heroctl job scale",[10,716,717],{},"Altera la cantidad de réplicas sin nuevo deploy.",[43,719,721],{"className":45,"code":720,"language":47,"meta":48,"style":48},"heroctl job scale api-vendas web=4\n",[14,722,723],{"__ignoreMap":48},[52,724,725,727,729,732,734,737],{"class":54,"line":55},[52,726,16],{"class":58},[52,728,565],{"class":62},[52,730,731],{"class":62}," scale",[52,733,691],{"class":62},[52,735,736],{"class":62}," web=",[52,738,739],{"class":69},"4\n",[33,741,743],{"id":742},"heroctl-job-revert",[14,744,745],{},"heroctl job revert",[10,747,748],{},"Vuelve a una versión anterior.",[43,750,752],{"className":45,"code":751,"language":47,"meta":48,"style":48},"heroctl job revert api-vendas --version 2\n",[14,753,754],{"__ignoreMap":48},[52,755,756,758,760,763,765,768],{"class":54,"line":55},[52,757,16],{"class":58},[52,759,565],{"class":62},[52,761,762],{"class":62}," revert",[52,764,691],{"class":62},[52,766,767],{"class":69}," --version",[52,769,770],{"class":69}," 2\n",[173,772],{},[25,774,776],{"id":775},"allocations","Allocations",[10,778,779],{},"Una alloc es una réplica corriendo en un nodo.",[33,781,783],{"id":782},"heroctl-alloc-list",[14,784,785],{},"heroctl alloc list",[10,787,788],{},"Lista réplicas de un job.",[43,790,792],{"className":45,"code":791,"language":47,"meta":48,"style":48},"heroctl alloc list --job api-vendas\n# web-c3d4   node-1   running   healthy   2h\n",[14,793,794,809],{"__ignoreMap":48},[52,795,796,798,801,804,807],{"class":54,"line":55},[52,797,16],{"class":58},[52,799,800],{"class":62}," alloc",[52,802,803],{"class":62}," list",[52,805,806],{"class":69}," --job",[52,808,640],{"class":62},[52,810,811],{"class":54,"line":310},[52,812,813],{"class":313},"# web-c3d4   node-1   running   healthy   2h\n",[33,815,817],{"id":816},"heroctl-alloc-info",[14,818,819],{},"heroctl alloc info",[10,821,822],{},"Detalles: imagen, recursos, eventos, restarts.",[43,824,826],{"className":45,"code":825,"language":47,"meta":48,"style":48},"heroctl alloc info web-c3d4\n",[14,827,828],{"__ignoreMap":48},[52,829,830,832,834,836],{"class":54,"line":55},[52,831,16],{"class":58},[52,833,800],{"class":62},[52,835,450],{"class":62},[52,837,838],{"class":62}," web-c3d4\n",[33,840,842],{"id":841},"heroctl-alloc-stop",[14,843,844],{},"heroctl alloc stop",[10,846,847],{},"Mata una réplica. El cluster la recrea en otro nodo.",[43,849,851],{"className":45,"code":850,"language":47,"meta":48,"style":48},"heroctl alloc stop web-c3d4\n",[14,852,853],{"__ignoreMap":48},[52,854,855,857,859,861],{"class":54,"line":55},[52,856,16],{"class":58},[52,858,800],{"class":62},[52,860,688],{"class":62},[52,862,838],{"class":62},[33,864,866],{"id":865},"heroctl-alloc-restart",[14,867,868],{},"heroctl alloc restart",[10,870,871],{},"Reinicia el contenedor manteniendo la alloc.",[43,873,875],{"className":45,"code":874,"language":47,"meta":48,"style":48},"heroctl alloc restart web-c3d4\n",[14,876,877],{"__ignoreMap":48},[52,878,879,881,883,885],{"class":54,"line":55},[52,880,16],{"class":58},[52,882,800],{"class":62},[52,884,663],{"class":62},[52,886,838],{"class":62},[33,888,890],{"id":889},"heroctl-alloc-logs",[14,891,892],{},"heroctl alloc logs",[10,894,895,896,23],{},"Atajo para ",[14,897,898],{},"heroctl logs --alloc",[43,900,902],{"className":45,"code":901,"language":47,"meta":48,"style":48},"heroctl alloc logs web-c3d4 --since 10m\n",[14,903,904],{"__ignoreMap":48},[52,905,906,908,910,913,916,919],{"class":54,"line":55},[52,907,16],{"class":58},[52,909,800],{"class":62},[52,911,912],{"class":62}," logs",[52,914,915],{"class":62}," web-c3d4",[52,917,918],{"class":69}," --since",[52,920,921],{"class":62}," 10m\n",[173,923],{},[25,925,927],{"id":926},"secretos","Secretos",[10,929,930],{},"Valores sensibles inyectados en runtime.",[33,932,934],{"id":933},"heroctl-secret-create",[14,935,936],{},"heroctl secret create",[10,938,939],{},"Crea un secreto.",[43,941,943],{"className":45,"code":942,"language":47,"meta":48,"style":48},"heroctl secret create db-password --value 'sN9kL...'\nheroctl secret create tls-cert --file .\u002Fcert.pem\n",[14,944,945,964],{"__ignoreMap":48},[52,946,947,949,952,955,958,961],{"class":54,"line":55},[52,948,16],{"class":58},[52,950,951],{"class":62}," secret",[52,953,954],{"class":62}," create",[52,956,957],{"class":62}," db-password",[52,959,960],{"class":69}," --value",[52,962,963],{"class":62}," 'sN9kL...'\n",[52,965,966,968,970,972,975,978],{"class":54,"line":310},[52,967,16],{"class":58},[52,969,951],{"class":62},[52,971,954],{"class":62},[52,973,974],{"class":62}," tls-cert",[52,976,977],{"class":69}," --file",[52,979,980],{"class":62}," .\u002Fcert.pem\n",[33,982,984],{"id":983},"heroctl-secret-list",[14,985,986],{},"heroctl secret list",[10,988,989],{},"Lista nombres (los valores nunca aparecen).",[43,991,993],{"className":45,"code":992,"language":47,"meta":48,"style":48},"heroctl secret list\n# NAME            VERSION  CREATED\n# db-password     3        2d ago\n# jwt-secret      1        5d ago\n",[14,994,995,1003,1008,1013],{"__ignoreMap":48},[52,996,997,999,1001],{"class":54,"line":55},[52,998,16],{"class":58},[52,1000,951],{"class":62},[52,1002,414],{"class":62},[52,1004,1005],{"class":54,"line":310},[52,1006,1007],{"class":313},"# NAME            VERSION  CREATED\n",[52,1009,1010],{"class":54,"line":611},[52,1011,1012],{"class":313},"# db-password     3        2d ago\n",[52,1014,1016],{"class":54,"line":1015},4,[52,1017,1018],{"class":313},"# jwt-secret      1        5d ago\n",[33,1020,1022],{"id":1021},"heroctl-secret-get",[14,1023,1024],{},"heroctl secret get",[10,1026,1027,1028,1031],{},"Muestra metadata. El valor solo sale con ",[14,1029,1030],{},"--reveal"," y auditoría.",[43,1033,1035],{"className":45,"code":1034,"language":47,"meta":48,"style":48},"heroctl secret get db-password\nheroctl secret get db-password --reveal\n",[14,1036,1037,1049],{"__ignoreMap":48},[52,1038,1039,1041,1043,1046],{"class":54,"line":55},[52,1040,16],{"class":58},[52,1042,951],{"class":62},[52,1044,1045],{"class":62}," get",[52,1047,1048],{"class":62}," db-password\n",[52,1050,1051,1053,1055,1057,1059],{"class":54,"line":310},[52,1052,16],{"class":58},[52,1054,951],{"class":62},[52,1056,1045],{"class":62},[52,1058,957],{"class":62},[52,1060,1061],{"class":69}," --reveal\n",[33,1063,1065],{"id":1064},"heroctl-secret-update",[14,1066,1067],{},"heroctl secret update",[10,1069,1070],{},"Crea nueva versión. Los jobs que la referencian la toman en el próximo reinicio.",[43,1072,1074],{"className":45,"code":1073,"language":47,"meta":48,"style":48},"heroctl secret update db-password --value 'nNnK7...'\n",[14,1075,1076],{"__ignoreMap":48},[52,1077,1078,1080,1082,1085,1087,1089],{"class":54,"line":55},[52,1079,16],{"class":58},[52,1081,951],{"class":62},[52,1083,1084],{"class":62}," update",[52,1086,957],{"class":62},[52,1088,960],{"class":69},[52,1090,1091],{"class":62}," 'nNnK7...'\n",[33,1093,1095],{"id":1094},"heroctl-secret-delete",[14,1096,1097],{},"heroctl secret delete",[10,1099,1100],{},"Remueve. Falla si algún job activo la referencia.",[43,1102,1104],{"className":45,"code":1103,"language":47,"meta":48,"style":48},"heroctl secret delete db-password\n",[14,1105,1106],{"__ignoreMap":48},[52,1107,1108,1110,1112,1115],{"class":54,"line":55},[52,1109,16],{"class":58},[52,1111,951],{"class":62},[52,1113,1114],{"class":62}," delete",[52,1116,1048],{"class":62},[173,1118],{},[25,1120,1122],{"id":1121},"deploys","Deploys",[10,1124,1125,1126,1129],{},"Cada ",[14,1127,1128],{},"job submit"," crea un deploy. Los comandos abajo controlan ese proceso.",[33,1131,1133],{"id":1132},"heroctl-deploy-list",[14,1134,1135],{},"heroctl deploy list",[10,1137,1138],{},"Historial de deploys.",[43,1140,1142],{"className":45,"code":1141,"language":47,"meta":48,"style":48},"heroctl deploy list --job api-vendas\n",[14,1143,1144],{"__ignoreMap":48},[52,1145,1146,1148,1151,1153,1155],{"class":54,"line":55},[52,1147,16],{"class":58},[52,1149,1150],{"class":62}," deploy",[52,1152,803],{"class":62},[52,1154,806],{"class":69},[52,1156,640],{"class":62},[33,1158,1160],{"id":1159},"heroctl-deploy-status",[14,1161,1162],{},"heroctl deploy status",[10,1164,1165],{},"Progreso actual.",[43,1167,1169],{"className":45,"code":1168,"language":47,"meta":48,"style":48},"heroctl deploy status dep-2026-04-26-001\n# strategy: rolling, progress: 2\u002F2, state: complete\n",[14,1170,1171,1182],{"__ignoreMap":48},[52,1172,1173,1175,1177,1179],{"class":54,"line":55},[52,1174,16],{"class":58},[52,1176,1150],{"class":62},[52,1178,637],{"class":62},[52,1180,1181],{"class":62}," dep-2026-04-26-001\n",[52,1183,1184],{"class":54,"line":310},[52,1185,1186],{"class":313},"# strategy: rolling, progress: 2\u002F2, state: complete\n",[33,1188,1190],{"id":1189},"heroctl-deploy-pause",[14,1191,1192],{},"heroctl deploy pause",[10,1194,1195],{},"Congela un rolling update en curso. Las allocs ya cambiadas quedan nuevas, las restantes esperan.",[43,1197,1199],{"className":45,"code":1198,"language":47,"meta":48,"style":48},"heroctl deploy pause dep-2026-04-26-001\n",[14,1200,1201],{"__ignoreMap":48},[52,1202,1203,1205,1207,1210],{"class":54,"line":55},[52,1204,16],{"class":58},[52,1206,1150],{"class":62},[52,1208,1209],{"class":62}," pause",[52,1211,1181],{"class":62},[33,1213,1215],{"id":1214},"heroctl-deploy-resume",[14,1216,1217],{},"heroctl deploy resume",[10,1219,1220],{},"Continúa un deploy pausado.",[43,1222,1224],{"className":45,"code":1223,"language":47,"meta":48,"style":48},"heroctl deploy resume dep-2026-04-26-001\n",[14,1225,1226],{"__ignoreMap":48},[52,1227,1228,1230,1232,1235],{"class":54,"line":55},[52,1229,16],{"class":58},[52,1231,1150],{"class":62},[52,1233,1234],{"class":62}," resume",[52,1236,1181],{"class":62},[33,1238,1240],{"id":1239},"heroctl-deploy-abort",[14,1241,1242],{},"heroctl deploy abort",[10,1244,1245],{},"Cancela y revierte a la versión anterior.",[43,1247,1249],{"className":45,"code":1248,"language":47,"meta":48,"style":48},"heroctl deploy abort dep-2026-04-26-001\n",[14,1250,1251],{"__ignoreMap":48},[52,1252,1253,1255,1257,1260],{"class":54,"line":55},[52,1254,16],{"class":58},[52,1256,1150],{"class":62},[52,1258,1259],{"class":62}," abort",[52,1261,1181],{"class":62},[173,1263],{},[25,1265,1267],{"id":1266},"ingress","Ingress",[10,1269,1270],{},"Dominios públicos ruteados a jobs.",[33,1272,1274],{"id":1273},"heroctl-ingress-list",[14,1275,1276],{},"heroctl ingress list",[10,1278,1279],{},"Todos los dominios activos.",[43,1281,1283],{"className":45,"code":1282,"language":47,"meta":48,"style":48},"heroctl ingress list\n# api.minhaempresa.com   api-vendas\u002Fweb   tls   2 backends\n",[14,1284,1285,1294],{"__ignoreMap":48},[52,1286,1287,1289,1292],{"class":54,"line":55},[52,1288,16],{"class":58},[52,1290,1291],{"class":62}," ingress",[52,1293,414],{"class":62},[52,1295,1296],{"class":54,"line":310},[52,1297,1298],{"class":313},"# api.minhaempresa.com   api-vendas\u002Fweb   tls   2 backends\n",[33,1300,1302],{"id":1301},"heroctl-ingress-info",[14,1303,1304],{},"heroctl ingress info",[10,1306,1307],{},"Detalles de un dominio: backends, certificado, métricas.",[43,1309,1311],{"className":45,"code":1310,"language":47,"meta":48,"style":48},"heroctl ingress info api.minhaempresa.com\n",[14,1312,1313],{"__ignoreMap":48},[52,1314,1315,1317,1319,1321],{"class":54,"line":55},[52,1316,16],{"class":58},[52,1318,1291],{"class":62},[52,1320,450],{"class":62},[52,1322,1323],{"class":62}," api.minhaempresa.com\n",[173,1325],{},[25,1327,1329],{"id":1328},"metricas","Métricas",[33,1331,1333],{"id":1332},"heroctl-metrics-status",[14,1334,1335],{},"heroctl metrics status",[10,1337,1338],{},"Estado del colector interno.",[43,1340,1342],{"className":45,"code":1341,"language":47,"meta":48,"style":48},"heroctl metrics status\n# scraping: 14 targets, last_run: 12s ago\n",[14,1343,1344,1353],{"__ignoreMap":48},[52,1345,1346,1348,1351],{"class":54,"line":55},[52,1347,16],{"class":58},[52,1349,1350],{"class":62}," metrics",[52,1352,337],{"class":62},[52,1354,1355],{"class":54,"line":310},[52,1356,1357],{"class":313},"# scraping: 14 targets, last_run: 12s ago\n",[33,1359,1361],{"id":1360},"heroctl-metrics-query",[14,1362,1363],{},"heroctl metrics query",[10,1365,1366],{},"Consulta ad-hoc por nombre de métrica.",[43,1368,1370],{"className":45,"code":1369,"language":47,"meta":48,"style":48},"heroctl metrics query 'cpu_usage{job=\"api-vendas\"}' --range 1h\n",[14,1371,1372],{"__ignoreMap":48},[52,1373,1374,1376,1378,1381,1384,1387],{"class":54,"line":55},[52,1375,16],{"class":58},[52,1377,1350],{"class":62},[52,1379,1380],{"class":62}," query",[52,1382,1383],{"class":62}," 'cpu_usage{job=\"api-vendas\"}'",[52,1385,1386],{"class":69}," --range",[52,1388,1389],{"class":62}," 1h\n",[173,1391],{},[25,1393,1395],{"id":1394},"logs","Logs",[33,1397,1399],{"id":1398},"heroctl-logs",[14,1400,1401],{},"heroctl logs",[10,1403,1404],{},"Una interfaz, tres objetivos.",[43,1406,1408],{"className":45,"code":1407,"language":47,"meta":48,"style":48},"heroctl logs --job api-vendas\nheroctl logs --alloc web-c3d4\nheroctl logs --job api-vendas --task web -f\n",[14,1409,1410,1420,1431],{"__ignoreMap":48},[52,1411,1412,1414,1416,1418],{"class":54,"line":55},[52,1413,16],{"class":58},[52,1415,912],{"class":62},[52,1417,806],{"class":69},[52,1419,640],{"class":62},[52,1421,1422,1424,1426,1429],{"class":54,"line":310},[52,1423,16],{"class":58},[52,1425,912],{"class":62},[52,1427,1428],{"class":69}," --alloc",[52,1430,838],{"class":62},[52,1432,1433,1435,1437,1439,1441,1444,1447],{"class":54,"line":611},[52,1434,16],{"class":58},[52,1436,912],{"class":62},[52,1438,806],{"class":69},[52,1440,691],{"class":62},[52,1442,1443],{"class":69}," --task",[52,1445,1446],{"class":62}," web",[52,1448,1449],{"class":69}," -f\n",[10,1451,1452,1453,1456,1457,83,1460,83,1463,23],{},"Flags importantes: ",[14,1454,1455],{},"-f"," (follow), ",[14,1458,1459],{},"--since 10m",[14,1461,1462],{},"--until '2026-04-26T18:00'",[14,1464,1465],{},"--grep ERROR",[173,1467],{},[25,1469,1471],{"id":1470},"snapshot","Snapshot",[10,1473,1474],{},"Backup del estado completo del cluster.",[33,1476,1478],{"id":1477},"heroctl-snapshot-save",[14,1479,1480],{},"heroctl snapshot save",[10,1482,1483],{},"Guarda snapshot en archivo.",[43,1485,1487],{"className":45,"code":1486,"language":47,"meta":48,"style":48},"heroctl snapshot save backup-2026-04-26.snap\n",[14,1488,1489],{"__ignoreMap":48},[52,1490,1491,1493,1496,1499],{"class":54,"line":55},[52,1492,16],{"class":58},[52,1494,1495],{"class":62}," snapshot",[52,1497,1498],{"class":62}," save",[52,1500,1501],{"class":62}," backup-2026-04-26.snap\n",[10,1503,1504],{},"La salida incluye tamaño y hash. Guárdalo en lugar seguro fuera del cluster.",[33,1506,1508],{"id":1507},"heroctl-snapshot-restore",[14,1509,1510],{},"heroctl snapshot restore",[10,1512,1513],{},"Restaura el cluster a partir de archivo.",[43,1515,1517],{"className":45,"code":1516,"language":47,"meta":48,"style":48},"sudo heroctl snapshot restore backup-2026-04-26.snap\n",[14,1518,1519],{"__ignoreMap":48},[52,1520,1521,1523,1525,1527,1530],{"class":54,"line":55},[52,1522,59],{"class":58},[52,1524,63],{"class":62},[52,1526,1495],{"class":62},[52,1528,1529],{"class":62}," restore",[52,1531,1501],{"class":62},[369,1533,1534],{},[10,1535,1536,1538],{},[374,1537,376],{}," restore reescribe el estado actual. Úsalo solo en recuperación de desastre, con el cluster fuera del aire.",[33,1540,1542],{"id":1541},"heroctl-snapshot-inspect",[14,1543,1544],{},"heroctl snapshot inspect",[10,1546,1547],{},"Muestra metadata sin aplicar.",[43,1549,1551],{"className":45,"code":1550,"language":47,"meta":48,"style":48},"heroctl snapshot inspect backup-2026-04-26.snap\n# created: 2026-04-26 14:00 UTC\n# jobs: 12, secrets: 8, nodes: 4\n# size: 2.4 MB\n",[14,1552,1553,1564,1569,1574],{"__ignoreMap":48},[52,1554,1555,1557,1559,1562],{"class":54,"line":55},[52,1556,16],{"class":58},[52,1558,1495],{"class":62},[52,1560,1561],{"class":62}," inspect",[52,1563,1501],{"class":62},[52,1565,1566],{"class":54,"line":310},[52,1567,1568],{"class":313},"# created: 2026-04-26 14:00 UTC\n",[52,1570,1571],{"class":54,"line":611},[52,1572,1573],{"class":313},"# jobs: 12, secrets: 8, nodes: 4\n",[52,1575,1576],{"class":54,"line":1015},[52,1577,1578],{"class":313},"# size: 2.4 MB\n",[173,1580],{},[25,1582,1584],{"id":1583},"otros","Otros",[33,1586,1588],{"id":1587},"heroctl-status",[14,1589,1590],{},"heroctl status",[10,1592,1593],{},"Resumen general. Combina cluster + jobs + nodos + ingress en una pantalla.",[43,1595,1597],{"className":45,"code":1596,"language":47,"meta":48,"style":48},"heroctl status\n# cluster:  3 nodes (ok)\n# jobs:     5 running, 0 failed\n# allocs:   12\u002F12 healthy\n# ingress:  3 domains, all certs valid\n",[14,1598,1599,1605,1610,1615,1620],{"__ignoreMap":48},[52,1600,1601,1603],{"class":54,"line":55},[52,1602,16],{"class":58},[52,1604,337],{"class":62},[52,1606,1607],{"class":54,"line":310},[52,1608,1609],{"class":313},"# cluster:  3 nodes (ok)\n",[52,1611,1612],{"class":54,"line":611},[52,1613,1614],{"class":313},"# jobs:     5 running, 0 failed\n",[52,1616,1617],{"class":54,"line":1015},[52,1618,1619],{"class":313},"# allocs:   12\u002F12 healthy\n",[52,1621,1623],{"class":54,"line":1622},5,[52,1624,1625],{"class":313},"# ingress:  3 domains, all certs valid\n",[33,1627,1629],{"id":1628},"heroctl-version",[14,1630,1631],{},"heroctl version",[10,1633,1634],{},"Versión del binario y build.",[43,1636,1638],{"className":45,"code":1637,"language":47,"meta":48,"style":48},"heroctl version\n# heroctl 1.0.0 (commit abc123, build 2026-04-20)\n",[14,1639,1640,1647],{"__ignoreMap":48},[52,1641,1642,1644],{"class":54,"line":55},[52,1643,16],{"class":58},[52,1645,1646],{"class":62}," version\n",[52,1648,1649],{"class":54,"line":310},[52,1650,1651],{"class":313},"# heroctl 1.0.0 (commit abc123, build 2026-04-20)\n",[173,1653],{},[25,1655,1657],{"id":1656},"variables-de-entorno-utiles","Variables de entorno útiles",[1659,1660,1661,1677],"table",{},[1662,1663,1664],"thead",{},[1665,1666,1667,1671,1674],"tr",{},[1668,1669,1670],"th",{},"Variable",[1668,1672,1673],{},"Función",[1668,1675,1676],{},"Ejemplo",[1678,1679,1680,1695,1710,1725],"tbody",{},[1665,1681,1682,1687,1690],{},[1683,1684,1685],"td",{},[14,1686,167],{},[1683,1688,1689],{},"dirección del servidor",[1683,1691,1692],{},[14,1693,1694],{},"https:\u002F\u002Fmanage.exemplo.com",[1665,1696,1697,1702,1705],{},[1683,1698,1699],{},[14,1700,1701],{},"HEROCTL_TOKEN",[1683,1703,1704],{},"token de auth",[1683,1706,1707],{},[14,1708,1709],{},"eyJh...",[1665,1711,1712,1717,1720],{},[1683,1713,1714],{},[14,1715,1716],{},"HEROCTL_NAMESPACE",[1683,1718,1719],{},"namespace activo",[1683,1721,1722],{},[14,1723,1724],{},"production",[1665,1726,1727,1732,1735],{},[1683,1728,1729],{},[14,1730,1731],{},"HEROCTL_FORMAT",[1683,1733,1734],{},"formato de salida por defecto",[1683,1736,1737,83,1740,83,1743],{},[14,1738,1739],{},"json",[14,1741,1742],{},"yaml",[14,1744,1659],{},[10,1746,1747],{},"Configúralas en el shell para evitar repetir flags en cada comando.",[1749,1750,1751],"style",{},"html pre.shiki code .sQhOw, html code.shiki .sQhOw{--shiki-default:#FFA657}html pre.shiki code .s9uIt, html code.shiki .s9uIt{--shiki-default:#A5D6FF}html pre.shiki code .sFSAA, html code.shiki .sFSAA{--shiki-default:#79C0FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .suJrU, html code.shiki .suJrU{--shiki-default:#FF7B72}html pre.shiki code .sZEs4, html code.shiki .sZEs4{--shiki-default:#E6EDF3}html pre.shiki code .sH3jZ, html code.shiki .sH3jZ{--shiki-default:#8B949E}",{"title":48,"searchDepth":310,"depth":310,"links":1753},[1754,1760,1767,1773,1782,1789,1796,1803,1807,1811,1814,1819,1823],{"id":27,"depth":310,"text":28,"children":1755},[1756,1757,1758],{"id":35,"depth":611,"text":38},{"id":95,"depth":611,"text":98},{"id":157,"depth":611,"text":1759},"heroctl \u003Ccmd> (modo CLI)",{"id":177,"depth":310,"text":178,"children":1761},[1762,1763,1764,1765,1766],{"id":184,"depth":611,"text":187},{"id":220,"depth":611,"text":223},{"id":275,"depth":611,"text":278},{"id":317,"depth":611,"text":320},{"id":345,"depth":611,"text":348},{"id":386,"depth":310,"text":387,"children":1768},[1769,1770,1771,1772],{"id":393,"depth":611,"text":396},{"id":430,"depth":611,"text":433},{"id":456,"depth":611,"text":459},{"id":497,"depth":611,"text":500},{"id":540,"depth":310,"text":541,"children":1774},[1775,1776,1777,1778,1779,1780,1781],{"id":547,"depth":611,"text":550},{"id":584,"depth":611,"text":587},{"id":617,"depth":611,"text":620},{"id":643,"depth":611,"text":646},{"id":668,"depth":611,"text":671},{"id":711,"depth":611,"text":714},{"id":742,"depth":611,"text":745},{"id":775,"depth":310,"text":776,"children":1783},[1784,1785,1786,1787,1788],{"id":782,"depth":611,"text":785},{"id":816,"depth":611,"text":819},{"id":841,"depth":611,"text":844},{"id":865,"depth":611,"text":868},{"id":889,"depth":611,"text":892},{"id":926,"depth":310,"text":927,"children":1790},[1791,1792,1793,1794,1795],{"id":933,"depth":611,"text":936},{"id":983,"depth":611,"text":986},{"id":1021,"depth":611,"text":1024},{"id":1064,"depth":611,"text":1067},{"id":1094,"depth":611,"text":1097},{"id":1121,"depth":310,"text":1122,"children":1797},[1798,1799,1800,1801,1802],{"id":1132,"depth":611,"text":1135},{"id":1159,"depth":611,"text":1162},{"id":1189,"depth":611,"text":1192},{"id":1214,"depth":611,"text":1217},{"id":1239,"depth":611,"text":1242},{"id":1266,"depth":310,"text":1267,"children":1804},[1805,1806],{"id":1273,"depth":611,"text":1276},{"id":1301,"depth":611,"text":1304},{"id":1328,"depth":310,"text":1329,"children":1808},[1809,1810],{"id":1332,"depth":611,"text":1335},{"id":1360,"depth":611,"text":1363},{"id":1394,"depth":310,"text":1395,"children":1812},[1813],{"id":1398,"depth":611,"text":1401},{"id":1470,"depth":310,"text":1471,"children":1815},[1816,1817,1818],{"id":1477,"depth":611,"text":1480},{"id":1507,"depth":611,"text":1510},{"id":1541,"depth":611,"text":1544},{"id":1583,"depth":310,"text":1584,"children":1820},[1821,1822],{"id":1587,"depth":611,"text":1590},{"id":1628,"depth":611,"text":1631},{"id":1656,"depth":310,"text":1657},"operacoes","Todos los comandos heroctl con sinopsis, flags y ejemplo. Úsalo como chuleta de mesa.",false,"md","i-lucide-terminal","2026-04-26",{},true,"\u002Fes\u002Fdocs\u002Foperaciones\u002Freferencia-cli",[],"20 min",{"title":5,"description":1825},"es\u002Fdocs\u002Foperaciones\u002Freferencia-cli",[1838,1839,1840],"cli","referencia","comandos","VLUbMWimrVNH3S9neKthWqx6Q0DM3KitSqzrlRjcuQ0",[1843,1849,1855,1860,1866,1871,1874,1879,1884,1885,1891,1895,1901,1906],{"path":1844,"title":1845,"description":1846,"category":1847,"order":55,"icon":1848},"\u002Fes\u002Fdocs\u002Fapi\u002Freferencia-api","Referencia de la API REST","Endpoints, autenticación JWT, ejemplos con curl y patrones de error de la API de HeroCtl.","api","i-lucide-code",{"path":1850,"title":1851,"description":1852,"category":1853,"order":55,"icon":1854},"\u002Fes\u002Fdocs\u002Fdeploy\u002Fprimer-deploy","Deploy de la primera app","Levanta una aplicación Node.js con base Postgres en 50 líneas de YAML. Incluye health check, rolling update y rollback.","deploy","i-lucide-rocket",{"path":1856,"title":1857,"description":1858,"category":1853,"order":310,"icon":1859},"\u002Fes\u002Fdocs\u002Fdeploy\u002Frolling-canary-blue-green","Rolling, canary, blue-green y rainbow","Cuatro estrategias de deploy. Cuándo usar cada una, con ejemplos completos y trade-offs honestos.","i-lucide-git-branch",{"path":1861,"title":1862,"description":1863,"category":1864,"order":310,"icon":1865},"\u002Fes\u002Fdocs\u002Fobservabilidad\u002Fbackup-restauracion","Backup y restauración del estado del cluster","Cómo guardar, programar y restaurar snapshots del plano de control de HeroCtl. Estrategia de disaster recovery.","observabilidade","i-lucide-archive",{"path":1867,"title":1868,"description":1869,"category":1864,"order":55,"icon":1870},"\u002Fes\u002Fdocs\u002Fobservabilidad\u002Fmetricas-logs","Métricas y logs","Recolección de métricas, logs y traces sin montar una pila de observabilidad externa. Cuándo vale, y cuándo integrar con herramienta de fuera.","i-lucide-activity",{"path":21,"title":22,"description":1872,"category":1824,"order":55,"icon":1873},"Instala HeroCtl en cualquier servidor Linux con Docker en un solo comando. Cubre prerrequisitos, bootstrap y verificación.","i-lucide-download",{"path":1875,"title":1876,"description":1877,"category":1824,"order":1015,"icon":1878},"\u002Fes\u002Fdocs\u002Foperaciones\u002Fmulti-region","Multi-region (en planificación Q4 2026)","Qué esperar de multi-region en HeroCtl, cómo correr en varias regiones hoy y la hoja de ruta hasta 2027.","i-lucide-globe",{"path":1880,"title":1881,"description":1882,"category":1824,"order":310,"icon":1883},"\u002Fes\u002Fdocs\u002Foperaciones\u002Fprimer-cluster","Levantar cluster de 3 nodos","Forma un cluster con 3 servidores en menos de 10 minutos. Tolera falla de 1 nodo sin indisponibilidad.","i-lucide-network",{"path":1832,"title":5,"description":1825,"category":1824,"order":611,"icon":1828},{"path":1886,"title":1887,"description":1888,"category":1889,"order":310,"icon":1890},"\u002Fes\u002Fdocs\u002Fred\u002Ffirewall","Configuración de firewall","Qué puertos usa HeroCtl, cuáles necesitan estar abiertos y cuáles nunca deberían exponerse a internet.","rede","i-lucide-shield",{"path":1892,"title":1893,"description":1894,"category":1889,"order":55,"icon":1878},"\u002Fes\u002Fdocs\u002Fred\u002Fingress-tls","Ingress y TLS automático","Cómo exponer aplicaciones por el puerto 443 con certificados emitidos y renovados automáticamente, sin operar un router externo.",{"path":1896,"title":1897,"description":1898,"category":1899,"order":310,"icon":1900},"\u002Fes\u002Fdocs\u002Fseguridad\u002Frbac","RBAC y control de acceso (Business+)","Modelo de roles, políticas y tokens para limitar quién puede enviar, leer y operar el cluster.","seguranca","i-lucide-users",{"path":1902,"title":1903,"description":1904,"category":1899,"order":55,"icon":1905},"\u002Fes\u002Fdocs\u002Fseguridad\u002Fsecretos","Gestión de secretos","Cómo guardar contraseñas, tokens y claves fuera del spec del job, con cifrado en reposo y rotación versionada.","i-lucide-key",{"path":1907,"title":1908,"description":1909,"category":1910,"order":55,"icon":1911},"\u002Fes\u002Fdocs\u002Ftroubleshooting\u002Fproblemas-comunes","Troubleshooting de problemas comunes","Los 12 problemas más frecuentes en clusters HeroCtl, con síntoma, diagnóstico y corrección paso a paso.","troubleshooting","i-lucide-alert-triangle",1777362182675]