File tree Expand file tree Collapse file tree 4 files changed +134
-0
lines changed Expand file tree Collapse file tree 4 files changed +134
-0
lines changed Original file line number Diff line number Diff line change @@ -373,6 +373,20 @@ loginctl_user { 'foo':
373
373
374
374
or as a hash via the `systemd::loginctl_users` parameter.
375
375
376
+ # ## Systemd Escape Function
377
+ Escapes strings as `systemd-escape` command does.
378
+
379
+ ` ` ` puppet
380
+ $result = systemd::escape('foo::bar/')
381
+ ` ` `
382
+ ` $result` would be `foo::bar-`
383
+
384
+ or path escape as if with `-p` option.
385
+
386
+ ` ` ` puppet
387
+ $result = systemd::escape('/mnt/foobar/', true)
388
+ ` ` `
389
+ ` $result` would be `mnt-foobar`.
376
390
377
391
# # Transfer Notice
378
392
Original file line number Diff line number Diff line change 35
35
36
36
* [ ` loginctl_user ` ] ( #loginctl_user ) : An arbitrary name used as the identity of the resource.
37
37
38
+ ### Functions
39
+
40
+ * [ ` systemd::escape ` ] ( #systemdescape ) : Escape strings as systemd-escape does.
41
+
38
42
### Data types
39
43
40
44
* [ ` Systemd::Dropin ` ] ( #systemddropin ) : custom datatype that validates filenames/paths for valid systemd dropin files
@@ -1112,6 +1116,60 @@ An arbitrary name used as the identity of the resource.
1112
1116
The specific backend to use for this ` loginctl_user ` resource. You will seldom need to specify this --- Puppet will
1113
1117
usually discover the appropriate provider for your platform.
1114
1118
1119
+ ## Functions
1120
+
1121
+ ### <a name =" systemdescape " ></a >` systemd::escape `
1122
+
1123
+ Type: Puppet Language
1124
+
1125
+ Escape strings as systemd-escape does.
1126
+
1127
+ #### Examples
1128
+
1129
+ ##### Escaping a string
1130
+
1131
+ ``` puppet
1132
+ $result = systemd::escape('foo::bar')
1133
+ ```
1134
+
1135
+ ##### Escaping a path
1136
+
1137
+ ``` puppet
1138
+ $result = systemd::escape('/mnt/foobar',true)
1139
+ ```
1140
+
1141
+ #### ` systemd::escape(String[1] $input, Boolean $path = false) `
1142
+
1143
+ The systemd::escape function.
1144
+
1145
+ Returns: ` String ` String
1146
+
1147
+ ##### Examples
1148
+
1149
+ ###### Escaping a string
1150
+
1151
+ ``` puppet
1152
+ $result = systemd::escape('foo::bar')
1153
+ ```
1154
+
1155
+ ###### Escaping a path
1156
+
1157
+ ``` puppet
1158
+ $result = systemd::escape('/mnt/foobar',true)
1159
+ ```
1160
+
1161
+ ##### ` input `
1162
+
1163
+ Data type: ` String[1] `
1164
+
1165
+ Input string
1166
+
1167
+ ##### ` path `
1168
+
1169
+ Data type: ` Boolean `
1170
+
1171
+ Use path (-p) ornon-path style escaping.
1172
+
1115
1173
## Data types
1116
1174
1117
1175
### <a name =" systemddropin " ></a >` Systemd::Dropin `
Original file line number Diff line number Diff line change
1
+ # @summary Escape strings as systemd-escape does.
2
+ # @param input Input string
3
+ # @param path Use path (-p) ornon-path style escaping.
4
+ # @return String
5
+ # @example Escaping a string
6
+ # $result = systemd::escape('foo::bar')
7
+ # @example Escaping a path
8
+ # $result = systemd::escape('/mnt/foobar',true)
9
+ function systemd::escape (String[1] $input , Boolean $path = false ) >> String {
10
+ # Escape method is defined
11
+ # https://www.freedesktop.org/software/systemd/man/systemd.unit.html
12
+
13
+ # fail path if . on end.
14
+ if $path and $input [-1] == ' .' {
15
+ fail(' A path can not end in a \' .\' ' )
16
+ }
17
+
18
+ # De-duplicate any `/` and prefix,suffix `/` if file
19
+ if $path {
20
+ $_chomped = $input .regsubst(' /+$' ,' ' ).regsubst(' ^/+' ,' ' ).regsubst(' //+' ,' /' )
21
+ } else {
22
+ $_chomped = $input
23
+ }
24
+
25
+ # Docs talk of escaping `:` also but seems not to be the case in reality.
26
+ #
27
+ $_output = $_chomped.map |$_i, $_token | {
28
+ case $_token {
29
+ ' .' : {
30
+ $_escaped = $_i ? {
31
+ 0 => ' \x 2e' ,
32
+ default => $_token,
33
+ }
34
+ }
35
+ ' /' : { $_escaped = ' -' }
36
+ ' ,' : { $_escaped = ' \x 2c' }
37
+ default: { $_escaped = $_token }
38
+ }
39
+ $_escaped
40
+ }.join
41
+
42
+ return $_output
43
+ }
Original file line number Diff line number Diff line change
1
+ require 'spec_helper'
2
+ describe 'systemd::escape' do
3
+ context 'with path false' do
4
+ it { is_expected . to run . with_params ( 'foo' , false ) . and_return ( 'foo' ) }
5
+ it { is_expected . to run . with_params ( 'foo/bar/.' , false ) . and_return ( 'foo-bar-.' ) }
6
+ it { is_expected . to run . with_params ( '/foo/bar/' , false ) . and_return ( '-foo-bar-' ) }
7
+ it { is_expected . to run . with_params ( '//foo//bar//' , false ) . and_return ( '--foo--bar--' ) }
8
+ it { is_expected . to run . with_params ( '//foo:bar,foo_bar.//' , false ) . and_return ( '--foo:bar\x2cfoo_bar.--' ) }
9
+ it { is_expected . to run . with_params ( '.foo' , false ) . and_return ( '\x2efoo' ) }
10
+ end
11
+ context 'with path true' do
12
+ it { is_expected . to run . with_params ( 'foo' , true ) . and_return ( 'foo' ) }
13
+ it { is_expected . to run . with_params ( 'foo/bar/.' , true ) . and_raise_error ( %r{ path can not end} ) }
14
+ it { is_expected . to run . with_params ( '/foo/bar/' , true ) . and_return ( 'foo-bar' ) }
15
+ it { is_expected . to run . with_params ( '//foo//bar//' , true ) . and_return ( 'foo-bar' ) }
16
+ it { is_expected . to run . with_params ( '//foo:bar,foo_bar.//' , true ) . and_return ( 'foo:bar\x2cfoo_bar.' ) }
17
+ it { is_expected . to run . with_params ( '.foo' , true ) . and_return ( '\x2efoo' ) }
18
+ end
19
+ end
You can’t perform that action at this time.
0 commit comments