რატომ ვერ ვიყენებთ სრულად დეკლარატიულ მიდგომას Ansible-ის ყველა playbook-ში?
sobes.tech AI
პასუხი AI-სგან
Ansible декларативული болууга тырысады, жүйелі түрде қажетті жағдайды сипаттау арқылы. Алайда, толық декларативтілік операцияларды орындау қажеттілігі мен тапсырмалар арасындағы тәуелділіктер шектеуіне байланысты шектеледі, бұл кейде соңғы жағдайға жету үшін императивті тәсілді қолдануды талап етеді. Кейбір модульдер немесе тапсырмалар белгілі бір тәртіпте орындалуын талап етуі мүмкін немесе алдыңғы тапсырмалардың нәтижесіне тәуелді болуы мүмкін.
Мысалдар:
- Шартты орындалатын тапсырмалар:
when:қолдану белгілі бір шарттар орындалғанда ғана тапсырманы орындау декларативтілікті бұзуы мүмкін, себебі шарт көбінесе ағымдағы (және емес қажетті соңғы) жағдайға немесе алдыңғы тапсырманың нәтижесіне негізделген. registerжәнеchanged_whenқолдану: Тапсырманың нәтижесін айнымалыда сақтау (register) және оны келесі тапсырмаларда пайдалану немесе «өзгеріс» деп анықтау (changed_when) де императивті элемент болып табылады.- Команда орындаушы модульдер:
command,shell,scriptсияқты модульдер өз табиғатында императивті, себебі олар нақты команданы орындайды және соңғы жағдайды кепілдендірмейді және сипаттамайды.
Императивті элементтің мысалы:
- аты: Қызметтің жұмысын қамтамасыз ету
systemd:
аты: my_service
жағдайы: іске қосылды
тіркеу: қызмет күйі
- аты: Қызмет іске қосылған жағдайда қайта іске қосу
команда: systemctl restart my_service
when: қызмет күйі.changed
Бұл жерде екінші тапсырма бірінші тапсырма қызметтің жағдайын өзгерткен жағдайда ғана орындалады (мысалы, оны іске қосқанда). Бұл императивті шарт, ол алдыңғы әрекеттің нәтижесіне тәуелді.
Жалпы алғанда, Ansible икемді тәсілді ұсынады: ол барынша декларативті болуға тырысады, бірақ кейбір жағдайларда логика мен конфигурацияны басқару үшін императивті құрылымдарды қолдануға мүмкіндік береді.