지금까지 SaltStack 기초에서 구성 관리 시스템의 기본을 배웠으니, 이번에는 솔트 스테이트 함수에 대해 자세히 알아보겠습니다.

솔트 스테이트 함수(Function)

솔트 스테이트 함수는 Salt State에서 수행하는 작업이며, SaltStack의 구성 관리 시스템을 사용할 때 마스터해야 하는 가장 중요한 사항입니다.

애플리케이션 설치 및 구성, 사용자 생성, 파일 배포 등의 기능을 시스템을 설정할 때 필요한 모든 작업을 수행할 수 있습니다.

함수를 호출하기 전에 Salt state의 표현 방식과 Salt state 함수의 구문을 살펴보겠습니다.

구문

솔트 스테이트는 구조화된 데이터를 설명하기 위한 간단한 언어인 YAML을 사용하여 설명된다(JSON과 유사하지만 보다 인간 친화적).

다음 다이어그램은 소금 상태 선언의 형식을 보여 줍니다.

소금 상태 선언의 첫 번째 줄은 ID입니다. ID 아래에는 하나 이상의 Salt state 기능을 호출할 수 있습니다.

  • ID가 있는 라인과 각 함수 호출의 라인은 콜론(:)으로 끝납니다. – 각 함수 호출은 ID 아래 두 공백으로 들여쓰기됩니다. – 매개 변수는 각 함수에 목록으로 전달됩니다. 함수 인수가 포함된 각 행은 두 개의 공백 들여쓰기, 하이픈, 추가 공백으로 시작합니다.
  • 인수가 단일 값을 사용하는 경우 이름과 값은 콜론과 공백으로 구분된 동일한 줄에 있습니다. – 인수가 목록을 가져오면 목록은 다음 줄에서 시작하여 두 공백으로 들여씁니다.

함수 예제

솔트 스테이트 기능의 사용법을 배우는 가장 좋은 방법은 예시이다. 이러한 예제를 살펴보려면 SaltStack Fundamentals에서 설정한 부질없는 데모 환경을 시작하겠습니다.

salt-vagrant-demo-master 디렉토리의 터미널을 열고 vagrant up을 실행합니다. 업데이트/교체가 필요하거나 Vagrant 환경이 더 이상 존재하지 않는 경우 SaltStack 기초의 데모 환경 섹션을 다시 참조하십시오.

운영 환경에서 이러한 예제를 실행하는 데 사용할 수 있는 salt-vagrant-demo-master/saltstack/salt/example.sls 파일을 생성하십시오.

패키지 설치

생성한 examples.sls 파일에 다음 조각을 복사하십시오.

install vim:
  pkg.installed:
    - name: vim

vagrant ssh master

sudo salt 'minion1' state.apply examples

추가 점수를 받으려면 state.pkg 문서를 참조하여 이 패키지가 시스템에 없는지 확인하기 위해 호출할 기능을 찾을 수 있는지 확인하십시오(힌트: 함수는 ‘rem’으로 시작하고 ‘oved’로 끝남).

remove vim:
  pkg.removed:
    - name: vim

유사한 프로세스에 따라 이 섹션의 다른 예를 테스트할 수 있습니다. 매번 example.sls의 내용을 바꾸거나 각 예에 대해 새 SLS 파일을 생성할 수 있습니다. 새 파일을 사용하는 경우 state.apply 호출을 업데이트하여 새 이름을 참조해야 합니다.

sudo salt '*' state.apply name-of-your-sls-file-with-no-extension

디렉터리 생성

디렉터리를 생성하는 기본 예.

create my_new_directory:
 file.directory:
   - name: /opt/my_new_directory
   - user: root
   - group: root
   - mode: 755

이 예에서는 사용 가능한 file.directory 옵션 중 일부만 사용합니다. 문서를 살펴보고 몇 개 더 추가해 보십시오.

서비스 실행

이 상태는 서비스가 Salt minion에서 실행 중인지 확인합니다.

Make sure the mysql service is running:
  service.running:
    - name: mysql

각 스테이트 선언은 스테이트 ID로 식별됩니다. 스테이트 ID는 고유해야 하며 공백과 숫자를 포함할 수 있습니다. 이전 예에서는 Make sure the mysql service is running 이 유효한 ID다.

단일 스테이트 ID에 여러 Salt state 함수 호출을 추가할 수 있습니다.

Install mysql and make sure the mysql service is running:
  pkg.installed:
    - name: mysql
  service.running:
    - name: mysql

부팅 중 서비스 시작

함수를 호출할 때는 단순히 추가 인수를 전달함으로써 많은 기능을 사용할 수 있으므로 전체 매개 변수 목록을 검토해야 합니다. enable: True를 service.running에 전달해서, SaltStack은 시스템이 부팅될 때마다 서비스를 시작합니다.

Make sure the mysql service is running and enable it to start at boot:
  service.running:
    - name: mysql
    - enable: True

GIT 레포 다운로드

모든 함수는 name 매개 변수를 사용합니다. 이름에 대한 값을 정의하지 않으면 Salt는 이름 값에 대한 스테이트 ID를 사용합니다. 이 예에서 name 매개 변수는 https://github.com/saltstack/salt.git입니다.

https://github.com/saltstack/salt-bootstrap:
  git.latest:
    - rev: develop
    - target: /tmp/salt

ID를 이름으로 사용하는 것은 키를 입력하기 때문에 경험이 많은 사용자에게 인기가 있습니다. 다음과 같이 상태를 쓸 수도 있습니다.

Clone the SaltStack bootstrap script repo:
  pkg.installed: 
    - name: git # make sure git is installed first!
  git.latest:
    - name: https://github.com/saltstack/salt-bootstrap
    - rev: develop
    - target: /tmp/salt

두 번째 형식을 사용하고 항상 name 인수를 정의하는 것이 좋습니다. ID는 타이핑이 더 필요할 수 있지만 스테이트가 무엇을 하고 있는지 설명해야 합니다. 이 형식을 따르면 스테이트를 보다 일관되고 쉽게 재사용, 유지 보수 및 디버깅할 수 있습니다.

사용자 추가

user account for pete:
  user.present:
    - name: pete
    - shell: /bin/bash
    - home: /home/pete
    - groups:
      - sudo

groups 인수는 목록이므로 다음 줄에 있고 공백 두 개를 들여쓴 다음 대시 앞에 있습니다.

hosts에 항목 추가

myserver in hosts file:
  host.present:
    - name: myserver
    - ip: 192.168.0.42

플랫폼 정상화의 좋은 예. 호스트가 서로 다른 방식으로 구성되어 있더라도 이 상태를 여러 플랫폼에 적용할 수 있습니다(Salt가 세부 정보를 해결하므로 걱정할 필요가 없습니다).

실행 기능 호출

service.restart 및 기타 실행 기능을 솔트(Salt) 상태로 호출할 수 있습니다.

restart vsftpd:
  module.run:
    - name: service.restart
    - m_name: vsftpd  # m_name gets passed to the execution module as "name"

실행 기능(“원격 실행 기능”의 줄임말)은 salt 명령줄에서 호출하는 명령으로, salt.module.*로 시작합니다.

(비트의 하찮은 부분: 실행 기능은 module.*에서 시작합니다. Salt의 최초 버전이자 유일한 모듈이었기 때문입니다. 솔트가 다시 쓴다면 대신 execution.*로 시작해야 할 것 같다.)

솔트 실행과 솔트 스테이트 기능에 대해 좀 더 자세히 설명합니다.

서비스 스테이트 함수 대신 서비스 실행 기능을 사용하는 이유와 Salt state와 Salt 실행 기능 간에 겹치는 부분이 많은 이유가 궁금할 수 있습니다.

service.restart와 같은 솔트 실행 기능의 이름을 service.running과 같은 유사한 솔트 스테이트 함수와 비교하면 작지만 중요한 차이가 있을 수 있습니다. 솔트 스테이트 함수는 구성을 적용하는 데 필요한 변경만 수행하도록 설계되었으며, 그렇지 않은 경우에는 변경하지 않도록 설계되었습니다. 소금 실행 기능은 호출될 때마다 실행되어 시스템이 변경될 수도 있고, 변경되지 않을 수도 있습니다.

service.running state 기능을 호출할 때 함수는 먼저 서비스가 이미 실행 중인지 확인하고 필요한 경우에만 서비스를 시작합니다. service.restart 실행 기능을 호출하면 서비스가 항상 재시작됩니다.

대부분의 경우 솔트 스테이트 함수는 솔트 실행 함수를 래핑하고 실행 함수를 호출해야 하는지 여부를 결정하기 위해 코드를 추가합니다.

test=True

Salt 상태를 적용하면 대상 시스템에서 많은 변경 사항이 발생할 수 있습니다. 염분 상태 기능은 라이브 실행 중에 발생할 변경 사항을 표시하는 메커니즘을 제공합니다. 반환 정보에는 노란색으로 적용될 상태가 표시되고 결과는 none으로 보고됩니다.

sudo salt 'minion1' state.apply examples test=True

init.sls

state.apply 동안 또는 스테이트 Top 파일에 있는 디렉터리를 대상으로 지정하면 salt는 해당 디렉터리에서 init.sls 파일을 찾아 적용합니다.

THAT IS (SORT OF) ALL THERE IS TO IT

이 시점부터 앞으로 나아가 솔트 스테이트 함수 호출만으로 매우 유용한 다양한 솔트 상태를 만들 수 있습니다. 솔트는 모든 종류의 애플리케이션과 서비스를 관리할 수 있는 수백 가지 기능을 갖춘 선박입니다.

SaltStack의 구성 관리 시스템의 나머지 기능을 사용하면 변수와 루프를 통해 상태를 보다 재사용하고 장애 발생 시 분기하고 ‘포함’ 및 ‘요구’와 같은 선언문을 사용하여 상태를 선언할 수 있습니다. 이러한 고급 개념을 숙달하면 SaltStack의 구성 관리 시스템을 최대한 활용할 수 있습니다.

나머지 섹션에서 이러한 기능에 대해 알아보겠습니다.

출처 : https://docs.saltproject.io/en/getstarted/config/functions.html
답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like

Agentless Salt – Salt SSH 설치

솔트는 솔트 SSH라는 유틸리티를 사용하여 에이전트 없는 시스템에 연결합니다. 이 유틸리티는 관리 서버, 개발 워크스테이션 또는 랩톱에 설치할…