원격 실행은 큰 시간 절약이지만 몇 가지 단점이 있습니다. 수행하는 대부분의 작업은 여러 명령, 테스트 및 작업의 조합이며 각각 고유한 뉘앙스와 실패 지점이 있습니다. 이러한 모든 단계를 중앙 셸 스크립트로 통합하려는 시도가 종종 이루어지지만, 이러한 단계는 빠르게 다루기 어려워지고 자체적으로 골칫거리가 됩니다.
이를 해결하기 위해 SaltStack 구성 관리를 통해 시스템 구성 요소 또는 응용 프로그램을 알려진 구성에 추가하는 데 필요한 모든 사항을 설명하는 재사용 가능한 구성 템플릿을 생성할 수 있습니다.
스테이트(state)는 작동 중인 것을 보면 훨씬 더 쉽게 이해할 수 있으므로, 스테이트를 만들어 보겠습니다. 상태는 YAML을 사용하여 설명되며 생성 및 읽기가 간단합니다.
작업을 단순화하기 위해 Vagrant 파일은 Salt 마스터의 /srv/salt 디렉토리를 로컬 salt-vagrant-demo-master/saltstack/salt 디렉토리에 매핑합니다. 즉, 로컬 텍스트 편집기를 사용하여 파일을 로컬 파일 시스템에 저장할 수 있으며, Vagrant는 Salt Master에 있는 것처럼 표시합니다.
일반 텍스트 편집기를 사용하여 새 텍스트 파일을 생성하고 다음을 추가합니다.
install_network_packages: pkg.installed: - pkgs: - rsync - lftp - curl
이 상태는 pkg.installed 상태 함수를 호출하고 pkgs 인수에 대한 패키지 이름 3개의 목록을 전달합니다.
이 예를 salt-vagrant-demo-master/saltstack/salt/nettools.sls로 저장합니다:
우리의 스테이트를 시험해 봅시다. 다음 섹션에서는 highstate라는 보다 강력한 스테이트 적용 방법에 대해 알아보겠습니다. 하지만 지금은 state.apply 명령을 사용하여 명령줄에서 직접 상태를 적용할 수 있습니다.
Salt Master에서 다음 명령을 실행하여 nettools 상태를 적용합니다.
salt 'minion2' state.apply nettools #state.apply was added in 2015.5, so if you are using an earlier version call state.sls instead.
짐작하셨겠지만, 목표 설정 메커니즘을 사용하여 이 상태를 솔트 미니언에 적용할 수 있습니다. 지금은 그냥 너의 소금 부하들 중 하나나 모두를 골라라. 모든 작업이 잘 진행되면 다음과 유사한 출력이 나타납니다(확대하려면 클릭).
이 값이 충분히 쿨(cool)하지 않으면 동일한 Salt minion에 상태를 다시 적용하고 출력을 확인합니다.
솔트는 시스템이 이미 올바른 상태에 있다고 판단하기 때문에 아무것도 변하지 않는다. 멋지네요
실행 순서
스테이트 파일의 명령은 위에서 아래로 실행됩니다. 이 예에서는 구성 파일이 업데이트되기 전에 해당 섹션이 파일에 먼저 표시되므로 패키지가 설치됩니다. 또한 SaltStack은 순서를 명시적으로 결정할 수 있는 강력한 필수 시스템을 제공합니다. 이 시스템은 이후 자습서에서 다룰 예정입니다.
서비스, 변수 등의 재시작
상태에서는 변경 사항이 있을 때 서비스를 재시작하고 전체 디렉터리를 복사하며 다른 상태가 먼저 실행하도록 명시적으로 요구하고 변수를 사용하는 등의 작업을 수행할 수 있습니다.
스테이트 시스템에 대한 자세한 내용은 구성 관리 시작 가이드를 참조하십시오. 지금 스테이트들에 대한 이 기본적인 이해는 시작하기에 충분하다. 앞서 언급했던 상태를 적용하는 강력한 방법을 기억하십니까? 그것에 대해 따져보자.