Add the Implementation section

Change-Id: I331f0d4b59096073528860697a826846f0720263
This commit is contained in:
Dmitry Burmistrov 2015-08-03 17:30:37 +03:00 committed by Roman Vyalov
parent bbea8cdfa9
commit 24655a832b

View File

@ -24,11 +24,11 @@ URLs look like (as documented in separate_mos_from_linux_)
::
deb http://${mirror_host}/mos/ubuntu mos${mos_release} main restricted
deb http://${mirror_host}/mos/ubuntu mos${mos_release}-security main restricted
deb http://${mirror_host}/mos/ubuntu mos${mos_release}-updates main restricted
deb http://${mirror_host}/mos/ubuntu mos${mos_release}-proposed main restricted
deb http://${mirror_host}/mos/ubuntu mos${mos_release}-holdback main restricted
deb http://${host}/mos/ubuntu mos${version} main
deb http://${host}/mos/ubuntu mos${version}-security main
deb http://${host}/mos/ubuntu mos${version}-updates main
deb http://${host}/mos/ubuntu mos${version}-proposed main
deb http://${host}/mos/ubuntu mos${version}-holdback main
This stucture yields several issues:
- it's impossible to distinguish between repositories targeted for different
@ -42,76 +42,94 @@ This stucture yields several issues:
Proposed change
===============
Change the codename to mos${mos_release}-${distro_codename}, so the URLs are
Change the codename to mos${version}[-${distro_codename}], so the URLs are
::
deb http://${mirror_host}/mos-repos/${distro} mos${mos_release}-${distro_codename} main
deb http://${mirror_host}/mos-repos/${distro} mos${mos_release}-${distro_codename}-security main
deb http://${mirror_host}/mos-repos/${distro} mos${mos_release}-${distro_codename}-updates main
deb http://${mirror_host}/mos-repos/${distro} mos${mos_release}-${distro_codename}-proposed main
deb http://${mirror_host}/mos-repos/${distro} mos${mos_release}-${distro_codename}-holdback main
deb http://${host}/mos-repos/${distro}/{version} mos${version} main
deb http://${host}/mos-repos/${distro}/{version} mos${version}-security main
deb http://${host}/mos-repos/${distro}/{version} mos${version}-updates main
deb http://${host}/mos-repos/${distro}/{version} mos${version}-proposed main
deb http://${host}/mos-repos/${distro}/{version} mos${version}-holdback main
and the repository metadata is
Origin: Mirantis
Codename: mos${mos_release}-${distro_codename}
Label: mos${mos_release}-${distro_codename}
Suite: mos${mos_release}-${distro_codename}${component}
Codename: mos${version}
Label: mos${version}
Suite: mos${version}-${component}
Example: MOS 7.0/trusty
Example: MOS 7.0
-------------------------
::
deb http://${mirror_host}/mos-repos/ubuntu mos7.0-trusty main
deb http://${mirror_host}/mos-repos/ubuntu mos7.0-trusty-security main
deb http://${mirror_host}/mos-repos/ubuntu mos7.0-trusty-updates main
deb http://${mirror_host}/mos-repos/ubuntu mos7.0-trusty-proposed main
deb http://${mirror_host}/mos-repos/ubuntu mos7.0-trusty-holdback main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0 main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-security main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-updates main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-proposed main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-holdback main
The Release files are:
Origin: Mirantis
Codename: mos7.0-trusty
Label: mos7.0-trusty
Suite: mos7.0-trusty{,-security,-updates,-proposed,-holdback}
Codename: mos7.0
Label: mos7.0
Suite: mos7.0{,-security,-updates,-proposed,-holdback}
Example: MOS 7.0/trusty-fuel
----------------------------
Example: MOS 7.0/vivid
-------------------------
::
deb http://${mirror_host}/mos-repos/ubuntu mos7.0-trusty-fuel main
deb http://${mirror_host}/mos-repos/ubuntu mos7.0-trusty-fuel-security main
deb http://${mirror_host}/mos-repos/ubuntu mos7.0-trusty-fuel-updates main
deb http://${mirror_host}/mos-repos/ubuntu mos7.0-trusty-fuel-proposed main
deb http://${mirror_host}/mos-repos/ubuntu mos7.0-trusty-fuel-holdback main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-vivid main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-vivid-security main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-vivid-updates main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-vivid-proposed main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-vivid-holdback main
The Release files are:
Origin: Mirantis
Codename: mos7.0-trusty-fuel
Label: mos7.0-trusty-fuel
Suite: mos7.0-trusty-fuel{,-security,-updates,-proposed,-holdback}
Codename: mos7.0-vivid
Label: mos7.0-vivid
Suite: mos7.0-vivid{,-security,-updates,-proposed,-holdback}
Example: Customer 7.0/trusty
Example: MOS 7.0/vivid-fuel
----------------------------
::
deb http://${mirror_host}/customer/ubuntu customer7.0-trusty main
deb http://${mirror_host}/customer/ubuntu customer7.0-trusty-security main
deb http://${mirror_host}/customer/ubuntu customer7.0-trusty-updates main
deb http://${mirror_host}/customer/ubuntu customer7.0-trusty-proposed main
deb http://${mirror_host}/customer/ubuntu customer7.0-trusty-holdback main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-vivid-fuel main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-vivid-fuel-security main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-vivid-fuel-updates main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-vivid-fuel-proposed main
deb http://${host}/mos-repos/ubuntu/7.0 mos7.0-vivid-fuel-holdback main
The Release files are:
Origin: Mirantis
Codename: mos7.0-vivid-fuel
Label: mos7.0-vivid-fuel
Suite: mos7.0-vivid-fuel{,-security,-updates,-proposed,-holdback}
Example: Customer 7.0
----------------------------
::
deb http://${host}/customer/ubuntu/7.0 customer7.0 main
deb http://${host}/customer/ubuntu/7.0 customer7.0-security main
deb http://${host}/customer/ubuntu/7.0 customer7.0-updates main
deb http://${host}/customer/ubuntu/7.0 customer7.0-proposed main
deb http://${host}/customer/ubuntu/7.0 customer7.0-holdback main
The Release files are:
Origin: Customer
Codename: customer7.0-trusty
Label: customer7.0-trusty
Suite: customer7.0-trusty{,-security,-updates,-proposed,-holdback}
Codename: customer7.0
Label: customer7.0
Suite: customer7.0{,-security,-updates,-proposed,-holdback}
Advantages:
- MOS release can target arbitrary number of Ubuntu/Debian versions
@ -129,7 +147,7 @@ Alternatives
Decouple the codename from the MOS release number and use the OpenStack
release codename instead, i.e
deb http://${mirror_host}/mos-repos/ubuntu kilo-trusty main
deb http://${host}/mos-repos/ubuntu/7.0 kilo-trusty main
Data model impact
-----------------
@ -190,6 +208,64 @@ Infrastructure impact
Implementation
==============
We need to update every release in transaction way.
Each release should be a symlink to particular snapshot:
mos-repos/ubuntu/{version} -> snapshots/{version}-{datetime}
mos-repos/ubuntu/snapshots/{version}-{datetime}
Each snapshot should contain all the data related to corresponding relese
::
mos-repos/ubuntu/snapshots/{version}-{datetime}/
├─ dists
│ ├─ mos7.0
│ │ ├─ main
│ │ ├─ resticted
│ │ ├─ Release
│ │ └─ Release.gpg
│ └─ mos7.0-updates
│ ├─ main
│ ├─ resticted
│ ├─ Release
│ └─ Release.gpg
└─ pool
Updating steps:
- create new snapshot:
snapshots/{version}-{newdatetime}/{dists,pool} based on previous one
(in order to reduce uploading traffic, all unchanged files will be
linked from previous snapshot with ``rsync --link-dest`` option)
- update {version} symlink to new snapshot
{version} -> snapshots/{version}-{newdatetime}
As far as current development suite is updating very often (up to ten times
per minute), we need a way to freeze its state for all CI processes.
We could use snapshots as freezed suite state. Just dereference current
suite symlink to actual snapshot.
In order to get the actual target of symlink we need to have a kind of
dereference mechanism. It can be plain text file in the same directory:
- mos-repos/ubuntu/{version}.target.txt
which contains target of {version} symlink:
- ``snapshots/{version}-{timestamp}``
We could use this value instead of symlink:
- current repository string:
deb {host}/mos-repos/ubuntu/{version} {suite} main
- dereference suite symlink:
{version} -> snapshots/{version}-{datetime}
- new repository string:
deb {host}/mos-repos/ubuntu/snapshots/{version}-{datetime} {suite} main
Assignee(s)
-----------