4장. 설정


이 장에서는 OpenStack Puppet 모듈에 추가를 제공하는 방법을 설명합니다. 여기에는 Puppet 모듈 개발에 대한 몇 가지 기본 지침이 포함되어 있습니다.

4.1. Puppet 기본 학습

다음 섹션에서는 Puppet의 구문과 Puppet 모듈 구조를 이해하는 데 도움이 되는 몇 가지 기본 사항을 제공합니다.

4.1.1. Puppet 모듈 분석 검사

OpenStack 모듈에 기여하기 전에 Puppet 모듈을 생성하는 구성 요소를 이해해야 합니다.

manifests

매니페스트는 리소스 및 해당 특성 집합을 정의하는 코드를 포함하는 파일입니다. 리소스는 시스템의 구성 가능한 부분입니다. 리소스의 예로는 패키지, 서비스, 파일, 사용자 및 그룹, SELinux 구성, SSH 키 인증, cron 작업이 있습니다. 매니페스트는 속성에 대해 키-값 쌍 세트를 사용하여 각 필수 리소스를 정의합니다. 예를 들면 다음과 같습니다.

  package { 'httpd':
    ensure => installed,
  }

이 선언은 httpd 패키지가 설치되었는지 확인합니다. 그렇지 않은 경우 매니페스트는 yum을 실행하고 설치합니다. 매니페스트는 모듈의 매니페스트 디렉터리에 있습니다. 또한 Puppet 모듈은 테스트 매니페스트에 테스트 디렉터리를 사용합니다. 이러한 매니페스트는 공식 매니페스트에 포함된 특정 클래스를 테스트하는 데 사용됩니다.

클래스
클래스는 매니페스트에서 여러 리소스를 통합하는 메서드 역할을 합니다. 예를 들어 HTTP 서버를 설치하고 구성하는 경우 다음 세 가지 리소스가 포함된 클래스를 생성할 수 있습니다. 하나는 HTTP 서버 패키지를 설치하는 하나, 하나는 HTTP 서버를 구성하는 것과 다른 하나는 서버를 시작하거나 활성화하는 것입니다. 구성을 적용하는 다른 모듈의 클래스도 참조할 수 있습니다. 예를 들어 웹 서버가 필요한 애플리케이션을 구성해야 하는 경우 HTTP 서버에 대해 이전에 언급한 클래스를 참조할 수 있습니다.
정적 파일

모듈은 Puppet이 시스템의 특정 위치에 복사할 수 있는 정적 파일을 포함할 수 있습니다. 이러한 위치 및 권한과 같은 기타 속성은 매니페스트의 파일 리소스 선언을 통해 정의됩니다.

정적 파일은 모듈의 files 디렉터리에 있습니다.

Cryostattemplates

구성 파일에 사용자 지정 콘텐츠가 필요한 경우가 있습니다. 이 경우 사용자는 정적 파일 대신 템플릿을 생성합니다. 정적 파일과 마찬가지로 템플릿은 매니페스트에 정의되어 있으며 시스템의 위치에 복사됩니다. 차이점은 템플릿을 통해 Ruby 표현식이 사용자 지정된 콘텐츠 및 변수 입력을 정의할 수 있다는 것입니다. 예를 들어 사용자 지정 가능한 포트로 httpd를 구성하려면 구성 파일에 대한 템플릿에는 다음이 포함됩니다.

Listen <%= @httpd_port %>

이 경우 httpd_port 변수는 이 템플릿을 참조하는 매니페스트에 정의되어 있습니다.

템플릿은 모듈의 templates 디렉터리에 있습니다.

플러그인

플러그인을 사용하면 Puppet의 핵심 기능 이상으로 확장되는 측면을 사용할 수 있습니다. 예를 들어 플러그인을 사용하여 사용자 지정 팩트, 사용자 정의 리소스 또는 새 기능을 정의할 수 있습니다. 예를 들어 데이터베이스 관리자는 PostgreSQL 데이터베이스에 대한 리소스 유형이 필요할 수 있습니다. 그러면 PostgreSQL을 설치한 후 데이터베이스 관리자가 PostgreSQL을 새 데이터베이스 세트로 채우는 데 도움이 될 수 있습니다. 결과적으로 데이터베이스 관리자는 PostgreSQL 설치 및 데이터베이스가 나중에 생성되도록 하는 Puppet 매니페스트만 생성해야 합니다.

플러그인은 모듈의 lib 디렉터리에 있습니다. 여기에는 플러그인 유형에 따라 하위 디렉터리 세트가 포함됩니다. 예를 들면 다음과 같습니다.

  • /lib/facter - 사용자 지정 팩트의 위치입니다.
  • /lib/puppet/type - 속성의 키-값 쌍을 간략하게 설명하는 사용자 정의 리소스 유형 정의의 위치입니다.
  • /lib/puppet/provider - 리소스를 제어하기 위해 리소스 유형 정의와 함께 사용되는 사용자 정의 리소스 공급자의 위치입니다.
  • /lib/puppet/parser/functions - 사용자 지정 기능의 위치입니다.

4.1.2. 서비스 설치

일부 소프트웨어에는 패키지 설치가 필요합니다. Puppet 모듈에서 수행할 수 있는 기능 중 하나입니다. 여기에는 특정 패키지에 대한 구성을 정의하는 리소스 정의가 필요합니다.

예를 들어 mymodule 모듈을 통해 httpd 패키지를 설치하려면 mymodule 모듈의 Puppet 매니페스트에 다음 내용을 추가합니다.

class mymodule::httpd {
  package { 'httpd':
    ensure => installed,
  }
}

이 코드는 httpd 라는 mymodule 의 하위 클래스를 정의한 다음 httpd 패키지에 대한 패키지 리소스 선언을 정의합니다. ensure => installed 속성은 패키지가 설치되어 있는지 확인하도록 Puppet에 지시합니다. 설치되지 않은 경우 Puppet은 yum 을 실행하여 설치합니다.

4.1.3. 서비스 시작 및 활성화

패키지를 설치한 후 서비스를 시작하려고 할 수 있습니다. service 라는 다른 리소스 선언을 사용합니다. 이를 위해서는 다음 콘텐츠를 사용하여 매니페스트를 편집해야 합니다.

class mymodule::httpd {
  package { 'httpd':
    ensure => installed,
  }
  service { 'httpd':
    ensure => running,
    enable => true,
    require => Package["httpd"],
  }
}

다음과 같은 몇 가지 작업을 수행할 수 있습니다.

  • ensure => running 속성은 서비스가 실행 중인지 확인합니다. 그렇지 않은 경우 Puppet에서 활성화합니다.
  • enable => true 속성은 시스템이 부팅될 때 실행되도록 서비스를 설정합니다.
  • require => Package["httpd"] 속성은 하나의 리소스 선언과 다른 리소스 선언 간의 순서 관계를 정의합니다. 이 경우 httpd 패키지가 설치되면 httpd 서비스가 시작됩니다. 이렇게 하면 서비스와 해당 패키지 간에 종속성이 생성됩니다.

4.1.4. 서비스 구성

이전 두 단계에서는 Puppet을 통해 서비스를 설치하고 활성화하는 방법을 보여줍니다. 그러나 서비스에 일부 사용자 지정 구성을 제공할 수 있습니다. 이 예에서 HTTP 서버는 이미 포트 80에 웹 호스트를 제공하는 /etc/httpd/conf/httpd.conf 에 몇 가지 기본 구성을 제공합니다. 이 섹션에서는 사용자 지정 포트에 추가 웹 호스트를 제공하기 위해 몇 가지 추가 구성을 추가합니다.

이 경우 템플릿 파일을 사용하여 HTTP 구성 파일을 저장합니다. 이는 사용자 정의 포트에 변수 입력이 필요하기 때문입니다. 모듈의 templates 디렉터리에 다음 내용이 포함된 myserver.conf.erb 라는 파일을 추가합니다.

Listen <%= @httpd_port %>
NameVirtualHost *:<%= @httpd_port %>
<VirtualHost *:<%= @httpd_port %>>
  DocumentRoot /var/www/myserver/
  ServerName *:<%= @fqdn %>>
  <Directory "/var/www/myserver/">
    Options All Indexes FollowSymLinks
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

이 템플릿은 Apache 웹 서버 구성에 대한 표준 구문을 따릅니다. 유일한 차이점은 모듈에서 변수를 삽입하는 Ruby 이스케이프 문자의 포함입니다. 예를 들어 웹 서버 포트를 지정하는 데 사용하는 httpd_port 입니다.

시스템의 정규화된 도메인 이름을 저장하는 변수인 fqdn 도 포함됩니다. 이를 시스템 사실 이라고 합니다. 시스템 사실은 각 시스템의 Puppet 카탈로그를 생성하기 전에 각 시스템에서 수집됩니다. Puppet은 facter 명령을 사용하여 이러한 시스템 팩트를 수집하고 팩트를 실행하여 이러한 사실 목록을 볼 수도 있습니다.

이 파일을 저장한 후 모듈의 Puppet 매니페스트에 리소스를 추가합니다.

class mymodule::httpd {
  package { 'httpd':
    ensure => installed,
  }
  service { 'httpd':
    ensure => running,
    enable => true,
    require => Package["httpd"],
  }
  file {'/etc/httpd/conf.d/myserver.conf':
  notify => Service["httpd"],
    ensure => file,
    require => Package["httpd"],
    content => template("mymodule/myserver.conf.erb"),
  }
  file { "/var/www/myserver":
    ensure => "directory",
  }
}

이렇게 하면 다음이 수행됩니다.

  • 서버 구성 파일(/etc/httpd/conf.d/myserver.conf)에 대한 파일 리소스 선언을 추가합니다. 이 파일의 내용은 이전에 만든 myserver.conf.erb 템플릿입니다. 또한 이 파일을 추가하기 전에 httpd 패키지가 설치되었는지 확인합니다.
  • 두 번째 파일 리소스 선언도 추가합니다. 웹 서버에 대한 디렉토리(/var/www/myserver)를 생성합니다.
  • 또한 notify => Service["httpd"] 특성을 사용하여 구성 파일과 httpd 서비스 간의 관계를 추가합니다. 그러면 설정 파일에서 모든 변경 사항이 있는지 확인합니다. 파일이 변경되면 Puppet에서 서비스를 다시 시작합니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.