OpenVZ Forum


Home » International » Russian » puppet менеджмент и OpenVZ (Нужна ли публикация конфигов?)
puppet менеджмент и OpenVZ [message #38445] Sun, 20 December 2009 13:42 Go to next message
sHaggY_caT is currently offline  sHaggY_caT
Messages: 144
Registered: August 2008
Location: Moscow, Russian Federatio...
Senior Member

Привет.

Я почти закончила модуль для puppet для менеджмента OpenVZ контейнеров.

В wiki есть статья про puppet и вообще Deployment для Debian , но мой модуль делает больше действий: выключает контейнеры, применяет конфиг стандартного тарифа(или специальный для этого контейнера), создает, удаляет, и так далее, и сделано это все для RedHat платформы.
По-идее, готовый к использованию OpenVZ сервер, в результате должен получаться за 15-20 минут с момента начала PXE загрузки Smile

Так же, я написала кикстарт и сниппет для кобблера (готовое решение для развертывания по PXE серверов).

Во всем этом есть, вероятно, глюки, но это предполагается к использованию в production у нас (так что, глюки будут устранены со временем), конечно, я надеюсь и на фидбэк от прочитавших статью.

Главный глюк пока вот это: http://forum.openvz.org/index.php?t=msg&th=8193&star t=0&

В принципе, мне ничего не мешает прямо сейчас это все вывалить в виде конфигов с комментариями на плохом английском, и на таком же английском написать, чуть позже, статью.

Будет ли это полезно?


IT-outsource for UNIX servers,
http://ha-systems.ru

[Updated on: Sun, 20 December 2009 13:43]

Report message to a moderator

Re: puppet менеджмент и OpenVZ [message #38447 is a reply to message #38445] Sun, 20 December 2009 15:43 Go to previous messageGo to next message
paix is currently offline  paix
Messages: 8
Registered: January 2009
Location: ua
Junior Member
я думаю такие вещи всегда интересны. Так что пишите.

PS. у меня тоже самое делается скриптами.
Как установка openvz на HN, так и создание VE.


Re: puppet менеджмент и OpenVZ [message #38449 is a reply to message #38447] Sun, 20 December 2009 16:10 Go to previous messageGo to next message
sHaggY_caT is currently offline  sHaggY_caT
Messages: 144
Registered: August 2008
Location: Moscow, Russian Federatio...
Senior Member

У меня тоже скрипты, но через puppet Smile Скрипты упакованы в rpm, и ставятся при PXE установке.

Модуль выглядит так, немного пока неказисто, но уже все работает, за исключением проблем с SNAT, которые я описала в соседней теме
В будущем стоит добавить переменную, задающую рут-пароль для контейнера, и возможность навешивать более двух IP на контейнер, а так же класс для управления файрволлом:

#Copyright(c) Galia A Lisovskaya aka sHaggY_caT
#Licensed by GNU GPL v2 or later


#Clases and defenitions for openvz containers management




#This class upload to HardwareNode new system configs, templates, and other files

class mod_class_ovzconfigs {

#Define base configs names for typical tarif planes  

#define our system configs path
$vps_conf_path="/etc/sysconfig/vz-scripts/"

#upload openvz systctl.conf
   file {"/etc/sysctl.conf":
   replace => true,
   owner => "root",
   group => "root",
   mode => "0744",
   source => "puppet:///mod_ovz/sysctl.conf",
        }

#Upload openvz templates, if we find lock file. For update templates on hardware node, you may create this lock file.
#exec { "Update ovz templates":

 #   command => "wget -O /vz/template/cache/centos-5-i386-default.tar.gz http://install.local/ovz/templates/centos-5-i386-default.tar.gz && rm /vz/firsh_install.lock",
  #  path => "/usr/bin:/usr/sbin:/bin",
   # onlyif => "test -f /vz/firsh_install.lock"
#}

#exec { "${templates}":

 #   command => "wget -O /vz/template/cache/${name}.tar.gz $template_url/${name}.tar.gz && rm /vz/firsh_install.lock",
  #  path => "/usr/bin:/usr/sbin:/bin",
   # onlyif => "test -f /vz/firsh_install.lock"
#}
#$config_exim_trusted_users = split(get_var('config_exim_trusted_users'), ',')

	
   file {"vps756M":
     path   => "${vps_conf_path}/ve-vps756M.conf-sample",
     source => "puppet:///mod_ovz/vps756M.conf",
    ensure =>  present,
     replace => true,
     #before => Exec["vecreate_${name}"], 
#     exec { "vzlist -ao veid,description | grep ${vps756M_name} | awk '{print $1}' | xargs vzctl --applyconfig ":
#     path => "/usr/bin:/usr/sbin:/bin:/sbin"
#		}
                            }
  
file {"vps128M":
     path   => "${vps_conf_path}/ve-vps128M.conf-sample",
     source => "puppet:///mod_ovz/vps128M.conf",
    ensure =>  present,
     replace => true, }

file {"vps256M":
     path   => "${vps_conf_path}/ve-vps256M.conf-sample",
     source => "puppet:///mod_ovz/vps256M.conf",
    ensure =>  present,
     replace => true, }

file {"vps512M":
     path   => "${vps_conf_path}/ve-vps512M.conf-sample",
     source => "puppet:///mod_ovz/vps512M.conf",
    ensure =>  present,
     replace => true, }

}	 

define mod_class_ovzconfigs::mod_def_os_templates ($templates, $template_url){
  

    file {"${fqdn}_templates":
            path   => "/vz/${fqdn}_templates.list",
            ensure =>  present,
            replace => true,
          source => $templates ? {
          "custom"  => "puppet:///mod_ovz/${fqdn}_standart_templates.list",
          "standart" => "puppet:///mod_ovz/standart_templates.list", },
          before => Exec["${fqdn}_download_templates"], 
          }

exec {"${fqdn}_download_templates":
  command => "/usr/sbin/templates-download.sh ${fqdn} ${template_url}",
  path => ["/usr/bin", "/usr/sbin", "/bin", "/sbin"],
  subscribe => File["${fqdn}_templates"],
  require => File["${fqdn}_templates"],
  refreshonly => true, } 
                                                                                  }

    
define mod_class_ovzconfigs::mod_def_ovzbackup ($ensure = "off", $path_run_backup, $hour_incr_cron, 
$min_incr_cron, $day_incr_cron, $hour_zero_cron, $min_zero_cron, $day_zero_cron, $type_of_backup = "local") {
        
case $ensure {
	
   off : {
   cron {"incremental_backup":
            ensure => absent, }
        
         cron {"zero_backup":     
               ensure => absent,
               }
          }
	
   on : {
	cron {"incremental_backup":
             ensure => present,
              command => "${path_run_backup} ${type_of_backup} 1",
             user => root,
             hour => $hour_incr_cron,
	     minute => $min_incr_cron,
            weekday => $day_incr_cron,
                          }
                          
         cron {"zero_backup":
              ensure => present, 
             command => "${path_run_backup} ${type_of_backup} 0",
             user => root,
             hour => $hour_zero_cron,
             minute => $min_zero_cron,
             weekday  => $day_zero_cron,
              }
	 }
                          }
			    }

define  mod_class_ovzconfigs::mod_def_veadm ($status, $veid, $vetemplate = "centos-5-i386-default", $vetarif, 
$veip, $vedns = "10.0.5.51", $setboot) {
   
#Define base configs names for typical tarif planes  

#define our system configs path
$vps_conf_path="/etc/sysconfig/vz-scripts/"
  
$vehostname = $name


case $status {

#Create new container              
vecreate  : {
      
      exec {"vecreate_${name}":  
      command => "vzctl create ${veid} --ostemplate ${vetemplate} --config ${vetarif} --hostname ${vehostname} --ipadd ${veip} && vzctl set ${veid} --nameserver ${vedns} --onboot ${setboot} --save && vzctl start ${veid}",
      path => "/usr/bin:/usr/sbin:/bin",
      unless =>  "test -d /vz/private/${veid}",
      require => File["${vetarif}"],
      before => Exec["ve_check_status_${name}"],
      } 
      
             
             }        
#Remove container
vedestroy :  {
         
         exec {"vedestroy_${name}":  
         command => "vzctl stop ${veid} --fast; vzdump --compress ${veid} && vzctl destroy ${veid}",
         path => "/usr/bin:/usr/sbin:/bin",
         onlyif =>  "vzlist ${veid}" }
         }
#Create not-standart container
vecustom : {
            
file {"vecus_${name}":
            path   => "${vps_conf_path}/${veid}.conf",
            content => template("mod_ovz/${name}_vps.erb"),                
            ensure =>  present,
            replace => true,
            before => Exec["vecrcus_${name}", "vecus-apply_${name}"],
                }

      exec {"vecrcus_${name}":  
      command => "vzctl create ${veid} && vzctl start ${veid}",
      path => "/usr/bin:/usr/sbin:/bin",
      unless =>  "test -d /vz/private/${veid}",
      require => File["vecus_${name}"],
      }
           
#If vps off, stop it, if on, start it
exec { "vecus_check_status_${name}":
    command => "/usr/sbin/apply_ve_status.sh ${veid} ${setboot}",
    path => ["/usr/bin", "/usr/sbin"],
    onlyif => "test `/usr/sbin/check_ve_status.sh ${veid} ${setboot}` = 0  "
       }
           
exec { "vecus-apply_${name}":
    command => "if [ -d /vz/private/${veid} ]; then vzctl restart ${veid}; fi",
    path => ["/usr/bin", "/usr/sbin"],
    onlyif => "test -d /vz/private/${veid}",
    subscribe => File["vecus_${name}"],
    require => File["vecus_${name}"],
    refreshonly => true
     }
           }
  }


if $status != "vecustom" {

#If tarif settings changed, aplly new tarif                          
exec { "veconfig-apply_${name}":
    command => "if [ -d /vz/private/${veid} ]; then vzctl set ${veid} --applyconfig ${vetarif} --save; fi",
    path => ["/usr/bin", "/usr/sbin"],
    onlyif => "test -d /vz/private/${veid}",
    subscribe => File["${vetarif}"], 
    refreshonly => true
     }
#If VPS settings changed, apply new settings                          
exec { "ve_check_tarif_${name}":
    command => "vzctl set ${veid} --applyconfig ${vetarif} --save",
    path => ["/usr/bin", "/usr/sbin"],
    onlyif => "test `/usr/sbin/check_tarif.sh ${veid} ${vetarif}` = 0 ",
          }
#If vps off, stop it, if on, start it
exec { "ve_check_status_${name}":
    command => "/usr/sbin/apply_ve_status.sh ${veid} ${setboot}",
    path => ["/usr/bin", "/usr/sbin", "/bin", "/sbin"],
    onlyif => "test `/usr/sbin/check_ve_status.sh ${veid} ${setboot}` = 0  "
       }
#set new IP for container
exec {"ve_check_ip_${name}":
    command => "/usr/sbin/ve-apply_ip.sh ${veid} ${veip}",
    path => ["/usr/bin", "/usr/sbin", "/bin", "/sbin"],
    onlyif => "test `/usr/sbin/ve-check_ip.sh ${veid} ${veip}` = 0  "
      }
                         
#set new DNS for container
exec {"ve_check_dns_${name}":
    command => "/usr/sbin/ve-apply_dns.sh ${veid} ${vedns}",
    path => ["/usr/bin", "/usr/sbin", "/bin", "/sbin"],
    onlyif => "test `/usr/sbin/ve-check_ip.sh ${veid} ${vedns}` = 0  "
      }
       }
}



А вот так выглядит описание типовой ноды (тут разночтение терминов, тут имеется ввиду нода puppet'а, которая в данном случае HardwareNode OpenVZ, но контейнеры под типовые роли, виртуалки и хосты под виртуализацию выглядят похожим образом )

node 'ovz-test2.local' inherits ovzserver-custom {

mod_class_ovzconfigs::mod_def_os_templates {"templates-ovz-test2.local":
template_url => "http://install.local/ovz/templates/",
templates => "standart",
                                            }



mod_class_ovzconfigs::mod_def_ovzbackup {"backup-ovz-test2.local":

path_run_backup => "/usr/sbin/rc.HABackup.sh",
hour_incr_cron => "12",
min_incr_cron => "10",
day_incr_cron => "*",
hour_zero_cron => "4",
min_zero_cron => "0",
day_zero_cron => "5",
type_of_backup => "remote",
ensure => "on", }

mod_class_ovzconfigs::mod_def_veadm {"customer11.vps.local":

veid => "401",
setboot => "yes",
vetemplate => "ubuntu-9.04-x86",
vetarif => "vps512M",
veip => "10.0.5.41",
vedns => "10.0.5.51",
status => "vecreate",
}

mod_class_ovzconfigs::mod_def_veadm {"customer12.vps.local":

veid => "402",
setboot => "yes",
vetemplate => "centos-4-x86",
vetarif => "vps256M",
veip => "10.0.5.42",
vedns => "10.0.5.51",
status => "vecreate",
}

mod_class_ovzconfigs::mod_def_veadm {"customer13.vps.local":

veid => "403",
setboot => "yes",
vetemplate => "debian-5.0-x86",
vetarif => "vps128M",
veip => "10.0.5.43",
vedns => "10.0.5.51",
status => "vecreate",
}

mod_class_ovzconfigs::mod_def_veadm {"customer14.vps.local":

veid => "404",
setboot => "yes",
vetemplate => "suse-11.1-x86",
vetarif => "vps756M",
veip => "10.0.5.44",
vedns => "10.0.5.51",
status => "vecreate",
}

mod_class_ovzconfigs::mod_def_veadm {"customer15.vps.local":

veid => "405",
setboot => "no",
vetemplate => "fedora-12-x86",
vetarif => "vps256M",
veip => "10.0.5.45",
vedns => "10.0.5.51",
status => "vecreate",
}

mod_class_ovzconfigs::mod_def_veadm {"customer16.vps.local":

veid => "406",
setboot => "yes",
vetemplate => "centos-5-x86",
vetarif => "vps512M",
veip => "10.0.5.46",
vedns => "10.0.5.51",
status => "vecreate",
}

mod_class_ovzconfigs::mod_def_veadm {"test-dns.local":

veid => "407",
setboot => "yes",
vetemplate => "centos-5-x86",
vetarif => "vps512M",
veip => "10.0.5.47",
vedns => "10.0.5.51",
status => "vecreate",
}

mod_class_ovzconfigs::mod_def_veadm {"customer17.vps.local":

veid => "407",
setboot => "yes",
vetemplate => "centos-5-i386-default",
vetarif => "vps256M",
veip => "10.0.5.47",
vedns => "10.0.5.51",
status => "vecreate",
}



}


Как можно догадаться, то, что это все контроллируется через subvershion (остальные могут использовать гиты и прочие меркуриалы по своему вкусу и религии), и то, что типовое, дает очень большие удобства по массовому управлению и развертыванию.

Хотелось бы услышать от модераторов/девелоперов OpenVZ, интересно это все, или нет?


IT-outsource for UNIX servers,
http://ha-systems.ru

[Updated on: Sun, 20 December 2009 16:18]

Report message to a moderator

Re: puppet менеджмент и OpenVZ [message #38497 is a reply to message #38449] Sat, 26 December 2009 23:22 Go to previous message
kir is currently offline  kir
Messages: 1645
Registered: August 2005
Location: Moscow, Russia
Senior Member

Пишите на вики, английский поправим Wink

Kir Kolyshkin
http://static.openvz.org/userbars/openvz-developer.png
Previous Topic: CentOS5: активация udev после обновления на CentOS 5.4
Next Topic: 4 гига операционки + 64-разрядная ОС.
Goto Forum:
  


Current Time: Mon Jul 22 12:53:30 GMT 2024

Total time taken to generate the page: 0.02420 seconds