Comments 10
Случаем, можно.
forge.puppetlabs.com/puppetlabs/apt
forge.puppetlabs.com/puppetlabs/apt
+1
интересно было бы узнать, а с чего Вы решили что, например, mongodb-unzip, install, run будет выполнены именно в такой последовательности? в exec нигде не прописаны зависимости, а манифесты в puppet не являются линейными. хотя желаемого в итоге добиться удастся только после нескольких следующих запусков манифестов, но это, во-первых, неправильно, а во-вторых между запусками может пройти немало времени.
+1
Вместо распаковки архивов я бы использовал chocolatey — это гораздо более элегантное решение. У puppet существует провайдер package chocolatey. Установка mongodb выглядела бы приблизительно так:
Если не используете deployment систему (для .net очень сильно рекомендую Octopus Deploy) — я бы тогда использовал chocolatey для развертывания своего софта. Пакуете свой софт в nuget-package и устанавливаете этот пакет из своего источник). А учитывая еще то, что в puppet есть модуль iis, то получилось бы примерно следующее:
Таким образом, все действия по установке приложения api_deploy происходят в chocolateyInstall.ps1 (док), и сам манифест остается чистым.
Про порядок exec было верно подмечено, у Вас нет ни одной зависимости, и все будет запускаться в разнобой, используйте ordering.
Очень рекомендую использовать theforeman, так-как в нем не только функционал назначения классов, но еще есть возможность управлять инстансами в AWS прямо из панели управления theForeman (очень удобно создавать инстансы прямо там из заданного образа AMI с нужными классами в один клик!).
Удачи!
package { "mongodb":
ensure => installed,
provider => chocolatey,
}
Если не используете deployment систему (для .net очень сильно рекомендую Octopus Deploy) — я бы тогда использовал chocolatey для развертывания своего софта. Пакуете свой софт в nuget-package и устанавливаете этот пакет из своего источник). А учитывая еще то, что в puppet есть модуль iis, то получилось бы примерно следующее:
class www_site_com {
include packages::iis
include iis::certs::star_site_com
$sitename = 'www.site.com'
#Получаем имя сервера для последующего обращения к нему
$srvsubstname = downcase($::hostname)
#Создаем директорию IIS
file { "c:\\inetpub\\wwwroot\\$sitename":
ensure => "directory",
}
#Создаем запись в host файле для обращения к серверу по его имени локально
host { "${srvsubstname}$sitename":
ip => '127.0.0.1',
}
#Создаем Application Pool
iis_apppool {$sitename:
ensure => present,
managedpipelinemode => 'Integrated',
managedruntimeversion => 'v4.0',
autostart => true,
require => Class['packages::iis'],
}
#Создаем Site & Bindings
iis_site {$sitename:
ensure => present,
bindings => ["http/*:80:$sitename","http/*:80:${srvsubstname}$sitename","https/*:80:$sitename","https/*:80:${srvsubstname}$sitename"],
serverautostart => true,
require => Class['packages::iis','iis::certs::star_site_com'],
}
#Создаем Application
iis_app {"$sitename/":
ensure => present,
applicationpool => $sitename,
require => Class['packages::iis'],
}
#Указываем директорию в которой находится наше приложение
iis_vdir {"$sitename/":
ensure => present,
iis_app => "$sitename/",
physicalpath => "c:\\inetpub\\wwwroot\\$sitename",
require => [Class['packages::iis'],File["c:\\inetpub\\wwwroot\\$sitename"]],
}
#Устанавливаем нужное приложение из своего nuget-feed
package { "api_deploy":
ensure => installed,
provider => chocolatey,
source => 'https://myfeed.example.com/api/v2'
}
}
Таким образом, все действия по установке приложения api_deploy происходят в chocolateyInstall.ps1 (док), и сам манифест остается чистым.
Про порядок exec было верно подмечено, у Вас нет ни одной зависимости, и все будет запускаться в разнобой, используйте ordering.
Очень рекомендую использовать theforeman, так-как в нем не только функционал назначения классов, но еще есть возможность управлять инстансами в AWS прямо из панели управления theForeman (очень удобно создавать инстансы прямо там из заданного образа AMI с нужными классами в один клик!).
Удачи!
+3
Вдохновлённый комменатрием kireevco, подправил свою конфигурацию. Теперь IIS и сайт конфигурируются с помощью модулей от PuppetLabs (dism и opentable-iis).
Скоро изменения коснутся и других компонентов.
Скоро изменения коснутся и других компонентов.
+1
В моей инфраструктуре сложность заключалась в том, что несколько кластеров имеют разные версии mongo, и поскольку 2.2 и 2.4 несовместимы между собой приходится иметь разные версии mongos на клиентах. Недавно решил задачу с установкой — создал пару пакетов для chocolatey для версий 2.2.X и 2.4.X. Таким образом устанавливать mongos на клиенты под винду стало еще удобнее:
Позволяет распаковать mongodb в c:\mongodb\<версия>. После чего, можно установить службу, mongos, например:
class packages::mongodb::install {
include packages::chocolatey
if $::kernel == "windows"
{
package { "mongodb.core.2.4":
name => "mongodb.core.2.4",
ensure => "2.4.9.2014021905",
provider => 'chocolatey',
install_options => "-pre",
require => Class["packages::chocolatey"],
}
file {'c:\mongodb\2.4.9\log':
ensure => directory,
require => Package["mongodb.core.2.4"],
}
package { "mongodb.core.2.2":
name => "mongodb.core.2.2",
ensure => "2.2.7.2014021905",
provider => 'chocolatey',
install_options => "-pre",
require => Class["packages::chocolatey"],
}
file {'c:\mongodb\2.2.7\log':
ensure => directory,
require => Package["mongodb.core.2.2"],
}
}
}
Позволяет распаковать mongodb в c:\mongodb\<версия>. После чего, можно установить службу, mongos, например:
class packages::mongodb::mongos::blah {
include packages::mongodb::install
$mongo_version = '2.2.7'
$cluster_name = 'Blah'
$bind_port = '27019'
$configdb_list = 'cfg1.foo.corp:26001,cfg2.foo.corp:26002,cfg3.foo.corp:26003'
$service_name = "Mongo $cluster_name Router"
$mongo_install_path = "c:\\mongodb\\$mongo_version"
$mongos_exe = "$mongo_install_path\\bin\\mongos.exe"
$service_install_cmd = "\"$mongos_exe --port $bind_port --logpath $mongo_install_path\\log\\mongos-$cluster_name.log --configdb '$configdb_list' --quiet --install --serviceName '$service_name' --serviceDisplayName '$service_name' --serviceDescription '$service_name - Managed by Puppet'\""
exec {"Register $service_name Service" :
command => "$service_install_cmd",
path => $::path,
onlyif => "if (\$(Get-WmiObject Win32_Service | Select-String -Pattern '$service_name') -eq \$null ){ exit 0 } else { exit 1 }",
provider => powershell,
require => [Package["mongodb.core.2.2"],File["$mongo_install_path\\log"]],
notify => Service["$service_name"],
}
service {"$service_name":
ensure => running,
enable => true,
require => [ Exec["Register $service_name Service"]],
}
}
0
Sign up to leave a comment.
Автоконфигурация с помощью Puppet и AWS Cloud Formation