4장. OpenStack Puppet 모듈에 추가 구성


이 장에서는 OpenStack Puppet 모듈에 추가하는 방법을 살펴봅니다. 여기에는 Puppet 모듈 개발에 대한 몇 가지 기본 지침이 포함됩니다.

4.1. Puppet 구문 및 모듈 구조

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

4.1.1. Puppet 모듈 분석

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

CrashLoopBackOffmanifests

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

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

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

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

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

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

behindtemplates

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

Listen <%= @httpd_port %>

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

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

⁠Plugins

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. 서비스 구성

HTTP 서버는 포트 80에서 웹 호스트를 제공하는 /etc/httpd/conf/httpd.conf 에 몇 가지 기본 구성을 제공합니다. 그러나 사용자 지정 포트에 추가 웹 호스트를 제공하기 위해 구성을 추가할 수 있습니다.

절차

  1. 사용자 정의 포트에 변수 입력이 필요하므로 템플릿 파일을 사용하여 HTTP 구성 파일을 저장해야 합니다. 모듈 템플릿 디렉터리에서 다음 내용이 포함된 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 명령을 사용하여 이러한 시스템 팩트를 수집하고 팩트를 실행하여 이러한 팩트 목록을 볼 수도 있습니다.

  2. myserver.conf.erb 를 저장합니다.
  3. 모듈의 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.