4장. OpenStack Puppet 모듈에 추가 구성
이 장에서는 OpenStack Puppet 모듈에 추가 기능을 제공하는 방법에 대해 설명합니다. 여기에는 Puppet 모듈 개발에 대한 몇 가지 기본 지침이 포함됩니다.
4.1. Puppet 구문 및 모듈 구조 링크 복사링크가 클립보드에 복사되었습니다!
다음 섹션에서는 Puppet 구문과 Puppet 모듈의 구조를 이해하는 데 도움이 되는 몇 가지 기본 사항을 제공합니다.
4.1.1. Puppet 모듈 분석 링크 복사링크가 클립보드에 복사되었습니다!
OpenStack 모듈에 기여하기 전에 Puppet 모듈을 생성하는 구성 요소를 이해해야 합니다.
- Manifests
매니페스트는 리소스 세트와 해당 속성 집합을 정의하는 코드가 포함된 파일입니다. 리소스는 시스템의 구성 가능한 부분입니다. 리소스의 예로는 패키지, 서비스, 파일, 사용자, 그룹, SELinux 구성, SSH 키 인증, cron 작업 등이 있습니다. 매니페스트는 해당 특성에 키-값 쌍 집합을 사용하여 각 필수 리소스를 정의합니다.
package { 'httpd': ensure => installed, }
package { 'httpd': ensure => installed, }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어, 이 선언은
httpd
패키지가 설치되었는지 확인합니다. 그렇지 않은 경우 매니페스트는dnf
를 실행하고 설치합니다. 매니페스트는 모듈의 매니페스트 디렉터리에 있습니다. Puppet 모듈에서는 테스트 매니페스트에도 테스트 디렉터리를 사용합니다. 이러한 매니페스트는 공식 매니페스트에 있는 특정 클래스를 테스트하는 데 사용됩니다.- 클래스
- 매니페스트에서 여러 리소스를 결합하는 클래스입니다. 예를 들어 HTTP 서버를 설치하고 구성하는 경우 세 개의 리소스가 있는 클래스를 생성할 수 있습니다. 하나는 HTTP 서버 패키지를 설치하기 위한 패키지, HTTP 서버를 구성하는 방법, 서버를 시작하거나 활성화하는 것입니다. 해당 설정을 적용하는 다른 모듈의 클래스도 참조할 수 있습니다. 예를 들어 웹 서버가 필요한 애플리케이션을 구성하려면 이전에 언급한 HTTP 서버를 참조할 수 있습니다.
- <정적 파일>
모듈에는 Puppet이 시스템의 특정 위치에 복사할 수 있는 정적 파일이 포함될 수 있습니다. 매니페스트에서 파일 리소스 선언을 사용하여 위치와 같은 기타 속성을 정의합니다.
정적 파일은 모듈의 files 디렉터리에 있습니다.
- octetstemplates
구성 파일에 사용자 지정 콘텐츠가 필요한 경우가 있습니다. 이 경우 사용자는 정적 파일 대신 템플릿을 생성합니다. 정적 파일과 마찬가지로 템플릿은 매니페스트에 정의되어 시스템의 위치에 복사됩니다. 차이점은 Ruby 표현식이 사용자 지정 콘텐츠 및 변수 입력을 정의할 수 있도록 하는 것입니다. 예를 들어 사용자 지정 포트를 사용하여 httpd를 구성하려면 구성 파일의 템플릿에 다음이 포함됩니다.
Listen <%= @httpd_port %>
Listen <%= @httpd_port %>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 경우
httpd_port
변수는 이 템플릿을 참조하는 매니페스트에 정의되어 있습니다.템플릿은 모듈의 templates 디렉터리에 있습니다.
- octetsplugins
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, } }
class mymodule::httpd {
package { 'httpd':
ensure => installed,
}
}
이 코드는 httpd
라는 mymodule
의 하위 클래스를 정의한 다음 httpd
패키지에 대한 패키지 리소스 선언을 정의합니다. ensure => installed
속성은 Puppet에 패키지가 설치되었는지 확인하도록 지시합니다. 설치되지 않은 경우 Puppet은 dnf
를 실행하여 설치합니다.
4.1.3. 서비스 시작 및 활성화 링크 복사링크가 클립보드에 복사되었습니다!
패키지를 설치한 후 서비스를 시작할 수 있습니다. service
라는 다른 리소스 선언을 사용합니다. 다음 콘텐츠를 사용하여 매니페스트를 편집합니다.
결과:
-
ensure =>
속성에서 서비스가 실행 중인지 확인합니다. 그렇지 않은 경우 Puppet에서 활성화합니다. -
enable => true
속성은 시스템이 부팅될 때 실행되는 서비스를 설정합니다. -
require => Package["httpd"]
속성은 하나의 리소스 선언과 다른 리소스 선언 간의 순서 관계를 정의합니다. 이 경우 httpd 패키지가 설치된 후httpd
4.1.4. 서비스 구성 링크 복사링크가 클립보드에 복사되었습니다!
HTTP 서버는 포트 80에서 웹 호스트를 제공하는 /etc/httpd/conf/httpd.conf
의 기본 구성을 제공합니다. 그러나 추가 구성을 추가하여 사용자 지정 포트에서 추가 웹 호스트를 제공할 수 있습니다.
절차
사용자 정의 포트에 변수 입력이 필요하므로 템플릿 파일을 사용하여 HTTP 구성 파일을 저장해야 합니다. 모듈 템플릿 디렉터리에서 다음 콘텐츠를 사용하여
myserver.conf.erb
라는 파일을 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 템플릿은 Apache 웹 서버 구성에 대한 표준 구문을 따릅니다. 유일한 차이점은 Ruby 이스케이프 문자를 포함하여 모듈에서 변수를 삽입하는 것입니다. 예를 들어 웹 서버 포트를 지정하는 데 사용하는
httpd_port
입니다.fqdn
은 시스템의 정규화된 도메인 이름을 저장하는 변수입니다. 이를 시스템 팩트 라고 합니다. 시스템 팩트는 시스템의 각 Puppet 카탈로그를 생성하기 전에 각 시스템에서 수집됩니다. Puppet은facter
-
myserver.conf.erb
를 저장합니다. 모듈의 Puppet 매니페스트에 리소스를 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
결과:
-
서버 구성 파일
(/etc/httpd/conf.d/myserver.conf
)에 대한 파일 리소스 선언을 추가합니다. 이 파일의 내용은 사용자가 만든myserver.conf.erb
템플릿입니다. -
이 파일을 추가하기 전에
httpd
패키지가 설치되었는지 확인합니다. -
웹 서버에 대한 디렉토리
/var/www/myserver
를 생성하는 두 번째 파일 리소스 선언을 추가합니다. -
notify => Service["httpd"]
특성을 사용하여 구성 파일과httpd
서비스 간 관계를 추가합니다. 이렇게 하면 설정 파일에서 변경 사항이 있는지 확인합니다. 파일이 변경되면 Puppet에서 서비스를 다시 시작합니다.