24
24
"""iocage provisioner for use with `puppet apply`."""
25
25
import typing
26
26
import os .path
27
+ import urllib .parse
27
28
28
29
import git
29
30
@@ -54,27 +55,28 @@ class ControlRepoDefinition(dict):
54
55
"""Puppet control-repo definition."""
55
56
56
57
_url : str
57
- _name : str
58
58
_pkgs : typing .List [str ]
59
59
60
60
def __init__ (
61
61
self ,
62
- name : str ,
63
- url : str ,
62
+ url : urllib .parse .DefragResult ,
64
63
logger : 'libioc.Logger.Logger'
65
64
) -> None :
66
65
self .logger = logger
66
+
67
+ if isinstance (url , urllib .parse .ParseResult ) is False :
68
+ raise TypeError ("Source must be an URL" )
67
69
self .url = url
68
- self .name = name
69
70
70
- _pkgs = ['puppet6' ] # make this a Global Varialbe
71
- if not (url .startswith ('file://' ) or url .startswith ('/' )):
72
- _pkgs += 'rubygem-r10k'
71
+ self . _pkgs = ['puppet6' ] # make this a Global Varialbe
72
+ if not (self . url .startswith ('file://' ) or self . url .startswith ('/' )):
73
+ self . _pkgs += 'rubygem-r10k'
73
74
74
75
@property
75
76
def local (self ) -> bool :
76
77
"""Return whether this control repo resides locally."""
77
- if not (self .url .startswith ('file://' ) or self .url .startswith ('/' )):
78
+ _url = self .url
79
+ if not (_url .startswith ('file://' ) or _url .startswith ('/' )):
78
80
return False
79
81
return True
80
82
@@ -86,22 +88,26 @@ def remote(self) -> bool:
86
88
@property
87
89
def url (self ) -> str :
88
90
"""Return the Puppet Control-Repo URL."""
89
- return str ( self ._url )
91
+ return self ._url
90
92
91
93
@url .setter
92
- def url (self , value : str ) -> None :
94
+ def url (self , value : typing . Union [ urllib . parse . ParseResult , str ] ) -> None :
93
95
"""Set the Puppet Control-Repo URL."""
94
- self ._url = value
96
+ _url : urllib .parse .ParseResult
97
+ if isinstance (value , urllib .parse .ParseResult ) is True :
98
+ _url = typing .cast (urllib .parse .ParseResult , value )
99
+ elif isinstance (value , str ) is True :
100
+ _url = urllib .parse .urlparse (
101
+ str (value ),
102
+ allow_fragments = False
103
+ )
104
+ else :
105
+ raise TypeError ("URL must be urllib.parse.ParseResult or string" )
95
106
96
- @property
97
- def name (self ) -> str :
98
- """Return the unique name for this Puppet Control-Repo URL."""
99
- return self ._name
107
+ if _url .fragment != "" :
108
+ raise ValueError ("URL may not contain fragment" )
100
109
101
- @name .setter
102
- def name (self , value : str ) -> None :
103
- """Set a unique name for this Puppet Control-Repo URL."""
104
- self ._name = value
110
+ self ._url = _url .geturl ()
105
111
106
112
@property
107
113
def pkgs (self ) -> typing .List [str ]:
@@ -148,7 +154,6 @@ def provision(
148
154
ioc set \
149
155
provisioning.method=puppet \
150
156
provisioning.source=http://example.com/my/puppet-env \
151
- provisioning.name=my-puppet-env \
152
157
myjail
153
158
154
159
"""
@@ -168,8 +173,7 @@ def provision(
168
173
try :
169
174
yield jailProvisioningAssetDownloadEvent .begin ()
170
175
pluginDefinition = ControlRepoDefinition (
171
- name = self .name ,
172
- url = self .source ,
176
+ url = urllib .parse .urlparse (self .source ).geturl (),
173
177
logger = self .jail .logger
174
178
)
175
179
yield jailProvisioningAssetDownloadEvent .end ()
0 commit comments