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, }
package { 'httpd': ensure => installed, }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어 이 선언은
httpd
패키지가 설치되었는지 확인합니다. 그렇지 않은 경우 매니페스트는dnf
를 실행하고 설치합니다. 매니페스트는 모듈의 매니페스트 디렉터리에 있습니다. Puppet 모듈은 테스트 매니페스트에 테스트 디렉터리를 사용합니다. 이러한 매니페스트는 공식 매니페스트에 있는 특정 클래스를 테스트하는 데 사용됩니다.- 클래스
- 클래스는 매니페스트에 여러 리소스를 통합합니다. 예를 들어 HTTP 서버를 설치하고 구성하는 경우 세 가지 리소스(HTTP 서버 패키지를 설치하는 방법, HTTP 서버를 구성하는 방법, 서버를 시작하거나 활성화하는 클래스)를 생성할 수 있습니다. 또한 해당 구성에 적용되는 다른 모듈의 클래스를 참조할 수도 있습니다. 예를 들어 웹 서버도 필요한 애플리케이션을 구성하려면 HTTP 서버에 대해 이전에 언급된 클래스를 참조할 수 있습니다.
- 정적 파일
모듈에는 Puppet에서 시스템의 특정 위치에 복사할 수 있는 정적 파일이 포함될 수 있습니다. 매니페스트에서 파일 리소스 선언을 사용하여 위치 및 권한과 같은 기타 속성을 정의합니다.
정적 파일은 모듈의 파일 디렉터리에 있습니다.
- behindtemplates
구성 파일에 사용자 지정 콘텐츠가 필요한 경우가 있습니다. 이 경우 사용자는 정적 파일 대신 템플릿을 생성합니다. 정적 파일과 마찬가지로 템플릿은 매니페스트에 정의되어 시스템의 위치에 복사됩니다. 차이점은 템플릿을 통해 Ruby 표현식이 사용자 정의 콘텐츠 및 변수 입력을 정의할 수 있다는 것입니다. 예를 들어 사용자 지정 가능한 포트를 사용하여 httpd를 구성하려면 구성 파일의 템플릿에 다음이 포함됩니다.
Listen <%= @httpd_port %>
Listen <%= @httpd_port %>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 경우
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, } }
class mymodule::httpd {
package { 'httpd':
ensure => installed,
}
}
이 코드는 httpd
라는 mymodule
의 하위 클래스를 정의한 다음 httpd
패키지에 대한 패키지 리소스 선언을 정의합니다. ensure => installed
속성은 패키지가 설치되었는지 확인하도록 Puppet에 지시합니다. 설치되지 않은 경우 Puppet은 yum
을 실행하여 설치합니다.
4.1.3. 서비스 시작 및 활성화 링크 복사링크가 클립보드에 복사되었습니다!
패키지를 설치한 후 서비스를 시작할 수 있습니다. service
라는 다른 리소스 선언을 사용합니다. 다음 콘텐츠를 사용하여 매니페스트를 편집합니다.
결과는 다음과 같습니다.
-
ensure => running
속성은 서비스가 실행 중인지 확인합니다. 그렇지 않으면 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["
서비스 간의 관계를 추가합니다. 이렇게 하면 구성 파일에서 변경 사항이 있는지 확인합니다. 파일이 변경되면 Puppet에서 서비스를 다시 시작합니다.httpd
"] 속성을 사용하여 구성 파일과 httpd