Perl 클 러 스 터 설정 관리 시스템 Rex 설명서

7515 단어 PerlRex수첩
Rex 는 Perl 이 작성 한 SSH 링크 기반 클 러 스 터 설정 관리 시스템 으로 문법 적 으로 Puppet DSL 과 유사 합 니 다.홈 페이지 중국어 버 전http://rex.perl-china.com 。본 고 는 본인 이 부서 위 키 에서 작성 한 소개 문서 일 뿐 입 니 다.
상용 명령 파라미터
rex 명령 의 매개 변 수 는 매우 많 지만 우리 의 환경 은 krb 인증 이기 때문에 일부 매개 변 수 는 Rexfile 에 만 쓸 수 있 습 니 다.그래서 보통 Rexfile 이 저 장 된/etc/uppet/webui 에 고정 되 어 명령 을 실행 하면 많은 설정 이 자동 으로 불 러 옵 니 다.그러면 필요 한 명령 매개 변 수 는 기본적으로 다음 과 같은 몇 가지 만 있 습 니 다.-Tv:현재 Rexfile 에서 어떤 Task 작업 과 서버 그룹 을 정 의 했 는 지 확인 하 십시오.-H:Task 가 어떤 Host 에서 실 행 될 지 지정 합 니 다.여기 서 비교적 편리 한 곳 은 10.5.16 을 지원 하 는 것 이다.[95.110]이런 표기 법 을 지원 하 는 것 이다.G:Task 가 어떤 Group 에서 실 행 될 지 지정 합 니 다.Group 의 정의 방식 이 매우 많 습 니 다.Rex 기본 지원 은 Rexfile 에서 group 명령 을 통 해 직접 지정 하고 ini 설정 파일 을 통 해 설정 하 는 등 이 있 습 니 다.현재 나 는 하나의 groups 를 실현 했다.db 명령,우리 sqlite 에서 가 져 옵 니 다.groups_db('cdnbj:nginx')는'cdnbj:nginx'라 는 서버 그룹 을 자동 으로 생 성 합 니 다.cdnbj 에 nginx 가 배 치 된 모든 서버 를 포함 합 니 다.-e:임시 작업 을 지정 합 니 다.보통'say run'ipconfig'와 같은 간단 한 명령 형식 입 니 다.복잡 한 논리 가 필요 하 다 면 Rexfile 에 Task 를 쓰 세 요.-q:실행 로그 단 계 를 지정 합 니 다.-q 와-qq 가 있 습 니 다.-d:실행 로그 단 계 를 지정 합 니 다.-d 와-dd 가 있 습 니 다.
Rexfile 소개
매개 변수 설정 부분:

    set connection => "OpenSSH";
    user "root";
    krb5_auth;
    parallelism 10;
이 네 줄 은 kerbeos 인증 을 사용 하고 10 개의 프로 세 스 가 ssh 명령 을 수행 하도록 지정 합 니 다.

    desc "install puppet agent";
    task "puppet_install", sub {
    }
    before "puppet_install", sub {
    }
    after "puppet_install", sub {
    }
이 몇 줄 은 Rexfile 의 작업 정의 주체 형식 입 니 다.task 명령 은 작업 을 정의 합 니 다.작업 은 구체 적 인-H 또는 G 서버 에서 실 행 됩 니 다.다른 것 은 모두 옵션 이 있 습 니 다.desc 내용 은-TV 에 표 시 됩 니 다.before 와 after 가 정의 하 는 작업 은 대응 하 는 task 를 실행 하기 전이 나 그 후에'rex 명령 실행 처,즉 10.4.1.21 로 컬'에서 실 행 됩 니 다.
상용 명령 어 소개
run
실행 명령.반전 함수 가 있 으 면 stdout 과 stderr 를 반전 함수 에 전달 합 니 다.없 으 면 stdout 을 되 돌려 줍 니 다.
예 를 들 어

say run "uptime";
    run "nginx -v", sub { my ($out, $err) = @_; say $err };
file
서 류 를 배포 하 다.문법 이 Puppet 과 유사 한 file.source,template,ensure,on 지원change 등 조작.메모:rex 는 Rexfile 을 순서대로 실행 하기 때문에 Puppet 의 require 명령 을 설정 하지 않 아 도 됩 니 다.
예 를 들 어

    file "/etc/yum.repos.d/xiaonei-private.repo",
      source => "repos/xiaonei-private.repo";
    file "/etc/nginx/nginx.conf",
      content => template("templates/etc/nginx/nginx.conf.tpl"),
      owner  => "nginx",
      group  => "nginx",
      mode   => 644,
      ensure => 'file',
      on_change => sub { service nginx => "restart"; };
    file "/etc/nginx/conf.d",
      ensure => "directory",
pkg
패 키 지 를 설치 하고 초기 버 전에 서 인 스타 그램 을 쓰 라 고 명령 했 습 니 다.=>"nginx"는 최근 pkg 으로 바 뀌 었 습 니 다.Puppet 문법 과 같 습 니 다.
pkg 콘 텐 츠 로 배열 을 전달 하 는 것 도 지원 합 니 다.또한,rex 는 update 를 제공 합 니 다.package_db 명령 은 yum clean all 또는 apt-get update 작업 을 수행 하 는 데 사 용 됩 니 다.이 점 은 Puppet 가 부족 한 것 입 니 다.
예 를 들 어

 update_package_db();
   my $packages = case operating_system,
      Debian => ["apache2", "libphp5-apache2"],
      CentOS => ["httpd", "php5"],
   pkg $packages,
     ensure => "present";
ensure 도 present,absent,latest 등 몇 가지 의 미 를 지원 합 니 다.Puppet 과.
account
사용자 관리 원래 createuser 와 creategroup 명령,최근 createuser 가 account 명령 으로 업데이트 되 었 습 니 다.
예 를 들 어

  create_group 'puppet';
  account "puppet",
    ensure   => "present",
    uid      => 509,
    home     => '/home/puppet',
    comment  => 'Puppet Account',
    expire   => '2015-05-30',
    groups   => ['puppet'],
    password => 'puppet',
    system   => 1,
    no_create_home => TRUE,
    ssh_key        => "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChUw...";
tail
여러 호스트 의 로 그 를 동시에 관찰 하 는 최신 추가 상황 입 니 다.비교적 유용 한 작은 기능 일 것 이다.코드 는 다음 과 같 습 니 다.

   tail "/var/log/syslog", sub {
     my ($data) = @_;
     my $server = Rex->get_current_connection()->{'server'};
     print "$server>> $data
";
   };
원 격 호스트 상세 정보 관련 변수
Puppet 는 원 격 호스트 의 상세 한 정 보 를 판정 하기 위해 Facts 변 수 를 전문 적 으로 가지 고 있 습 니 다.렉 스 는 SSH 로 연결 되 기 때문에 원 격 호스트 에서 에이 전 트 를 달 려 서 이 정 보 를 수집 하지 않 기 때문에 원 격 으로 명령 을 실행 하 는 방식 으로 관련 내용 을 제공한다.현재 자주 사용 되 는 몇 가지 함수(변수 라 고 볼 수도 있 습 니 다)는 다음 과 같 습 니 다.
is_redhat
이것 은 운영 체제 가 RedHat 시리즈 인지 아 닌 지 를 판단 하 는 데 쓰 인 다.이전에 데 비 안 기기 가 있 었 기 때문에 Rexfile 에는 이런 조작 논리 가 있 었 다.

    if ( is_debian ) {
    } elsif ( is_redhat ) {
    } else {
    }
operating_system_version
이것 은 구체 적 인 운영 체제 버 전 번 호 를 판단 하 는 데 쓰 인 다.예 를 들 어 CentOS 5 와 CentOS 6 가 응용 해 야 할 조작 이 다 르 고 심지어 CentOS 6.5 와 CentOS 6.2 도 일치 하지 않 을 수 있다.
예 를 들 어 Rexfile 의 1w 10 미 션:

    if ( is_redhat and operating_system_version >= 64 )
    }
route
rex 가 수집 할 수 있 는 정 보 는 puppet 보다 훨씬 많 습 니 다.예 를 들 어 네트워크 관련,sysctl 관련 등 입 니 다.Rexfile 의 1w 10 작업 은 route 정 보 를 사용 하여 기본 게 이 트 웨 이와 게 이 트 카드 인 터 페 이 스 를 가 져 옵 니 다.

    my ($default_route) = grep {
      $_->{"flags"} =~ m/UG/ && (
        $_->{"destination"} eq "0.0.0.0" ||
        $_->{"destination"} eq "default" )
      } route;
    if ($default_route) {
        my $default_gw = $default_route->{"gateway"};
        my $default_if = $default_route->{"iface"};
        run "ip route change default via ${default_gw} dev ${default_if} initcwnd 10 initrwnd 10";
    };
connection
여러 대의 호스트 가 작업 을 수행 할 때,대부분 출력 할 때 어떤 결과 가 어떤 호스트 가 돌아 오 는 지 보고 싶 어 합 니 다.앞의 tail 미 션 에 사 용 했 지만 매우 복잡 한 모습 을 썼 다.사실 rex 는 좀 더 간결 한 문법 을 제공한다.바로 connection->server 입 니 다.

  task 'tellmewhoyouare', sub {
    say connection->server;
  }
현재 연 결 된 서버 의 전체 정 보 는 get 을 통 해서 도 가능 합 니 다.system_information 명령 으로 얻 을 수 있 습 니 다.이 두 명령 은 사실 같 습 니 다.그러나 글자 의 뜻 에 따라 일반적으로 서로 다른 언어 환경 에서 사용한다.
이 정 보 를 완전히 보 려 면 dumpsystem_information 명령 으로 확인 합 니 다.이 명령 은 print Dumper getsystem_information()가 다른 것 은 모든 키 를 단독 변수 로 합 니 다.이 변 수 는 rex 의 template 에 직접 사용 할 수 있 는 내장 변수 입 니 다.예 를 들 어

  listen <%= $eth0_ip %>:80;
  visible_hostname <%= $hostname %>
dump 에 없습니다.system_information 목록 의 변 수 는 template 에서 사용 하려 면 명시 적 으로 전달 해 야 합 니 다.이 점 은 Puppet 와 일치 하지 않 습 니 다.puppet 는 template 에서 scope.lookupvar()명령 을 통 해 임의의 pp 류 에 설 정 된 변 수 를 가 져 올 수 있 습 니 다.이 점 은 품사 작용 역 의 존 재 를 완전히 무시 합 니 다==!
예 를 들 어

   file '/etc/elasticsearch/elasticsearch.yml',
     content => template('files/es.yml.tmpl', conf => {
       clustername => 'logstash'
     });
대응 하 는 es.yml.tmpl 에서 쓰기:

  clustername: <%= $conf->{'clustername'} %>
이렇게 해 야 합 니 다.

좋은 웹페이지 즐겨찾기