Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 53b0ccc

Browse files
committed
NEW: cfsystem_service type
1 parent 7dce0ed commit 53b0ccc

File tree

4 files changed

+207
-0
lines changed

4 files changed

+207
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ project adheres to [Semantic Versioning](http://semver.org/).
77
- CHANGED: updated for Ubuntu 18.04 Bionic support
88
- NEW: cfsystem::add_handy_tools to control additional package setup
99
- NEW: FreeIPA NTP support
10+
- NEW: cfsystem_service type
1011

1112
## 1.1.0 (2018-05-02)
1213
- NEW: cfsystem::metric type as a sort of IoC to integrate cfmetrics

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,3 +338,7 @@ Therefore, this drop-in replacement has been provided.
338338
[cfnetwork]: https://codingfuture.net/docs/cfnetwork
339339
[cfauth]: https://codingfuture.net/docs/cfauth
340340
[cffirehol]: https://codingfuture.net/docs/cffirehol
341+
342+
## `cfsystem_service` type
343+
344+
Helper type to create cfsystem-integrated services.
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#
2+
# Copyright 2018 (c) Andrey Galkin
3+
#
4+
5+
6+
begin
7+
require File.expand_path( '../../../../puppet_x/cf_system', __FILE__ )
8+
rescue LoadError
9+
require File.expand_path( '../../../../../../cfsystem/lib/puppet_x/cf_system', __FILE__ )
10+
end
11+
12+
Puppet::Type.type(:cfsystem_service).provide(
13+
:cfprov,
14+
:parent => PuppetX::CfSystem::ProviderBase
15+
) do
16+
desc "Provider for cfsystem_service"
17+
18+
commands :systemctl => PuppetX::CfSystem::SYSTEMD_CTL
19+
20+
def self.get_config_index
21+
'cf91service'
22+
end
23+
24+
def self.get_generator_version
25+
cf_system().makeVersion(__FILE__)
26+
end
27+
28+
def self.check_exists(params)
29+
debug("check_exists: #{params}")
30+
begin
31+
systemctl(['status', "#{params[:name]}.service"])
32+
rescue => e
33+
warning(e)
34+
#warning(e.backtrace)
35+
false
36+
end
37+
end
38+
39+
def self.on_config_change(newconf)
40+
debug('on_config_change')
41+
42+
new_services = []
43+
44+
newconf.each do |name, conf|
45+
new_services << name
46+
47+
begin
48+
self.send("create_svc", name, conf)
49+
rescue => e
50+
warning(e)
51+
#warning(e.backtrace)
52+
err("Transition error in setup")
53+
end
54+
end
55+
56+
begin
57+
cf_system.cleanupSystemD("cfsvc-", new_services)
58+
rescue => e
59+
warning(e)
60+
#warning(e.backtrace)
61+
err("Transition error in setup")
62+
end
63+
end
64+
65+
def self.create_svc(service_name, conf)
66+
debug('on_config_change')
67+
68+
user = conf[:user]
69+
root_dir = conf[:root_dir]
70+
settings_tune = (conf[:settings_tune] or {})
71+
command = conf[:command]
72+
allow_restart = conf[:allow_restart]
73+
74+
avail_mem = cf_system.getMemory(service_name)
75+
76+
# Service File
77+
#==================================================
78+
content_ini = {
79+
'Unit' => {
80+
'Description' => "Service: #{service_name}",
81+
},
82+
'Service' => {
83+
'ExecStart' => command,
84+
'LimitNOFILE' => '16384',
85+
'WorkingDirectory' => root_dir,
86+
},
87+
}
88+
89+
settings_tune.each { |k, v|
90+
content_ini.setdefault(k, {})
91+
content_ini[k].merge! v
92+
}
93+
94+
service_changed = self.cf_system().createService({
95+
:service_name => service_name,
96+
:user => user,
97+
:content_ini => content_ini,
98+
:cpu_weight => conf[:cpu_weight],
99+
:io_weight => conf[:io_weight],
100+
:mem_limit => avail_mem,
101+
:mem_lock => true,
102+
})
103+
104+
#==================================================
105+
106+
if service_changed and allow_restart
107+
warning(">> reloading #{service_name}")
108+
systemctl('restart', "#{service_name}.service")
109+
else
110+
systemctl('start', "#{service_name}.service")
111+
end
112+
end
113+
end
114+
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
#
2+
# Copyright 2018 (c) Andrey Galkin
3+
#
4+
5+
Puppet::Type.newtype(:cfsystem_service) do
6+
desc "DO NOT USE DIRECTLY."
7+
8+
autorequire(:cfsystem_flush_config) do
9+
['begin']
10+
end
11+
autorequire(:cfsystem_memory_calc) do
12+
['total']
13+
end
14+
autonotify(:cfsystem_flush_config) do
15+
['commit']
16+
end
17+
18+
ensurable do
19+
defaultvalues
20+
defaultto :absent
21+
end
22+
23+
24+
newparam(:name) do
25+
isnamevar
26+
27+
validate do |value|
28+
unless value =~ /^[a-z0-9_@-]+$/i
29+
raise ArgumentError, "%s is not a valid service name" % value
30+
end
31+
end
32+
end
33+
34+
newproperty(:user) do
35+
validate do |value|
36+
unless value =~ /^[a-zA-Z_][a-zA-Z0-9_-]*$/
37+
raise ArgumentError, "%s is not valid user" % value
38+
end
39+
end
40+
end
41+
42+
newproperty(:root_dir) do
43+
validate do |value|
44+
unless value =~ /^(\/[a-z0-9_]+)+$/i
45+
raise ArgumentError, "%s is not a valid path" % value
46+
end
47+
end
48+
end
49+
50+
newproperty(:memory_weight) do
51+
validate do |value|
52+
unless value.is_a? Integer and value > 0
53+
raise ArgumentError, "%s is not a valid positive integer" % value
54+
end
55+
end
56+
end
57+
58+
newproperty(:cpu_weight) do
59+
validate do |value|
60+
unless value.is_a? Integer and value > 0
61+
raise ArgumentError, "%s is not a valid positive integer" % value
62+
end
63+
end
64+
end
65+
66+
newproperty(:io_weight) do
67+
validate do |value|
68+
unless value.is_a? Integer and value > 0
69+
raise ArgumentError, "%s is not a valid positive integer" % value
70+
end
71+
end
72+
end
73+
74+
newproperty(:settings_tune) do
75+
validate do |value|
76+
value.is_a? Hash
77+
end
78+
end
79+
80+
newproperty(:command) do
81+
isrequired
82+
end
83+
84+
newproperty(:allow_restart) do
85+
defaultto true
86+
end
87+
end
88+

0 commit comments

Comments
 (0)