Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Installation of puppet using PC repositories on Debian
- Loading branch information
Suszyński Krzysztof
committed
Jul 13, 2017
1 parent
a5044e8
commit 4bea9be
Showing
30 changed files
with
266 additions
and
57 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,16 @@ | ||
from six import with_metaclass | ||
from abc import ABCMeta, abstractmethod | ||
|
||
from puppeter.domain.model.answers import Answers # NOQA | ||
|
||
|
||
class AnswersGateway(with_metaclass(ABCMeta, object)): | ||
@abstractmethod | ||
def read_answers_from_file(self, file): | ||
# type: (file) -> Answers | ||
pass | ||
|
||
@abstractmethod | ||
def write_answers_to_file(self, answers, file): | ||
# type: (Answers, file) -> None | ||
pass |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,79 @@ | ||
from abc import ABCMeta, abstractmethod | ||
from six import with_metaclass | ||
from collections import OrderedDict | ||
from string import Template | ||
|
||
import pkg_resources | ||
import re | ||
from six import with_metaclass, iteritems | ||
|
||
|
||
class Configurer(with_metaclass(ABCMeta, object)): | ||
@abstractmethod | ||
def produce_commands(self): | ||
# type: () -> [str] | ||
raise NotImplementedError() | ||
|
||
def _collector(self): | ||
# type: () -> self.CommandsCollector | ||
return self.CommandsCollector(self) | ||
|
||
class BashTemplate(Template): | ||
delimiter = '@' | ||
flags = re.MULTILINE | ||
|
||
class CommandsCollector: | ||
|
||
SHEBANG_REGEX = re.compile('^#!(.*)\n', re.MULTILINE) | ||
|
||
def __init__(self, configurer): | ||
self.__parts = OrderedDict() | ||
self.__configurer = configurer # type: Configurer | ||
|
||
def collect_from_template(self, description, template, mapping): | ||
# type: (str, str, dict) -> Configurer.CommandsCollector | ||
script = self.__template(template) \ | ||
.substitute(mapping) | ||
self.__parts[description] = script | ||
return self | ||
|
||
def collect_from_file(self, description, path): | ||
# type: (str, str) -> Configurer.CommandsCollector | ||
script = self.__resource_string(path) | ||
self.__parts[description] = script | ||
return self | ||
|
||
def lines(self): | ||
# type: () -> str | ||
lines = ['#!/usr/bin/env bash -ex', ''] | ||
i = 1 | ||
for (description, script) in iteritems(self.__parts): | ||
lines.append('# Part %d: %s' % (i, description)) | ||
lines += self.__strip_shebang(script).split("\n") | ||
i += 1 | ||
return lines | ||
|
||
def __template(self, path): | ||
# type: (str) -> Configurer.BashTemplate | ||
return Configurer.BashTemplate(self.__resource_string(path)) | ||
|
||
def __resource_string(self, path): | ||
# noinspection PyTypeChecker | ||
return self.__load_resource(pkg_resources.resource_string, self.__configurer, path)\ | ||
.decode("utf-8") | ||
|
||
@staticmethod | ||
def __load_resource(loader, obj, path): | ||
mod = Configurer.CommandsCollector.__moduleof(obj) | ||
return loader(mod, path) | ||
|
||
@staticmethod | ||
def __moduleof(cls): | ||
try: | ||
cls = cls.original_cls() | ||
except AttributeError: | ||
cls = cls.__class__ | ||
return cls.__module__ | ||
|
||
@staticmethod | ||
def __strip_shebang(script): | ||
return re.sub(Configurer.CommandsCollector.SHEBANG_REGEX, "", script) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
from abc import ABCMeta | ||
|
||
from six import with_metaclass | ||
|
||
from puppeter.persistence.gateway.installer.debian.base import BaseDebianConfigurer | ||
|
||
|
||
class AfterPuppet4xConfigurer(with_metaclass(ABCMeta, BaseDebianConfigurer)): | ||
def __init__(self, installer): | ||
super(AfterPuppet4xConfigurer, self).__init__(installer) | ||
|
||
def _collect_agent(self, collector): | ||
collector.collect_from_file('Puppet Agent setup', 'puppetagent.sh') | ||
|
||
def _collect_server(self, collector): | ||
collector.collect_from_file('Puppet Server setup', 'puppetserver.sh') |
10 changes: 10 additions & 0 deletions
10
puppeter/persistence/gateway/installer/debian/apt-update.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#!/usr/bin/env bash | ||
function getLastAptGetUpdate() { | ||
local aptDate="$(stat -c %Y '/var/cache/apt')" | ||
local nowDate="$(date +'%s')" | ||
|
||
echo $((nowDate - aptDate)) | ||
} | ||
if [[ "$(getLastAptGetUpdate)" -gt '@{interval}' ]]; then | ||
apt-get update -m | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
from abc import ABCMeta, abstractmethod | ||
|
||
from six import with_metaclass | ||
|
||
from puppeter.domain.model import Installer # NOQA | ||
from puppeter.domain.model.configurer import Configurer | ||
from puppeter.domain.model.installer import Mode | ||
|
||
|
||
class BaseDebianConfigurer(with_metaclass(ABCMeta, Configurer)): | ||
UPDATE_INTERVAL = 24 * 60 * 60 | ||
|
||
def __init__(self, installer): | ||
self._installer = installer # type: Installer | ||
|
||
def produce_commands(self): | ||
collector = self._collector() | ||
collector.collect_from_template('apt system update', | ||
'apt-update.sh', | ||
dict(interval=self.UPDATE_INTERVAL)) | ||
collector.collect_from_file('wget downloader', 'wget.sh') | ||
self._collect_repo(collector) | ||
self._collect_agent(collector) | ||
if self._installer.mode() == Mode.Server: | ||
self._collect_server(collector) | ||
return collector.lines() | ||
|
||
@abstractmethod | ||
def _collect_repo(self, collector): | ||
# type: (Configurer.CommandsCollector) -> None | ||
raise NotImplementedError() | ||
|
||
@abstractmethod | ||
def _collect_agent(self, collector): | ||
# type: (Configurer.CommandsCollector) -> None | ||
raise NotImplementedError() | ||
|
||
@abstractmethod | ||
def _collect_server(self, collector): | ||
# type: (Configurer.CommandsCollector) -> None | ||
raise NotImplementedError() |
11 changes: 11 additions & 0 deletions
11
puppeter/persistence/gateway/installer/debian/pc3x-repo.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
#!/usr/bin/env bash | ||
set +e | ||
if ! dpkg -l 'puppetlabs-release' | grep -q ii; then | ||
set -e | ||
cd /tmp | ||
wget 'https://apt.puppetlabs.com/puppetlabs-release-@{codename}.deb' | ||
sudo dpkg -i 'puppetlabs-release-@{codename}.deb' | ||
rm 'puppetlabs-release-@{codename}.deb' | ||
cd - | ||
sudo apt-get update | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,24 @@ | ||
from puppeter.container import Named | ||
from puppeter.domain.model.configurer import Configurer | ||
from puppeter.domain.facter import Facter | ||
from puppeter.domain.model.osfacts import OperatingSystemCodename | ||
from puppeter.persistence.gateway.installer.debian.base import BaseDebianConfigurer | ||
|
||
|
||
@Named('pc3x-debian') | ||
class PC3xConfigurer(Configurer): | ||
class DebianPC3xConfigurer(BaseDebianConfigurer): | ||
def __init__(self, installer): | ||
self.installer = installer | ||
BaseDebianConfigurer.__init__(self, installer) | ||
|
||
def produce_commands(self): | ||
raise NotImplementedError('Not yet implemented!') | ||
def _collect_repo(self, collector): | ||
codename = Facter.get(OperatingSystemCodename) | ||
collector.collect_from_template( | ||
'Puppet Package Repository setup (Puppet OSS 3.x)', | ||
'pc3x-repo.sh', | ||
dict(codename=codename) | ||
) | ||
|
||
def _collect_agent(self, collector): | ||
collector.collect_from_file('Puppet agent setup', 'puppet3xagent.sh') | ||
|
||
def _collect_server(self, collector): | ||
collector.collect_from_file('PuppetMaster setup', 'puppetmaster.sh') |
11 changes: 11 additions & 0 deletions
11
puppeter/persistence/gateway/installer/debian/pc4x-repo.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
#!/usr/bin/env bash | ||
set +e | ||
if ! dpkg -l 'puppetlabs-release-pc1' | grep -q ii; then | ||
set -e | ||
cd /tmp | ||
wget 'https://apt.puppetlabs.com/puppetlabs-release-pc1-@{codename}.deb' | ||
sudo dpkg -i 'puppetlabs-release-pc1-@{codename}.deb' | ||
rm 'puppetlabs-release-pc1-@{codename}.deb' | ||
cd - | ||
sudo apt-get update | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,19 @@ | ||
from puppeter.container import Named | ||
from puppeter.domain.facter import Facter | ||
from puppeter.domain.model.osfacts import OperatingSystemCodename | ||
from puppeter.domain.model.configurer import Configurer | ||
from puppeter.persistence.gateway.installer.debian.after4x import AfterPuppet4xConfigurer | ||
|
||
|
||
@Named('pc4x-debian') | ||
class PC4xConfigurer(Configurer): | ||
class DebianPC4xConfigurer(AfterPuppet4xConfigurer): | ||
|
||
def __init__(self, installer): | ||
self.__installer = installer | ||
AfterPuppet4xConfigurer.__init__(self, installer) | ||
|
||
def produce_commands(self): | ||
def _collect_repo(self, collector): | ||
codename = Facter.get(OperatingSystemCodename) | ||
cmds = [] | ||
cmds.append("") | ||
raise NotImplementedError('Not yet implemented! %s' % codename) | ||
collector.collect_from_template( | ||
'Puppet Labs Collection Repository (PC1) setup (Puppet OSS 4.x)', | ||
'pc4x-repo.sh', | ||
dict(codename=codename) | ||
) |
11 changes: 11 additions & 0 deletions
11
puppeter/persistence/gateway/installer/debian/pc5x-repo.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
#!/usr/bin/env bash | ||
set +e | ||
if ! dpkg -l 'puppet5-release' | grep -q ii; then | ||
set -e | ||
cd /tmp | ||
wget 'https://apt.puppetlabs.com/puppet5-release-@{codename}.deb' | ||
sudo dpkg -i 'puppet5-release-@{codename}.deb' | ||
rm 'puppet5-release-@{codename}.deb' | ||
cd - | ||
sudo apt-get update | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,19 @@ | ||
from puppeter.container import Named | ||
from puppeter.domain.model.configurer import Configurer | ||
from puppeter.domain.facter import Facter | ||
from puppeter.domain.model.osfacts import OperatingSystemCodename | ||
from puppeter.persistence.gateway.installer.debian.after4x import AfterPuppet4xConfigurer | ||
|
||
|
||
@Named('pc5x-debian') | ||
class PC5xConfigurer(Configurer): | ||
class DebianPC5xConfigurer(AfterPuppet4xConfigurer): | ||
|
||
def __init__(self, installer): | ||
self.installer = installer | ||
AfterPuppet4xConfigurer.__init__(self, installer) | ||
|
||
def produce_commands(self): | ||
raise NotImplementedError('Not yet implemented!') | ||
def _collect_repo(self, collector): | ||
codename = Facter.get(OperatingSystemCodename) | ||
collector.collect_from_template( | ||
'Puppet Platform Repository setup (Puppet OSS 5.x)', | ||
'pc5x-repo.sh', | ||
dict(codename=codename) | ||
) |
6 changes: 6 additions & 0 deletions
6
puppeter/persistence/gateway/installer/debian/puppet3xagent.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
#!/usr/bin/env bash | ||
set +e | ||
if ! dpkg -l 'puppet' | grep -q ii; then | ||
set -e | ||
sudo apt-get install -y puppet | ||
fi |
4 changes: 1 addition & 3 deletions
4
...plates/installer/pc/debian/puppetagent.sh → ...e/gateway/installer/debian/puppetagent.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,7 @@ | ||
#!/usr/bin/env bash | ||
|
||
set -x | ||
set +e | ||
|
||
if ! dpkg -l 'puppet-agent' | grep -q ii; then | ||
set -e | ||
sudo apt-get install -y puppet-agent | ||
exec env bash -l | ||
fi |
2 changes: 2 additions & 0 deletions
2
puppeter/persistence/gateway/installer/debian/puppetmaster.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
#!/usr/bin/env bash | ||
puppet resource package puppetmaster ensure=installed |
2 changes: 2 additions & 0 deletions
2
puppeter/persistence/gateway/installer/debian/puppetserver.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
#!/usr/bin/env bash | ||
puppet resource package puppetserver ensure=installed |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
#!/usr/bin/env bash | ||
set +e | ||
if ! dpkg -l 'wget' | grep -q ii; then | ||
set -e | ||
sudo apt-get install -y wget | ||
fi |
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.