Project

Profile

Help

Pulp 3 Minimum Viable Product » History » Sprint/Milestone 133

amacdona@redhat.com, 12/12/2017 06:34 PM

1 1 bmbouter
# Pulp 3.0.0 Minimum Viable Product (MVP)
2
3 21 bmbouter
<span style="color:red;">Lines highlighted in red need more attention.</span>
4 20 bmbouter
5 37 bmbouter
## Overall Guarantees
6
7 57 mhrivnak
  - This is not a direct replacement for Pulp 2.
8
  - This is the minimum required for a 3.0.0 beta and GA.
9
  - All REST API calls will update the DB using transactions as necessary to ensure data integrity.
10 37 bmbouter
11 59 bmbouter
## Legend
12
13
\[done\] means merged and documented  
14
\[in-progress\] means started but not fully done  
15
If there is no label the effort has not yet been started
16
17 1 bmbouter
## Authentication
18
19 59 bmbouter
As an authenticated user I can manage user(s). \[done\]
20 17 semyers
21
  - Add a user
22
  - View user(s)
23 58 mhrivnak
  - Update any user detail
24 1 bmbouter
  - Delete a user
25
26 59 bmbouter
As an API user, I can have documentation to generate a JSON Web Token (JWT) without the server being online. \[done\]
27 1 bmbouter
28 59 bmbouter
As an administrator, I can disable JWT token expiration. This configuration is in the settings file and is system-wide. \[done\]
29 1 bmbouter
30 59 bmbouter
As an administrator, I can configure the JWT tokens to expire after a configurable amount of time. This configuration is in the settings file and is system-wide. \[done\]
31 1 bmbouter
32 59 bmbouter
The JWT shall have a username identifier \[done\]
33 1 bmbouter
34 125 bmbouter
As an API user, I can authenticate any API call with a valid username and password \[done\]
35
36
As an API user, I can authenticate any API call with a valid JWT \[[3163](https://pulp.plan.io/issues/3163)\]
37
38
As a JWT authenticated user, I can refresh my JWT token if Pulp is configured with JWT_ALLOW_REFRESH set to True (default is False) \[[3163](https://pulp.plan.io/issues/3163)\]
39 17 semyers
40 59 bmbouter
As an API user, I can invalidate all existing JWT tokens for a given user. \[done\]
41 17 semyers
42 59 bmbouter
As an authenticated user, when deleting a user 'foo', all of user 'foo's existing JWTs are invalidated. \[done\]
43 17 semyers
44 59 bmbouter
As an un-authenticated user, I can obtain a JWT token by using a username and password. \[done\]
45 1 bmbouter
46 110 daviddavis
As an authenticated user, I can filter users by: \[[3142](https://pulp.plan.io/issues/3142)\]
47
48
  - username: (equality, username_in_list)
49
50 1 bmbouter
## Repositories
51
52 18 dkliban@redhat.com
As an authenticated user, I can list all repos.
53
54 60 bmbouter
  - All fields are included \[done\]
55
  - Pagination is supported \[done\]
56 1 bmbouter
57 112 bmbouter
As an authenticated user I can use filters on Repositories list: \[[3079](https://pulp.plan.io/issues/3079)\]
58 109 amacdona@redhat.com
59
  - id: (id_in_list) \# id equality is not necessary, v3/repositories/\<UUID\>/
60
  - name: (equality, name_in_list)
61
62 18 dkliban@redhat.com
As an authenticated user, I can CRUD a repository
63
64 60 bmbouter
  - Create a repo \[done\]
65
  - Read a repo \[done\]
66
  - Update all mutable repo fields \[done\]
67 130 daviddavis
  - Delete a repo (asynchronous)
68 112 bmbouter
69 18 dkliban@redhat.com
As an authenticated user, I can list a repository's associated importers and publishers
70
71 60 bmbouter
  - All fields are included \[done\]
72
  - Pagination is supported \[done\]
73 1 bmbouter
74
As an authenticated user, I can see the number of content unit types with counts for each \[done\]\[[3059](https://pulp.plan.io/issues/3059)\]
75
76 130 daviddavis
As an authenticated user, when viewing a repository, I can discover a URL to the latest version of a repository.
77
78 51 bmbouter
## Importers
79
80
note: Importer attributes will commonly be available on importers, but aren't guaranteed to be used by all importers.
81
82 18 dkliban@redhat.com
As an authenticated user, I can CRUD an importer
83
84
  - Create an importer
85
  - Read an importer
86
  - Update all mutable importer fields
87 21 bmbouter
  - Delete an importer (asynchronous)
88 1 bmbouter
89 113 bmbouter
As an authenticated user, I have filters on the Importer list: \[[3080](https://pulp.plan.io/issues/3080)\]
90 109 amacdona@redhat.com
91
  - id: (id_in_list) \# id equality is not necessary, objects are referenced by id
92
  - name: (equality, name_in_list)
93
94 64 mhrivnak
As an authenticated user I can configure the following attributes on an Importer: \[done\]
95 47 bmbouter
96 48 amacdona@redhat.com
  - validate (bool) \[optional: defaults to True\]: If true, the plugin will validate imported content.
97
  - ssl_ca_certificate (str) \[optional\] String containing a PEM encoded CA certificate used to validate the server certificate presented by the external source.
98
  - ssl_client_certificate (str) \[optional\] Contains a PEM encoded client certificate used for authentication.
99
  - ssl_client_key (str) \[optional\] Contains a PEM encoded private key used for authentication.
100
  - ssl_validation (bool) \[optional: defaults to True\]: If true, SSL peer validation must be performed.
101 65 mhrivnak
  - proxy_url (str) \[optional\] Contains the proxy URL. Format: scheme://user:password@host:port.
102 48 amacdona@redhat.com
  - username (str) \[optional\] Contains the username to be used for authentication when syncing.
103 1 bmbouter
  - password (str) \[optional\] Contains the password to be used for authentication when syncing.
104 63 mhrivnak
  - <span style="color:orange;">download_policy (str) \[optional\] Contains the downloading policy name. This is a choice of three options:  
105
 \- immediate (default) - Downloading occurs during sync. The sync task does not complete until downloading is done.  
106
 \- background - Downloading is started by the sync but occurs in the background. The sync task completes before downloading is complete.  
107
 \- on-demand - The sync task records everything that would be downloaded but does not download content. Downloading occurs on demand as driven by client requests for content.</span>
108 1 bmbouter
  - feed_url (str) \[optional\] Contains the URL of an external content source. This is optional.
109 63 mhrivnak
  - <span style="color:orange;">sync mode: (str) \[optional\]. It has two choices 'additive' and 'mirror':  
110 130 daviddavis
 \- additive (default) - all remote content is added to the base repo version on sync. During sync no content is removed from the base repo version.  
111 63 mhrivnak
 \- mirror - the local content will mirror the remote content exactly, removing local content if not also present in the remote content.</span>
112 1 bmbouter
  - name (str) \[required\] Contains the name.
113
  - last_updated (datetime) \[read-only\] Contains the datetime of the last importer update.
114 50 bmbouter
  - last_synced (datetime) \[read-only\] Contains the datetime of the last importer sync.
115
116 130 daviddavis
As an authenticated user, I can define a default importer on a repo via href to be used whenever a new repo version is created.
117
118 52 bmbouter
## Publishers
119 51 bmbouter
120
note: Publisher attributes will commonly be available on publishers, but aren't guaranteed to be used by all publishers.
121 47 bmbouter
122 18 dkliban@redhat.com
As an authenticated user, I can CRUD a publisher
123
124
  - Create a publisher
125 1 bmbouter
  - Read a publisher
126
  - Update all mutable publisher fields
127 50 bmbouter
  - Delete a publisher (asynchronous)
128 1 bmbouter
129 113 bmbouter
As an authenticated user, I have filters on the Publisher list: \[[3081](https://pulp.plan.io/issues/3081)\]
130 109 amacdona@redhat.com
131
  - id: (id_in_list) \# id equality is not necessary, objects are referenced by id
132
  - name: (equality, name_in_list)
133
134 50 bmbouter
As an authenticated user I can configure the following attributes on a Publisher:
135
136 1 bmbouter
  - relative_path (str) \[optional\] The (relative) path component of the published url.
137 50 bmbouter
  - name - (str) \[required\] contains the name.
138 109 amacdona@redhat.com
  - last_published (datetime) \[read-only\] When the last successful publis%{color:red}h occurred.
139 50 bmbouter
  - last_updated (datetime) \[read-only\] The datetime of the last publisher update.
140 1 bmbouter
  - <span style="color:red;">auto_publish(bool) - ??? consider adding auto-publish feature to MVP</span>
141
142 123 bmbouter
## Distributions
143 1 bmbouter
144 123 bmbouter
As an authenticated user, I can CRUD Distributions:
145 1 bmbouter
146 123 bmbouter
  - Create a Distribution.
147
  - Read a Distribution
148
  - List Distributions
149
  - Update all mutable Distribution fields (synchronous)  
150
    \- base path  
151
    \- http  
152
    \- https
153
  - Delete an Distribution (synchronous)
154
155
As a user, my distribution base paths don't conflict and my create/update is rejected identifying the conflicting distributions \[[2987](https://pulp.plan.io/issues/2987)\]
156
157
As an authenticated user, I can create or update a distribution that is not associated with any publication (NULL)
158
159
As an authenticated user, I can create or update a distribution that is not associated with any publisher (NULL)
160
161
As a user, I can update a Distribution to distribute a specific Publication
162
163
As a user, I want a newly created publication to be automatically served by the content as defined by distributions.
164
165
As a user, I can see the full urls my base path is served at (one for http and one for https depending on what is on)
166
167 109 amacdona@redhat.com
As an authenticated user, I have filters on the Distribution list: \[[3082](https://pulp.plan.io/issues/3082)\]
168
169 1 bmbouter
  - name: (equality, name_in_list) 
170
  - base_path: (equality, substring, base_path_in_list)
171
172
## Publications
173
174 130 daviddavis
As an authenticated user, when creating a Publication, I can post a repo version href to be published.
175 1 bmbouter
176 130 daviddavis
As an authenticated user, I can publish a repository's latest version by posting a repository href to be published.
177
178
As an authenticated user, I can view which repository version was used to create a particular publication.
179
180
As an authenticated user, I can read Publication(s)
181
182
  - Read a Publication - id, created datetime, list of distribution hrefs, repo version
183 120 bmbouter
  - List all Publications - ordered by created datetime in descending order
184
185 130 daviddavis
As an authenticated user, I can delete publications.  
186
\- asynchronously with a lock on the repository version.  
187
\- prevented if associated with a distribution.  
188
\- single object only.
189
190 120 bmbouter
As an authenticated user, I can list publications and I have enough information to choose which ones to delete.
191
192
  - choose by created (older ones or perhaps latest)
193
  - choose not associated to a distribution.
194
  - does not imply filtering
195
196
As an authenticated user, I can list publications and i have enough information to select a publication to be associated with a distribution.
197
198
  - choose by created (latest or just by publish date)  
199
    \- manual promotion. "My rawhide publication has been tested and now I want to promote it to stable".  
200
    \- rollback to an earlier publication.
201
  - does not imply filtering
202 109 amacdona@redhat.com
203 72 mhrivnak
As an authenticated user, I can determine if and how a publication is distributed.
204 1 bmbouter
205 66 mhrivnak
## Sync and Publish
206 19 bmbouter
207
As an authenticated user, I can trigger an importer to sync. \[done\]
208
209
  - I can follow the progress of all syncs. (Syncs are asynchronous.)
210
  - I cannot pass "sync" options.
211 68 mhrivnak
  - Auto-publish is not included as an importer property.
212 71 mhrivnak
213 70 mhrivnak
As an authenticated user, I can trigger a publisher to publish. \[done\]
214 1 bmbouter
215 102 bmbouter
  - I can follow the progress of all publishes. (Publishes are asynchronous.)
216 29 bmbouter
  - I cannot pass "publish" options.
217 99 bmbouter
218 113 bmbouter
## Content Manipulation
219 99 bmbouter
220
#### Uploading Artifacts
221
222
As an authenticated user, I can create an Artifact by uploading a file. \[done\]
223 113 bmbouter
224 99 bmbouter
As an authenticated user, I can specify a size and/or digest to validate the uploaded file. \[done\]
225
226
#### Creating Content Units
227 101 bmbouter
228 1 bmbouter
As an authenticated user, I can create a content unit by providing the content type (in the URL), references to Artifacts, and the metadata supplied in the POST body. \[done\]
229 101 bmbouter
230 126 amacdona@redhat.com
#### Simple Copy
231
232 101 bmbouter
As an authenticated user, I can search (synchronous call) a repository's content using filtering.  
233
<span style="color:red;">\* note: In a separate call (async), I can add this content to another repository. This is effectively a copy operation in two calls.</span>
234
235
As an authenticated user, I can import all content from one repository into another repository in a single async call. (Clone use case)
236
237
  - I can follow the progress. (adding are asynchronous).
238
239
#### Complex Copy
240
241
As a plugin writer I can provide a rich search features with abitrary viewsets. e.g. depsolving, verisoning, etc
242
243
Examples of specific plugin use cases motivating the above general viewset
244
245 1 bmbouter
  - As an authenticated user, I can add an Errata from one repository to another repository along with packages mentioned in the Errata and all their dependencies that are present in the source repository.
246 101 bmbouter
  - As an authenticated user, I can add bunch of dependencies and store n versions back for each RPM.
247 1 bmbouter
  - As an authenticated user, I can use depsolving and versioning copy features together
248 71 mhrivnak
  - As an authenticated user, I can copy a puppet module and all of it's dependencies from one repository to another. 
249 95 bmbouter
  - As an authenticated user, I can depsolve units to be added to a destination repo based on an errata
250 1 bmbouter
251 127 bmbouter
#### Delete
252 1 bmbouter
253 127 bmbouter
As an authenticated user, I can delete a specific content unit
254
255
  - If the content unit is still in at least one repository version the delete fails
256
  - Error message saying that the unit is in use by a repo version and a link to the filter to return all of the repo versions.
257
  - Content unit deletion needs to be race condition free. For example: cannot delete a content unit during (for example)  
258
    \- sync that may be assuming the content exits.  
259
    \- copy operation
260
261
<!-- end list -->
262 1 bmbouter
263 112 bmbouter
  - As a user, I know that files (Artifacts) associated with the Content unit are not removed by this call (docs)
264
265
#### Filtering
266 1 bmbouter
267 130 daviddavis
As an authenticated user, I can filter Content by repository version information when plugin writers have provided such a filter
268 112 bmbouter
269 130 daviddavis
As an authenticated user, I can filter content by repository version
270 112 bmbouter
271
As an authenticated user, I can filter content by type
272
273 129 daviddavis
As an authenticated user, I can filter content on plugin specific attributes when plugin writers have provided such a filter
274 1 bmbouter
275 129 daviddavis
## Versioned Repositories
276
277
#### CRD
278
279 1 bmbouter
As an authenticated user, I can create a new repository version. \[[3173](https://pulp.plan.io/issues/3173)\]
280
281
As an authenticated user, I can list versions for a particular repository.
282 129 daviddavis
283
As an authenticated user, I can filter repository versions by:
284
285
  - number (equality, lt/lte, gt/gte)
286
  - content id (equality, content_in_list)
287 133 amacdona@redhat.com
  - <span style="color:red;">created datetime (range)</span>
288 129 daviddavis
289
As an authenticated user, I can delete any repository version.
290
291 130 daviddavis
As an authenticated user, I can view attributes on a repository version including its base_version, importer, added/removed content ids.
292 129 daviddavis
293
#### Repository Version Content
294
295
As an authenticated user, I can retrieve read-only immutable content sets by href.
296
297
As an authenticated user, I can list the content in a particular repository version
298 1 bmbouter
299 40 bmbouter
  - All fields are included
300 1 bmbouter
  - Pagination is supported
301
  - <span style="color:red;">Filtering support</span>
302 43 bmbouter
303
As an autheticated user, I can create a new version by adding or removing content to a particular base version (default is latest).
304 129 daviddavis
305 130 daviddavis
  - I can follow the progress. (adding/removing are asynchronous).
306
  - can add and remove in a single call
307
308 95 bmbouter
As an authenticated user, I can specify the base_version of content to be the basis for the new repository version. This defaults to the latest repo version associated with the repository.
309 43 bmbouter
310 95 bmbouter
## Orphan Content Units and Artifacts
311 43 bmbouter
312 95 bmbouter
As an authenticated user, I can cause an action that cleans up **both** orphaned content units and orphaned artifacts.
313
314 1 bmbouter
  - I cannot specify the units specifically (all types).
315 22 bmbouter
  - I can follow the progress of all cleanups. (Cleanups are asynchronous.)
316
317 76 mhrivnak
## Task Management
318
319 22 bmbouter
As an authenticated user, I can list all tasks
320 76 mhrivnak
321 22 bmbouter
  - <span style="color:orange;">Filtering support on \['state', 'id', 'group'\]</span>
322
  - <span style="color:orange;">This does not include associated progress reports</span>
323
324
As an authenticated user, I can see a detail view for a specific task \[done\]
325 76 mhrivnak
326 1 bmbouter
  - all attributes of a task
327
  - all associated progress reports
328
329 77 mhrivnak
As an authenticated user, I can cancel a task \[done\]
330
331 1 bmbouter
  - don't dare to use the DELETE verb!
332
333 114 daviddavis
As an authenticated user, I can delete tasks.
334 110 daviddavis
335
As an authenticated user, I can filter tags by: \[[3144](https://pulp.plan.io/issues/3144)\]
336
337
  - state (equality, state_in_list)
338
  - started_at(started_in_range)
339
  - finished_at(finished_in_range)
340
  - worker (equality)
341 78 mhrivnak
  - parent (equality)
342 1 bmbouter
343
## Task Group
344
345 82 mhrivnak
<span style="color:red;">I can view a summary of the status of all tasks in a group</span>
346 1 bmbouter
347 121 bmbouter
## Status
348 42 dkliban@redhat.com
349 80 mhrivnak
As an unauthenticated user I can view the status of Pulp workers and resource managers. \[done\]
350 46 bmbouter
351 28 bmbouter
As an unauthenticated user I can view the status of the web server's connection to the database and message broker. \[done\]
352 110 daviddavis
353 115 daviddavis
As an unauthenticated user I can view the versions of core and each installed plugin.
354 110 daviddavis
355 115 daviddavis
## Workers
356 110 daviddavis
357
As an authenticated user, I can filter workers by: \[[3143](https://pulp.plan.io/issues/3143)\]
358
359 116 daviddavis
  - last_heartbeat (range)
360 1 bmbouter
  - name (substring)
361 83 mhrivnak
  - gracefully_stopped (equality)
362 1 bmbouter
363 83 mhrivnak
## Plugin API
364 28 bmbouter
365 83 mhrivnak
As a plugin writer, I have a plugin API that is semantically versioned at 0.x separate from the REST API \[done\]
366 28 bmbouter
367 83 mhrivnak
As a plugin writer, I can report progress with a message and state \[done\]
368 28 bmbouter
369 83 mhrivnak
As a plugin writer, I can report progress with an optional suffix \[done\]
370 28 bmbouter
371 83 mhrivnak
As a plugin writer, I can report progress with a total count of things to do an the current count of things done \[done\]
372 28 bmbouter
373 83 mhrivnak
As a plugin writer, non-fatal exceptions on the Task and are included in the Task detail. non_fatal exceptions do not cause the Task to be marked as failed, but may be interpreted by the user as not fully successful. \[done\]
374 28 bmbouter
375 84 bmbouter
As a plugin writer, the working directory is set before Task work is done and cleaned up afterwards. I should not need to interact with the file system outside of the working dir. \[done\]
376 28 bmbouter
377 83 mhrivnak
<span style="color:red;">As a plugin writer, I can provide a subclassed Importer. The importer's responsibility is to synchronize the content of a Pulp repository with the content of a remote repository. (a circular import problem needs to be discussed and may cause this to change) \[done\]</span>
378 28 bmbouter
379 83 mhrivnak
<span style="color:red;">As a plugin writer, I can provide a subclassed Publisher. The publisher's responsibility is to publish content. (a circular import problem needs to be discussed and may cause this to change) \[done\]</span>
380 28 bmbouter
381 83 mhrivnak
As a plugin writer, I can define unit types by subclassing Content models to provide concrete content unit types to be manged by the platform. \[done\]
382 28 bmbouter
383 83 mhrivnak
As a plugin writer, I can interact with and create Artifacts \[done\]
384 6 Ichimonji10
385 83 mhrivnak
As a plugin writer, my app will be discovered by Pulp's app via an entry point provided by the plugin writer \[done\]
386 1 bmbouter
387 8 Ichimonji10
As a plugin writer, I can use the plugin API to query content units/artifacts associated with a repository. \[done\]
388 1 bmbouter
389 112 bmbouter
As a plugin writer, I can add and remove content units to and from a repository. \[done\]
390
391
As a plugin writer, I have documentation that shows how I can add filters to filter content responsibly.
392
393
As a plugin writer, I have documentation on how to write a filter for my Content that can use the RepositoryContent through table.
394
395 103 bmbouter
  - note: This will allow users to filter content by repository information
396
397 106 bmbouter
## Plugin Writer "live APIs"
398
399
As a plugin writer, I can provide a Live API with arbitrary views and viewsets.  
400 108 bmbouter
As a plugin writer, I have documentation on what URLs I should -not use for my views and viewsets
401
402
Here are some concrete use cases driving the very Live API use cases above:
403
404 113 bmbouter
~~~
405
# Concrete user use cases:
406
    As an authenticated user, I can use the puppet client to fetch content from Pulp using the Forge API
407 108 bmbouter
    As an authenticated user I can use the docker client to fetch content from Pulp using the Docker v1 API
408
    As an authenticated user I can use the docker client to fetch content from Pulp using the Docker v2 API
409
410
# Concrete plugin writer use cases
411
    As a puppet plugin developer, I can provide a viewset which handles the server side of the puppet Forge v3 API
412
    As a docker plugin developer, I can provide a viewset which handles the server side of the docker v1 API
413
    As a docker plugin developer, I can provide a viewset which handles the server side of the docker v2 API
414 117 bmbouter
~~~
415 106 bmbouter
416 113 bmbouter
## Webserver Deployment
417 106 bmbouter
418 132 bmbouter
As a system administrator, I can deploy all Pulp web applications on one process  
419
As a system administrator, I can deploy the Pulp REST API exclusively in one process  
420
As a system administrator, I can deploy the Pulp content serving view exclusively in one process
421 113 bmbouter
422 132 bmbouter
As a system administrator, I can deploy all Pulp web applications inside a virtualenv.  
423
As a system administrator, I can deploy all Pulp web applications without root permissions.
424 93 bizhang
425 1 bmbouter
## CLI
426 26 bmbouter
427
We will use coreapi-cli to generate a one to one mapping of cli commands to rest api schema #3068  
428
<span style="color:orange;">We will have a wrapper for coreapi-cli. This wrapper will handle parallel progress reporting</span>
429
430
## Download API
431
432
As a plugin writer, I can download files via
433
434
  - http://
435 27 bmbouter
  - https://
436
  - file://
437 26 bmbouter
438
As a plugin writer, I can configure a downloader with:
439
440
  - Basic Auth
441
  - SSL Cert Client Auth
442
  - Custom CAs will be configured via a "trust store" either on the system or similar. Pulp will not do anything to read/load/manage CAs directly.
443
444
As a plugin writer, I can provide arbitrary behaviors for customized downloaders
445
446
  - For example token authentication in the docker plugin
447
448
As a plugin writer, I can have connection pooling/reuse
449
450
As a plugin writer, I have proxy settings
451
452
  - proxy url (containing basic auth info)
453
454 113 bmbouter
As a plugin writer, I can have great logs
455 26 bmbouter
456
As an authenticated user, I have documentation about how to use something for bandwidth limiting
457
458
As a plugin writer, I can configure the validation mechanisms used at download time
459
460 1 bmbouter
  - checksum validation - minimum (md5, sha1, sha256, sha512)
461
  - size validation
462
463 26 bmbouter
<span style="color:red;">As a plugin writer, I expect units that are missing from the remote repository to not be created in Pulp when using the immediate download policy.</span>
464
465 1 bmbouter
<span style="color:red;">As a plugin writer, I expect units that are missing from the remote repository to be created in Pulp when using background or on_demand download policies.</span>
466 26 bmbouter
467 27 bmbouter
As a plugin writer, the plugin API provides tooling whereby I can provide the content to be added and removed from the repository. This tooling supports both immediate and deferred downloading.
468 26 bmbouter
469
As a plugin writer I can manage the catalog by using ChangeSets
470 1 bmbouter
471
As a plugin writer, the plugin can participate in adding content for cases where the decision to add additional content is based content that has been downloaded.
472
473
As a plugin writer, I can fetch content myself (but I am not encouraged to do so) with code I write
474
475 56 ttereshc
As a plugin writer, I can CRUD content units
476 1 bmbouter
477
## <span style="color:red;">Consumer Profile Applicability</span>
478
479 118 bmbouter
<span style="color:red;">Using Consumer Profiles and repository bindings I can compute applicability with 2.y parity</span>
480
481 1 bmbouter
  - Performance needs to be awesome%
482
483 86 mhrivnak
## Migrations only involving Pulp 3
484 1 bmbouter
485 87 mhrivnak
Users can run "pulp-manager migrate" to migrate the database and adjust state in other locations (filesystem, message broker, ...). \[done\]
486 1 bmbouter
487
## Web Server Integration
488 122 jortel@redhat.com
489 1 bmbouter
As a user, I can have content efficiently served to me by Apache by Pulp using the X-SEND response headers. \[done\]  
490 122 jortel@redhat.com
As a user, I can have content efficiently served to me by Nginx by Pulp using the X-Accel-Redirect response headers. \[done\]
491 105 bmbouter
492 132 bmbouter
As a user, I can have an Ansible role to install Apache which enables Apache integration for Pulp and configures Apache to serve Pulp. \[[2921](https://pulp.plan.io/issues/2921)\]  
493
As a user, I can have an Ansible role to install Nginx which enables Nginx integration for Pulp and configures Nginx to serve Pulp. \[[2922](https://pulp.plan.io/issues/2922)\]
494 87 mhrivnak
495 89 mhrivnak
## Glossary
496 88 mhrivnak
497 131 bmbouter
Add (Content Unit): An operation causing a new repository version to contain a content unit(s)
498 1 bmbouter
499 131 bmbouter
Applicability - A plugin defined term meaning when a package update available in a repository is applicable to a given consumer as determined by the Consumer Profile.
500 130 daviddavis
501 119 bmbouter
Artifact - A file associated with one content (unit). Artifacts are not shared between content (units). Create a content unit using an uploaded file ID as the source for its metadata. Create Artifacts associated with the content unit using an uploaded file ID for each; commit as a single transaction.
502 1 bmbouter
503
Consumer Profile - A set of installed units on a specific machine. In Pulp3 this machine is not a "consumer" in the same sense as Pulp2. Pulp is not "managing" the machine anymore; Pulp3 only collects Profile information.
504
505 131 bmbouter
Content (unit) - A single piece of content manged by Pulp. Each file associated with a content (unit) is called an Artifact. Each content (unit) may have zero or many Artifacts.
506 1 bmbouter
507
Distribution: Where and how the content app serves a Publication. i.e. http vs https and base path component of the URL. A Distribution defines:
508
509
  - the base path of the repository publication (required)
510
  - serving via http (default=False)
511
  - serving via https (default=True)
512
  - relationship w/ a Publisher for auto-distribution (should be allowed to be NULL)
513 130 daviddavis
  - relationship with Publication (should be allowed to be NULL)
514 132 bmbouter
515
Live API: a viewset endpoint contributed by plugin. For examples see the [associated MVP section](https://pulp.plan.io/projects/pulp/wiki/Pulp_3\_Minimum_Viable_Product#Plugin-Writer-live-APIs)
516 131 bmbouter
517
Orphan Artifact: An Artifact that is associated with 0 Content Units and 0 Publications
518
519
Orphan Content (unit): A content unit that is a member of 0 repository versions
520
521
Remove (content unit): An operation causing a new repository version to not contain a content unit(s)
522
523
Repository - A named collection of repository versions.
524
525
Repository Version - An immutable set of content which is versioned by a sequential number.