mirror of https://github.com/apache/cloudstack.git
Compare commits
532 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
5893ba5a8c | |
|
|
e1521f139b | |
|
|
a4a52c9665 | |
|
|
4359198904 | |
|
|
ddcc0c889d | |
|
|
72b99a3f8c | |
|
|
4425ee4234 | |
|
|
f6efda50d2 | |
|
|
cbc1ae7388 | |
|
|
96ca1b2a7c | |
|
|
3e688b0197 | |
|
|
5b9a3d7d32 | |
|
|
519715e81a | |
|
|
1e512ab9c6 | |
|
|
a17bff9ba8 | |
|
|
8906aa1d46 | |
|
|
c07f1fd5d2 | |
|
|
1f5dba9bd2 | |
|
|
c45596cca3 | |
|
|
92d82989e3 | |
|
|
a73cc9a22c | |
|
|
089eb36e47 | |
|
|
e2c13da419 | |
|
|
6f4445c5c1 | |
|
|
ffebe8eaa6 | |
|
|
0b169920f3 | |
|
|
856d83a15e | |
|
|
64ac0822b4 | |
|
|
be89e6f7c3 | |
|
|
3166e64891 | |
|
|
f820d0125d | |
|
|
6c1437b7dd | |
|
|
4df32ae79f | |
|
|
2d6280b9da | |
|
|
13a2c7793c | |
|
|
83f705ddc5 | |
|
|
6e810989b6 | |
|
|
e0fe953791 | |
|
|
05c59630e0 | |
|
|
1fc4cb90bf | |
|
|
c6936889f5 | |
|
|
f5e75771bc | |
|
|
c298f8f360 | |
|
|
160876c6d7 | |
|
|
5013cf2af6 | |
|
|
0c86899cc1 | |
|
|
82bfa9fb3f | |
|
|
23f633ae83 | |
|
|
1085da4ef8 | |
|
|
d75acb6efc | |
|
|
38abe2df0b | |
|
|
feb6076930 | |
|
|
161b4177c2 | |
|
|
ed575cc0a1 | |
|
|
ae455ee193 | |
|
|
47c5bb8ee7 | |
|
|
5b696c0ec7 | |
|
|
8eb162cb99 | |
|
|
9f57a4dd19 | |
|
|
7c7b2ae75d | |
|
|
b196e97cc3 | |
|
|
df7ff97271 | |
|
|
273699cf56 | |
|
|
8f3c6fad7a | |
|
|
27e4d979f1 | |
|
|
80ee7f183f | |
|
|
e297644ce1 | |
|
|
11538df710 | |
|
|
2a60305792 | |
|
|
7b467496cb | |
|
|
68bd056306 | |
|
|
4ba4bd33c3 | |
|
|
416679fae1 | |
|
|
b1bc5380a2 | |
|
|
b0b3dc91f5 | |
|
|
b5858029bb | |
|
|
1ff9eec997 | |
|
|
7ba5240b31 | |
|
|
c3614098da | |
|
|
03de62bf38 | |
|
|
abdf926219 | |
|
|
30dd234b00 | |
|
|
c8599040b4 | |
|
|
6f1aa96b4c | |
|
|
e2d18c0748 | |
|
|
470812100e | |
|
|
e10c066cc1 | |
|
|
b805766f4b | |
|
|
e2497cfc4d | |
|
|
4f93ba888c | |
|
|
5d61ba3538 | |
|
|
5d95bdd0eb | |
|
|
7eea9ed448 | |
|
|
18075ae4a9 | |
|
|
cf9bda2050 | |
|
|
6bcbb008b4 | |
|
|
59b6c32b60 | |
|
|
4ebe3349b7 | |
|
|
71bd26ff7c | |
|
|
68030df10b | |
|
|
6ca6aa1c3f | |
|
|
131ea9f7ac | |
|
|
d38c1f8d12 | |
|
|
2416db2a44 | |
|
|
b22dbbe2d7 | |
|
|
1bff543e58 | |
|
|
c1af36f8fc | |
|
|
84676afd5c | |
|
|
4b7370a601 | |
|
|
d6c39772b2 | |
|
|
7c3637a2f5 | |
|
|
7107d28db8 | |
|
|
bce55945ec | |
|
|
c19630f0a4 | |
|
|
b497f58022 | |
|
|
7cdcf571fa | |
|
|
e93ae1a4f4 | |
|
|
b744824f65 | |
|
|
3bd5410f9a | |
|
|
61afb4cb78 | |
|
|
23b19a9776 | |
|
|
dc7068a135 | |
|
|
e8f8aca694 | |
|
|
497266270b | |
|
|
0a4b4c6af0 | |
|
|
360b64ce1e | |
|
|
81a8ac8e1f | |
|
|
d0f6730157 | |
|
|
03dfe4d1f3 | |
|
|
4bcd509193 | |
|
|
06ee2fea76 | |
|
|
e0ef3a6947 | |
|
|
3b987f21af | |
|
|
0edd577f4b | |
|
|
b025e85fc5 | |
|
|
7faa1b650b | |
|
|
1593944553 | |
|
|
4dd91feb27 | |
|
|
89df318164 | |
|
|
93239e09f1 | |
|
|
09ee0927e9 | |
|
|
7048944883 | |
|
|
8c579538f9 | |
|
|
3b42fbf3b2 | |
|
|
27bce46a8e | |
|
|
2359061f66 | |
|
|
7f7d0b02e1 | |
|
|
71daf84c9e | |
|
|
faaf7669c5 | |
|
|
d8f748ad0e | |
|
|
7aa0558c5b | |
|
|
db83622956 | |
|
|
74af9b9875 | |
|
|
9bbd32a8ef | |
|
|
c3d6a8cff7 | |
|
|
58916eb608 | |
|
|
120a43648b | |
|
|
7ad68aafa5 | |
|
|
75620309c2 | |
|
|
65e54091ff | |
|
|
9cc6c09b9e | |
|
|
608345d165 | |
|
|
6516f7f1aa | |
|
|
56dc11980f | |
|
|
9e386a3128 | |
|
|
6419e1c825 | |
|
|
da85858e93 | |
|
|
a8bd02f8ba | |
|
|
b74f21b967 | |
|
|
17ec4fc31c | |
|
|
744c8afcf1 | |
|
|
c748b69e70 | |
|
|
cf71938473 | |
|
|
d0543449a6 | |
|
|
da7ac80dc4 | |
|
|
87c8e74642 | |
|
|
30e6c224bd | |
|
|
5caf6cd043 | |
|
|
32c0cdbed9 | |
|
|
8b38cea33c | |
|
|
9dd93cef76 | |
|
|
8c12a13216 | |
|
|
c0db75b9fa | |
|
|
a1bcae9213 | |
|
|
62eb4b7828 | |
|
|
22cda0c77b | |
|
|
a7dc5efad5 | |
|
|
11df71e55c | |
|
|
c79b33c1fb | |
|
|
ae5308bdd2 | |
|
|
d8230c9598 | |
|
|
e22f842ed8 | |
|
|
18d66595b3 | |
|
|
b1edfb8d60 | |
|
|
34f6f413a1 | |
|
|
b7c970f45f | |
|
|
4de8c2b6f6 | |
|
|
b45726f7b1 | |
|
|
d3e1976912 | |
|
|
7324ef45d4 | |
|
|
a0f35a186d | |
|
|
408e8c079d | |
|
|
e929f2024a | |
|
|
53c98c33e6 | |
|
|
cd6a8f61ca | |
|
|
3d7d412d5b | |
|
|
e32d08e50e | |
|
|
349eea501a | |
|
|
9ae696d1c8 | |
|
|
ce42ce54c2 | |
|
|
b869913529 | |
|
|
a5b6bc3be6 | |
|
|
30d306622a | |
|
|
6bed3d4e64 | |
|
|
ef60aa5601 | |
|
|
7b94ccc443 | |
|
|
a38205ebf0 | |
|
|
e1d512e5fd | |
|
|
d98511dddd | |
|
|
d0e21a7dba | |
|
|
c1c1b0e765 | |
|
|
a7178ee687 | |
|
|
18972caf5f | |
|
|
25eacaa1ff | |
|
|
81f16b6261 | |
|
|
9d523cbbfe | |
|
|
45d623ec0d | |
|
|
bb391c3deb | |
|
|
bac3421da4 | |
|
|
bb8e7d39e6 | |
|
|
8bea89a80b | |
|
|
29ce03e946 | |
|
|
d7bdbcc4ed | |
|
|
a6ccde44c4 | |
|
|
0e94f7d771 | |
|
|
ffb8b91ff5 | |
|
|
f5778eaa32 | |
|
|
7d52cd0e43 | |
|
|
8c2a030816 | |
|
|
aef3df7577 | |
|
|
3626c515e8 | |
|
|
0b62fb5e20 | |
|
|
3ba5c2b610 | |
|
|
a55f85af50 | |
|
|
d700e2db64 | |
|
|
6ba5e08221 | |
|
|
c681d0d0a2 | |
|
|
26b57655ec | |
|
|
664f76c7e4 | |
|
|
9b4f16b73f | |
|
|
a8f1e4a5ba | |
|
|
bd459a4c4c | |
|
|
10e0d42f45 | |
|
|
286e406e38 | |
|
|
65e9bebc69 | |
|
|
b7fc7179fc | |
|
|
243872a771 | |
|
|
98debd235f | |
|
|
106f478e2c | |
|
|
1300fc5e91 | |
|
|
d83c2e4225 | |
|
|
7786cf93c2 | |
|
|
9956d32548 | |
|
|
059debf212 | |
|
|
95de88a8ff | |
|
|
9fc93af85f | |
|
|
ded975ceb8 | |
|
|
69c69dc537 | |
|
|
37507e8799 | |
|
|
6a04e14f87 | |
|
|
4d35d68e4e | |
|
|
35e6d7c5ba | |
|
|
8c2ba2b341 | |
|
|
38e30a116c | |
|
|
83ce0067b8 | |
|
|
ff7ec0cd22 | |
|
|
6932cacabc | |
|
|
0e7f74839a | |
|
|
434e472ef8 | |
|
|
7001d43dbf | |
|
|
1b2ae13df7 | |
|
|
0dcbe57a47 | |
|
|
25cb545325 | |
|
|
276eb8111d | |
|
|
4761935145 | |
|
|
70d4c9d1ba | |
|
|
2bfc9cb8eb | |
|
|
572aa19564 | |
|
|
21d5c10850 | |
|
|
062b98a51e | |
|
|
66665b883c | |
|
|
dd0b863e22 | |
|
|
5aced73250 | |
|
|
cb822feb72 | |
|
|
75db42bca6 | |
|
|
9dee137265 | |
|
|
d722c9551a | |
|
|
d6c192c0f0 | |
|
|
2056c582f1 | |
|
|
cd2d71104e | |
|
|
c0b5358d8e | |
|
|
af9d68630f | |
|
|
ca5232778d | |
|
|
416568a373 | |
|
|
b6134418ea | |
|
|
5fd5b62570 | |
|
|
ac2242ece2 | |
|
|
0458c5328b | |
|
|
fce69fbfe0 | |
|
|
cabd9a98e1 | |
|
|
ca07663718 | |
|
|
ff0cfc9148 | |
|
|
f73362ae48 | |
|
|
f292143af8 | |
|
|
128dbe2c0b | |
|
|
9b0c28c16d | |
|
|
5bb5af4c48 | |
|
|
fa3dee886e | |
|
|
63c8b5fc56 | |
|
|
88181ebe72 | |
|
|
7178bfe9eb | |
|
|
d50899427a | |
|
|
7536516e41 | |
|
|
e3999923a7 | |
|
|
edb62b490c | |
|
|
bbc23a7468 | |
|
|
44793da58f | |
|
|
36edd92e48 | |
|
|
097c3a018b | |
|
|
63bdc2b990 | |
|
|
315cd52fd1 | |
|
|
d010e9fcf2 | |
|
|
0958dfc138 | |
|
|
4adb719570 | |
|
|
c8cadcb56e | |
|
|
4bcf3ea57d | |
|
|
000919d6e5 | |
|
|
8db065a14e | |
|
|
bce3e54a7e | |
|
|
6a9835904c | |
|
|
6846619a6f | |
|
|
d1eb2822d9 | |
|
|
cd5bb09d0d | |
|
|
b5e9178078 | |
|
|
420bf6dff8 | |
|
|
b1f870ae83 | |
|
|
6e5d78a8a7 | |
|
|
036489b288 | |
|
|
1b0a036a5b | |
|
|
e2f4ed9dcf | |
|
|
8db7cab7ba | |
|
|
496bc0329c | |
|
|
cf36fb0000 | |
|
|
da518e9036 | |
|
|
03d24ff851 | |
|
|
2a6ce0c8a8 | |
|
|
04b58acdd6 | |
|
|
3828a3b744 | |
|
|
42f1e19362 | |
|
|
8b2f1f19c2 | |
|
|
a4b1a27c7d | |
|
|
002d9768b2 | |
|
|
76e6de7f90 | |
|
|
b31c2f4cae | |
|
|
a566af35f5 | |
|
|
f1f779a08d | |
|
|
aba3285c3c | |
|
|
507c4cd128 | |
|
|
b5fd39fca0 | |
|
|
5c1f9315ce | |
|
|
6a324da27a | |
|
|
b8ed34e2a8 | |
|
|
9e86fdf1b6 | |
|
|
538578366a | |
|
|
031fbf43d4 | |
|
|
8627c60b95 | |
|
|
b8813c7b24 | |
|
|
8dcfc7c767 | |
|
|
2b373a4659 | |
|
|
c7cfeb5caa | |
|
|
0e6d2d986b | |
|
|
db1c7d678c | |
|
|
2358632253 | |
|
|
2399edd380 | |
|
|
04875f1517 | |
|
|
2811217578 | |
|
|
e25cf437c0 | |
|
|
ef1aaa0551 | |
|
|
c91e84c6d8 | |
|
|
9a38e75abd | |
|
|
1b861dad48 | |
|
|
1ef6365771 | |
|
|
bc3d7c314b | |
|
|
bc76f2042d | |
|
|
fd1c67f473 | |
|
|
e47d7bc6ff | |
|
|
eedd32971f | |
|
|
425c4e3312 | |
|
|
750290b8ae | |
|
|
57331aca2f | |
|
|
c465caf81e | |
|
|
2d4b7ba357 | |
|
|
a29de0ed06 | |
|
|
fca928d609 | |
|
|
4628385051 | |
|
|
959c5fff68 | |
|
|
cd55796972 | |
|
|
81b991ae9c | |
|
|
ca64406a88 | |
|
|
77cb0827d3 | |
|
|
4f74937855 | |
|
|
10dcbd76f0 | |
|
|
7ff76cb2d7 | |
|
|
7a11bd2f98 | |
|
|
5cb279b6f1 | |
|
|
46cb805c90 | |
|
|
40d21f093f | |
|
|
6a2d91ed8a | |
|
|
56a39e6be7 | |
|
|
34b8870f59 | |
|
|
432a3065bc | |
|
|
5bf869c803 | |
|
|
e0c13cc3ec | |
|
|
22da57f922 | |
|
|
55ab7c5589 | |
|
|
b394b5ba74 | |
|
|
e2d3773362 | |
|
|
cee330e7c8 | |
|
|
47a6ac89ba | |
|
|
061ce9b39b | |
|
|
79ab1566b1 | |
|
|
eb93f0105e | |
|
|
558232e8e6 | |
|
|
13f805fbf3 | |
|
|
8936e4c535 | |
|
|
bb5da0e49c | |
|
|
28820f6e25 | |
|
|
91376c7994 | |
|
|
e21aacf5be | |
|
|
e8200a0b74 | |
|
|
e9900aba23 | |
|
|
10d76d3384 | |
|
|
2ac2e5ba33 | |
|
|
124fcde59c | |
|
|
e08e66d66d | |
|
|
de1b1d24c2 | |
|
|
d5165183ea | |
|
|
ba26d95ad7 | |
|
|
53a39d3ff7 | |
|
|
f06ac512fa | |
|
|
7aba434dc4 | |
|
|
da1c7cebf9 | |
|
|
39d0d62fdd | |
|
|
f570e16836 | |
|
|
1919dcfb7c | |
|
|
67217d4d2e | |
|
|
494c56a499 | |
|
|
0a13fb27f5 | |
|
|
e1c48c3adc | |
|
|
f417c6b0a1 | |
|
|
78f9e6584b | |
|
|
79ebf6959e | |
|
|
cfe96026dc | |
|
|
4348386970 | |
|
|
ba52db9b3e | |
|
|
951649c420 | |
|
|
3c6484792d | |
|
|
223fc2512c | |
|
|
51910cd260 | |
|
|
5151f8dc6a | |
|
|
c81295439f | |
|
|
12f4321952 | |
|
|
b0d74fe00c | |
|
|
a0ba2aaf3f | |
|
|
4379666fb6 | |
|
|
e4414d1c44 | |
|
|
26009659f9 | |
|
|
2941b518ba | |
|
|
f3a112fd9e | |
|
|
243f566a60 | |
|
|
516012a0b4 | |
|
|
44119cf34f | |
|
|
db6147060b | |
|
|
f379d78963 | |
|
|
5798fb43a3 | |
|
|
4e61ddd1bc | |
|
|
9032fe3fb5 | |
|
|
e23c7ef701 | |
|
|
e33f4754f5 | |
|
|
9ec8cc4186 | |
|
|
8171d9568c | |
|
|
dba889ea3e | |
|
|
6dc259c7da | |
|
|
39126a4339 | |
|
|
aa18188d30 | |
|
|
4ed86a2627 | |
|
|
86ae1fee7f | |
|
|
21d844ba1c | |
|
|
ac3b18095a | |
|
|
fff4cafdca | |
|
|
a5b455ff3a | |
|
|
8b034dc439 | |
|
|
028dd86945 | |
|
|
dc8f465527 | |
|
|
e90e31d386 | |
|
|
f985a67f4d | |
|
|
5f9e131198 | |
|
|
f0a0936675 | |
|
|
671d8ad704 | |
|
|
81787b310e | |
|
|
23fb0e2ccb | |
|
|
40c8bc528d | |
|
|
15439ede7d | |
|
|
50fe265017 | |
|
|
d26122bf22 | |
|
|
2dd1e6d786 | |
|
|
8c86f24261 | |
|
|
2954e96947 | |
|
|
c5c3cc40c1 | |
|
|
9c0efb7072 | |
|
|
b8ec941ec1 | |
|
|
8230f04a79 | |
|
|
a50de029bf | |
|
|
81b2c38be9 | |
|
|
ac8c200790 | |
|
|
5504b053e4 | |
|
|
dbda673e1f | |
|
|
e66926e6a4 | |
|
|
d160731b9f | |
|
|
15c2e50338 | |
|
|
d53b6dbda4 | |
|
|
e90e436ef8 |
11
.asf.yaml
11
.asf.yaml
|
|
@ -50,16 +50,11 @@ github:
|
||||||
rebase: false
|
rebase: false
|
||||||
|
|
||||||
collaborators:
|
collaborators:
|
||||||
- acs-robot
|
- ingox
|
||||||
- gpordeus
|
- gpordeus
|
||||||
- hsato03
|
|
||||||
- FelipeM525
|
|
||||||
- lucas-a-martins
|
|
||||||
- nicoschmdt
|
|
||||||
- abh1sar
|
|
||||||
- rosi-shapeblue
|
|
||||||
- sudo87
|
|
||||||
- erikbocks
|
- erikbocks
|
||||||
|
- Imvedansh
|
||||||
|
- Damans227
|
||||||
|
|
||||||
protected_branches: ~
|
protected_branches: ~
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
# or more contributor license agreements. See the NOTICE file
|
||||||
|
# distributed with this work for additional information
|
||||||
|
# regarding copyright ownership. The ASF licenses this file
|
||||||
|
# to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance
|
||||||
|
# with the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing,
|
||||||
|
# software distributed under the License is distributed on an
|
||||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
# KIND, either express or implied. See the License for the
|
||||||
|
# specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
[codespell]
|
||||||
|
ignore-words = .github/linters/codespell.txt
|
||||||
|
skip = systemvm/agent/noVNC/*,ui/package.json,ui/package-lock.json,ui/public/js/less.min.js,ui/public/locales/*.json,server/src/test/java/org/apache/cloudstack/network/ssl/CertServiceTest.java,test/integration/smoke/test_ssl_offloading.py
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
.github/workflows/*.lock.yml linguist-generated=true merge=ours
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
# or more contributor license agreements. See the NOTICE file
|
||||||
|
# distributed with this work for additional information
|
||||||
|
# regarding copyright ownership. The ASF licenses this file
|
||||||
|
# to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance
|
||||||
|
# with the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing,
|
||||||
|
# software distributed under the License is distributed on an
|
||||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
# KIND, either express or implied. See the License for the
|
||||||
|
# specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
/plugins/storage/volume/linstor @rp-
|
||||||
|
/plugins/storage/volume/storpool @slavkap
|
||||||
|
/plugins/storage/volume/ontap @rajiv1 @sandeeplocharla @piyush5 @suryag
|
||||||
|
|
||||||
|
.pre-commit-config.yaml @jbampton
|
||||||
|
/.github/linters/ @jbampton
|
||||||
|
|
||||||
|
/plugins/network-elements/nsx/ @Pearl1594 @nvazquez
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Mark all cached import files as generated
|
||||||
|
* linguist-generated=true
|
||||||
|
|
||||||
|
# Use 'ours' merge strategy to keep local cached versions
|
||||||
|
* merge=ours
|
||||||
73
.github/aw/imports/github/gh-aw/94662b1dee8ce96c876ba9f33b3ab8be32de82a4/.github_workflows_shared_reporting.md
generated
vendored
Normal file
73
.github/aw/imports/github/gh-aw/94662b1dee8ce96c876ba9f33b3ab8be32de82a4/.github_workflows_shared_reporting.md
generated
vendored
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
---
|
||||||
|
# Report formatting guidelines
|
||||||
|
---
|
||||||
|
|
||||||
|
## Report Structure Guidelines
|
||||||
|
|
||||||
|
### 1. Header Levels
|
||||||
|
**Use h3 (###) or lower for all headers in your issue report to maintain proper document hierarchy.**
|
||||||
|
|
||||||
|
When creating GitHub issues or discussions:
|
||||||
|
- Use `###` (h3) for main sections (e.g., "### Test Summary")
|
||||||
|
- Use `####` (h4) for subsections (e.g., "#### Device-Specific Results")
|
||||||
|
- Never use `##` (h2) or `#` (h1) in reports - these are reserved for titles
|
||||||
|
|
||||||
|
### 2. Progressive Disclosure
|
||||||
|
**Wrap detailed test results in `<details><summary><b>Section Name</b></summary>` tags to improve readability and reduce scrolling.**
|
||||||
|
|
||||||
|
Use collapsible sections for:
|
||||||
|
- Verbose details (full test logs, raw data)
|
||||||
|
- Secondary information (minor warnings, extra context)
|
||||||
|
- Per-item breakdowns when there are many items
|
||||||
|
|
||||||
|
Always keep critical information visible (summary, critical issues, key metrics).
|
||||||
|
|
||||||
|
### 3. Report Structure Pattern
|
||||||
|
|
||||||
|
1. **Overview**: 1-2 paragraphs summarizing key findings
|
||||||
|
2. **Critical Information**: Show immediately (summary stats, critical issues)
|
||||||
|
3. **Details**: Use `<details><summary><b>Section Name</b></summary>` for expanded content
|
||||||
|
4. **Context**: Add helpful metadata (workflow run, date, trigger)
|
||||||
|
|
||||||
|
### Design Principles (Airbnb-Inspired)
|
||||||
|
|
||||||
|
Reports should:
|
||||||
|
- **Build trust through clarity**: Most important info immediately visible
|
||||||
|
- **Exceed expectations**: Add helpful context like trends, comparisons
|
||||||
|
- **Create delight**: Use progressive disclosure to reduce overwhelm
|
||||||
|
- **Maintain consistency**: Follow patterns across all reports
|
||||||
|
|
||||||
|
### Example Report Structure
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
### Summary
|
||||||
|
- Key metric 1: value
|
||||||
|
- Key metric 2: value
|
||||||
|
- Status: ✅/⚠️/❌
|
||||||
|
|
||||||
|
### Critical Issues
|
||||||
|
[Always visible - these are important]
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>View Detailed Results</b></summary>
|
||||||
|
|
||||||
|
[Comprehensive details, logs, traces]
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>View All Warnings</b></summary>
|
||||||
|
|
||||||
|
[Minor issues and potential problems]
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### Recommendations
|
||||||
|
[Actionable next steps - keep visible]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Workflow Run References
|
||||||
|
|
||||||
|
- Format run IDs as links: `[§12345](https://github.com/owner/repo/actions/runs/12345)`
|
||||||
|
- Include up to 3 most relevant run URLs at end under `**References:**`
|
||||||
|
- Do NOT add footer attribution (system adds automatically)
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
# or more contributor license agreements. See the NOTICE file
|
||||||
|
# distributed with this work for additional information
|
||||||
|
# regarding copyright ownership. The ASF licenses this file
|
||||||
|
# to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance
|
||||||
|
# with the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing,
|
||||||
|
# software distributed under the License is distributed on an
|
||||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
# KIND, either express or implied. See the License for the
|
||||||
|
# specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
# To get started with Dependabot version updates, you'll need to specify which
|
||||||
|
# package ecosystems to update and where the package manifests are located.
|
||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
open-pull-requests-limit: 2
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
|
groups:
|
||||||
|
github-actions-dependencies:
|
||||||
|
patterns:
|
||||||
|
- "*"
|
||||||
|
cooldown:
|
||||||
|
default-days: 7
|
||||||
|
- package-ecosystem: "maven"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "daily"
|
||||||
|
cooldown:
|
||||||
|
default-days: 7
|
||||||
|
|
@ -15,13 +15,14 @@
|
||||||
# specific language governing permissions and limitations
|
# specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
---
|
---
|
||||||
extends: relaxed
|
extends: default
|
||||||
|
|
||||||
rules:
|
rules:
|
||||||
line-length:
|
line-length:
|
||||||
max: 400 # Very forgiving for GitHub Actions and infrastructure files
|
max: 400 # Very forgiving for GitHub Actions and infrastructure files
|
||||||
indentation: disable # Disable indentation checking for existing files
|
indentation: disable # Disable indentation checking for existing files
|
||||||
comments: disable # Disable comment formatting checks
|
comments: disable # Disable comment formatting checks
|
||||||
|
braces: disable
|
||||||
brackets: disable # Disable bracket spacing checks
|
brackets: disable # Disable bracket spacing checks
|
||||||
colons:
|
colons:
|
||||||
max-spaces-after: -1 # Allow any number of spaces after colon
|
max-spaces-after: -1 # Allow any number of spaces after colon
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ acount
|
||||||
actuall
|
actuall
|
||||||
acuiring
|
acuiring
|
||||||
acumulate
|
acumulate
|
||||||
|
addin
|
||||||
addreess
|
addreess
|
||||||
addtion
|
addtion
|
||||||
adminstrator
|
adminstrator
|
||||||
|
|
@ -12,10 +13,8 @@ afrer
|
||||||
afterall
|
afterall
|
||||||
againt
|
againt
|
||||||
ags
|
ags
|
||||||
aktive
|
|
||||||
algoritm
|
algoritm
|
||||||
allo
|
allo
|
||||||
alloacate
|
|
||||||
allocted
|
allocted
|
||||||
alocation
|
alocation
|
||||||
alogrithm
|
alogrithm
|
||||||
|
|
@ -65,6 +64,7 @@ bject
|
||||||
boardcast
|
boardcast
|
||||||
bootstraper
|
bootstraper
|
||||||
bu
|
bu
|
||||||
|
callin
|
||||||
cant
|
cant
|
||||||
capabilites
|
capabilites
|
||||||
capablity
|
capablity
|
||||||
|
|
@ -73,6 +73,7 @@ carrefully
|
||||||
cavaet
|
cavaet
|
||||||
chaing
|
chaing
|
||||||
checkd
|
checkd
|
||||||
|
checkin
|
||||||
childs
|
childs
|
||||||
choosen
|
choosen
|
||||||
chould
|
chould
|
||||||
|
|
@ -93,7 +94,6 @@ confg
|
||||||
configruation
|
configruation
|
||||||
configuable
|
configuable
|
||||||
conneciton
|
conneciton
|
||||||
connexion
|
|
||||||
constrait
|
constrait
|
||||||
constraits
|
constraits
|
||||||
containg
|
containg
|
||||||
|
|
@ -101,9 +101,7 @@ contex
|
||||||
continuesly
|
continuesly
|
||||||
contro
|
contro
|
||||||
controler
|
controler
|
||||||
controles
|
|
||||||
controll
|
controll
|
||||||
convienient
|
|
||||||
convinience
|
convinience
|
||||||
coputer
|
coputer
|
||||||
correcponding
|
correcponding
|
||||||
|
|
@ -158,13 +156,13 @@ differnet
|
||||||
differnt
|
differnt
|
||||||
direcotry
|
direcotry
|
||||||
directroy
|
directroy
|
||||||
disale
|
|
||||||
disbale
|
disbale
|
||||||
discrepency
|
discrepency
|
||||||
disover
|
disover
|
||||||
dissapper
|
dissapper
|
||||||
dissassociated
|
dissassociated
|
||||||
divice
|
divice
|
||||||
|
dockin
|
||||||
doesn'
|
doesn'
|
||||||
doesnot
|
doesnot
|
||||||
doesnt
|
doesnt
|
||||||
|
|
@ -175,7 +173,6 @@ eanbled
|
||||||
earch
|
earch
|
||||||
ect
|
ect
|
||||||
elemnt
|
elemnt
|
||||||
eles
|
|
||||||
elments
|
elments
|
||||||
emmited
|
emmited
|
||||||
enble
|
enble
|
||||||
|
|
@ -187,22 +184,19 @@ environmnet
|
||||||
equivalant
|
equivalant
|
||||||
erro
|
erro
|
||||||
erronous
|
erronous
|
||||||
everthing
|
|
||||||
everytime
|
everytime
|
||||||
excute
|
excute
|
||||||
execept
|
execept
|
||||||
execption
|
execption
|
||||||
|
exects
|
||||||
execut
|
execut
|
||||||
executeable
|
executeable
|
||||||
exeeded
|
exeeded
|
||||||
exisitng
|
exisitng
|
||||||
exisits
|
exisits
|
||||||
existin
|
|
||||||
existsing
|
existsing
|
||||||
exitting
|
|
||||||
expcted
|
expcted
|
||||||
expection
|
expection
|
||||||
explaination
|
|
||||||
explicitely
|
explicitely
|
||||||
faield
|
faield
|
||||||
faild
|
faild
|
||||||
|
|
@ -215,7 +209,6 @@ fillled
|
||||||
findout
|
findout
|
||||||
fisrt
|
fisrt
|
||||||
fo
|
fo
|
||||||
folowing
|
|
||||||
fowarding
|
fowarding
|
||||||
frist
|
frist
|
||||||
fro
|
fro
|
||||||
|
|
@ -234,6 +227,7 @@ hanling
|
||||||
happend
|
happend
|
||||||
hasing
|
hasing
|
||||||
hasnt
|
hasnt
|
||||||
|
havin
|
||||||
hda
|
hda
|
||||||
hostanme
|
hostanme
|
||||||
hould
|
hould
|
||||||
|
|
@ -253,20 +247,14 @@ implmeneted
|
||||||
implmentation
|
implmentation
|
||||||
incase
|
incase
|
||||||
includeing
|
includeing
|
||||||
incosistency
|
|
||||||
indecates
|
indecates
|
||||||
indien
|
|
||||||
infor
|
infor
|
||||||
informations
|
informations
|
||||||
informaton
|
informaton
|
||||||
infrastrcuture
|
|
||||||
ingore
|
ingore
|
||||||
inital
|
|
||||||
initalize
|
initalize
|
||||||
initator
|
initator
|
||||||
initilization
|
|
||||||
inspite
|
inspite
|
||||||
instace
|
|
||||||
instal
|
instal
|
||||||
instnace
|
instnace
|
||||||
intefaces
|
intefaces
|
||||||
|
|
@ -284,12 +272,8 @@ ist
|
||||||
klunky
|
klunky
|
||||||
lable
|
lable
|
||||||
leve
|
leve
|
||||||
lief
|
|
||||||
limite
|
limite
|
||||||
linke
|
|
||||||
listner
|
listner
|
||||||
lokal
|
|
||||||
lokales
|
|
||||||
maintainence
|
maintainence
|
||||||
maintenace
|
maintenace
|
||||||
maintenence
|
maintenence
|
||||||
|
|
@ -298,7 +282,6 @@ mambers
|
||||||
manaully
|
manaully
|
||||||
manuel
|
manuel
|
||||||
maxium
|
maxium
|
||||||
mehtod
|
|
||||||
mergable
|
mergable
|
||||||
mesage
|
mesage
|
||||||
messge
|
messge
|
||||||
|
|
@ -308,7 +291,6 @@ minumum
|
||||||
mis
|
mis
|
||||||
modifers
|
modifers
|
||||||
mor
|
mor
|
||||||
mot
|
|
||||||
mulitply
|
mulitply
|
||||||
multipl
|
multipl
|
||||||
multple
|
multple
|
||||||
|
|
@ -322,7 +304,7 @@ nin
|
||||||
nodel
|
nodel
|
||||||
nome
|
nome
|
||||||
noone
|
noone
|
||||||
nowe
|
notin
|
||||||
numbe
|
numbe
|
||||||
numer
|
numer
|
||||||
occured
|
occured
|
||||||
|
|
@ -390,12 +372,9 @@ remaning
|
||||||
remore
|
remore
|
||||||
remvoing
|
remvoing
|
||||||
renabling
|
renabling
|
||||||
repeatly
|
|
||||||
reponse
|
reponse
|
||||||
reqest
|
reqest
|
||||||
reqiured
|
reqiured
|
||||||
requieres
|
|
||||||
requried
|
|
||||||
reserv
|
reserv
|
||||||
reserverd
|
reserverd
|
||||||
reseted
|
reseted
|
||||||
|
|
@ -414,14 +393,13 @@ retuned
|
||||||
returing
|
returing
|
||||||
rever
|
rever
|
||||||
rocessor
|
rocessor
|
||||||
|
roperty
|
||||||
runing
|
runing
|
||||||
runnign
|
runnign
|
||||||
sate
|
sate
|
||||||
scalled
|
scalled
|
||||||
scipt
|
|
||||||
scirpt
|
scirpt
|
||||||
scrip
|
scrip
|
||||||
seconadry
|
|
||||||
seconday
|
seconday
|
||||||
seesion
|
seesion
|
||||||
sepcified
|
sepcified
|
||||||
|
|
@ -434,12 +412,10 @@ settig
|
||||||
sevices
|
sevices
|
||||||
shoul
|
shoul
|
||||||
shoule
|
shoule
|
||||||
sie
|
|
||||||
signle
|
signle
|
||||||
simplier
|
simplier
|
||||||
singature
|
singature
|
||||||
skiping
|
skiping
|
||||||
snaphsot
|
|
||||||
snpashot
|
snpashot
|
||||||
specied
|
specied
|
||||||
specifed
|
specifed
|
||||||
|
|
@ -450,7 +426,6 @@ standy
|
||||||
statics
|
statics
|
||||||
stickyness
|
stickyness
|
||||||
stil
|
stil
|
||||||
stip
|
|
||||||
storeage
|
storeage
|
||||||
strat
|
strat
|
||||||
streched
|
streched
|
||||||
|
|
@ -459,7 +434,6 @@ succesfull
|
||||||
successfull
|
successfull
|
||||||
suceessful
|
suceessful
|
||||||
suces
|
suces
|
||||||
sucessfully
|
|
||||||
suiteable
|
suiteable
|
||||||
suppots
|
suppots
|
||||||
suppport
|
suppport
|
||||||
|
|
@ -492,7 +466,6 @@ uncompressible
|
||||||
uneccessarily
|
uneccessarily
|
||||||
unexepected
|
unexepected
|
||||||
unexpect
|
unexpect
|
||||||
unknow
|
|
||||||
unkonw
|
unkonw
|
||||||
unkown
|
unkown
|
||||||
unneccessary
|
unneccessary
|
||||||
|
|
@ -500,14 +473,12 @@ unparseable
|
||||||
unrecoginized
|
unrecoginized
|
||||||
unsupport
|
unsupport
|
||||||
unxpected
|
unxpected
|
||||||
updat
|
|
||||||
uptodate
|
uptodate
|
||||||
usera
|
usera
|
||||||
usign
|
usign
|
||||||
usin
|
usin
|
||||||
utlization
|
utlization
|
||||||
vaidate
|
vaidate
|
||||||
valiate
|
|
||||||
valule
|
valule
|
||||||
valus
|
valus
|
||||||
varibles
|
varibles
|
||||||
|
|
@ -516,8 +487,6 @@ verfying
|
||||||
verifing
|
verifing
|
||||||
virutal
|
virutal
|
||||||
visable
|
visable
|
||||||
wakup
|
|
||||||
wil
|
wil
|
||||||
wit
|
wit
|
||||||
wll
|
|
||||||
wth
|
wth
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Set up JDK 17
|
- name: Set up JDK 17
|
||||||
uses: actions/setup-java@v5
|
uses: actions/setup-java@v5
|
||||||
|
|
|
||||||
|
|
@ -146,6 +146,7 @@ jobs:
|
||||||
smoke/test_vm_snapshot_kvm
|
smoke/test_vm_snapshot_kvm
|
||||||
smoke/test_vm_snapshots
|
smoke/test_vm_snapshots
|
||||||
smoke/test_volumes
|
smoke/test_volumes
|
||||||
|
smoke/test_vpc_conserve_mode
|
||||||
smoke/test_vpc_ipv6
|
smoke/test_vpc_ipv6
|
||||||
smoke/test_vpc_redundant
|
smoke/test_vpc_redundant
|
||||||
smoke/test_vpc_router_nics
|
smoke/test_vpc_router_nics
|
||||||
|
|
@ -216,7 +217,7 @@ jobs:
|
||||||
smoke/test_list_volumes"]
|
smoke/test_list_volumes"]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|
@ -340,7 +341,7 @@ jobs:
|
||||||
echo -e "Simulator CI Test Results: (only failures listed)\n"
|
echo -e "Simulator CI Test Results: (only failures listed)\n"
|
||||||
python3 ./tools/marvin/xunit-reader.py integration-test-results/
|
python3 ./tools/marvin/xunit-reader.py integration-test-results/
|
||||||
|
|
||||||
- uses: codecov/codecov-action@v4
|
- uses: codecov/codecov-action@v6
|
||||||
with:
|
with:
|
||||||
files: jacoco-coverage.xml
|
files: jacoco-coverage.xml
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: true
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ jobs:
|
||||||
name: codecov
|
name: codecov
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|
@ -49,7 +49,7 @@ jobs:
|
||||||
cd nonoss && bash -x install-non-oss.sh && cd ..
|
cd nonoss && bash -x install-non-oss.sh && cd ..
|
||||||
mvn -P quality -Dsimulator -Dnoredist clean install -T$(nproc)
|
mvn -P quality -Dsimulator -Dnoredist clean install -T$(nproc)
|
||||||
|
|
||||||
- uses: codecov/codecov-action@v4
|
- uses: codecov/codecov-action@v6
|
||||||
with:
|
with:
|
||||||
files: ./client/target/site/jacoco-aggregate/jacoco.xml
|
files: ./client/target/site/jacoco-aggregate/jacoco.xml
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: true
|
||||||
|
|
|
||||||
|
|
@ -35,14 +35,14 @@ jobs:
|
||||||
language: ["actions"]
|
language: ["actions"]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v3
|
uses: github/codeql-action/init@v4
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v3
|
uses: github/codeql-action/autobuild@v4
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v3
|
uses: github/codeql-action/analyze@v4
|
||||||
with:
|
with:
|
||||||
category: "Security"
|
category: "Security"
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,54 @@
|
||||||
|
---
|
||||||
|
description: |
|
||||||
|
This workflow creates daily repo status reports. It gathers recent repository
|
||||||
|
activity (issues, PRs, discussions, releases, code changes) and generates
|
||||||
|
engaging GitHub issues with productivity insights, community highlights,
|
||||||
|
and project recommendations.
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule: daily
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
issues: read
|
||||||
|
pull-requests: read
|
||||||
|
|
||||||
|
network: defaults
|
||||||
|
|
||||||
|
tools:
|
||||||
|
github:
|
||||||
|
# If in a public repo, setting `lockdown: false` allows
|
||||||
|
# reading issues, pull requests and comments from 3rd-parties
|
||||||
|
# If in a private repo this has no particular effect.
|
||||||
|
lockdown: false
|
||||||
|
|
||||||
|
safe-outputs:
|
||||||
|
create-issue:
|
||||||
|
title-prefix: "[repo-status] "
|
||||||
|
labels: [report, daily-status]
|
||||||
|
source: githubnext/agentics/workflows/daily-repo-status.md@d19056381ba48cb1f7c78510c23069701fa7ae87
|
||||||
|
---
|
||||||
|
|
||||||
|
# Daily Repo Status
|
||||||
|
|
||||||
|
Create an upbeat daily status report for the repo as a GitHub issue.
|
||||||
|
|
||||||
|
## What to include
|
||||||
|
|
||||||
|
- Recent repository activity (issues, PRs, discussions, releases, code changes)
|
||||||
|
- Progress tracking, goal reminders and highlights
|
||||||
|
- Project status and recommendations
|
||||||
|
- Actionable next steps for maintainers
|
||||||
|
|
||||||
|
## Style
|
||||||
|
|
||||||
|
- Be positive, encouraging, and helpful 🌟
|
||||||
|
- Use emojis moderately for engagement
|
||||||
|
- Keep it concise - adjust length based on actual activity
|
||||||
|
|
||||||
|
## Process
|
||||||
|
|
||||||
|
1. Gather recent activity from the repository
|
||||||
|
2. Study the repository, its issues and its pull requests
|
||||||
|
3. Create a new GitHub issue with your findings and insights
|
||||||
|
|
@ -38,7 +38,7 @@ jobs:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Login to Docker Registry
|
- name: Login to Docker Registry
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v4
|
||||||
with:
|
with:
|
||||||
registry: ${{ secrets.DOCKER_REGISTRY }}
|
registry: ${{ secrets.DOCKER_REGISTRY }}
|
||||||
username: ${{ secrets.DOCKERHUB_USER }}
|
username: ${{ secrets.DOCKERHUB_USER }}
|
||||||
|
|
@ -47,7 +47,7 @@ jobs:
|
||||||
- name: Set Docker repository name
|
- name: Set Docker repository name
|
||||||
run: echo "DOCKER_REPOSITORY=apache" >> $GITHUB_ENV
|
run: echo "DOCKER_REPOSITORY=apache" >> $GITHUB_ENV
|
||||||
|
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Set ACS version
|
- name: Set ACS version
|
||||||
run: echo "ACS_VERSION=$(grep '<version>' pom.xml | head -2 | tail -1 | cut -d'>' -f2 |cut -d'<' -f1)" >> $GITHUB_ENV
|
run: echo "ACS_VERSION=$(grep '<version>' pom.xml | head -2 | tail -1 | cut -d'>' -f2 |cut -d'<' -f1)" >> $GITHUB_ENV
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,78 @@
|
||||||
|
---
|
||||||
|
on:
|
||||||
|
schedule: 0 14 * * 1-5
|
||||||
|
workflow_dispatch: null
|
||||||
|
permissions:
|
||||||
|
issues: read
|
||||||
|
imports:
|
||||||
|
- github/gh-aw/.github/workflows/shared/reporting.md@94662b1dee8ce96c876ba9f33b3ab8be32de82a4
|
||||||
|
safe-outputs:
|
||||||
|
add-comment: {}
|
||||||
|
add-labels:
|
||||||
|
allowed:
|
||||||
|
- bug
|
||||||
|
- feature
|
||||||
|
- enhancement
|
||||||
|
- documentation
|
||||||
|
- question
|
||||||
|
- help-wanted
|
||||||
|
- good-first-issue
|
||||||
|
source: github/gh-aw/.github/workflows/issue-triage-agent.md@94662b1dee8ce96c876ba9f33b3ab8be32de82a4
|
||||||
|
strict: true
|
||||||
|
timeout-minutes: 5
|
||||||
|
tools:
|
||||||
|
github:
|
||||||
|
toolsets:
|
||||||
|
- issues
|
||||||
|
- labels
|
||||||
|
---
|
||||||
|
# Issue Triage Agent
|
||||||
|
|
||||||
|
List open issues in ${{ github.repository }} that have no labels. For each unlabeled issue, analyze the title and body, then add one of the allowed labels: `bug`, `feature`, `enhancement`, `documentation`, `question`, `help-wanted`, or `good-first-issue`.
|
||||||
|
|
||||||
|
Skip issues that:
|
||||||
|
- Already have any of these labels
|
||||||
|
- Have been assigned to any user (especially non-bot users)
|
||||||
|
|
||||||
|
After adding the label to an issue, mention the issue author in a comment using this format (follow shared/reporting.md guidelines):
|
||||||
|
|
||||||
|
**Comment Template**:
|
||||||
|
```markdown
|
||||||
|
### 🏷️ Issue Triaged
|
||||||
|
|
||||||
|
Hi @{author}! I've categorized this issue as **{label_name}** based on the following analysis:
|
||||||
|
|
||||||
|
**Reasoning**: {brief_explanation_of_why_this_label}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>View Triage Details</b></summary>
|
||||||
|
|
||||||
|
#### Analysis
|
||||||
|
- **Keywords detected**: {list_of_keywords_that_matched}
|
||||||
|
- **Issue type indicators**: {what_made_this_fit_the_category}
|
||||||
|
- **Confidence**: {High/Medium/Low}
|
||||||
|
|
||||||
|
#### Recommended Next Steps
|
||||||
|
- {context_specific_suggestion_1}
|
||||||
|
- {context_specific_suggestion_2}
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
**References**: [Triage run §{run_id}](https://github.com/github/gh-aw/actions/runs/{run_id})
|
||||||
|
```
|
||||||
|
|
||||||
|
**Key formatting requirements**:
|
||||||
|
- Use h3 (###) for the main heading
|
||||||
|
- Keep reasoning visible for quick understanding
|
||||||
|
- Wrap detailed analysis in `<details>` tags
|
||||||
|
- Include workflow run reference
|
||||||
|
- Keep total comment concise (collapsed details prevent noise)
|
||||||
|
|
||||||
|
## Batch Comment Optimization
|
||||||
|
|
||||||
|
For efficiency, if multiple issues are triaged in a single run:
|
||||||
|
1. Add individual labels to each issue
|
||||||
|
2. Add a brief comment to each issue (using the template above)
|
||||||
|
3. Optionally: Create a discussion summarizing all triage actions for that run
|
||||||
|
|
||||||
|
This provides both per-issue context and batch visibility.
|
||||||
|
|
@ -32,7 +32,7 @@ jobs:
|
||||||
name: Main Sonar JaCoCo Build
|
name: Main Sonar JaCoCo Build
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|
@ -44,14 +44,14 @@ jobs:
|
||||||
cache: 'maven'
|
cache: 'maven'
|
||||||
|
|
||||||
- name: Cache SonarCloud packages
|
- name: Cache SonarCloud packages
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ~/.sonar/cache
|
path: ~/.sonar/cache
|
||||||
key: ${{ runner.os }}-sonar
|
key: ${{ runner.os }}-sonar
|
||||||
restore-keys: ${{ runner.os }}-sonar
|
restore-keys: ${{ runner.os }}-sonar
|
||||||
|
|
||||||
- name: Cache local Maven repository
|
- name: Cache local Maven repository
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ~/.m2/repository
|
path: ~/.m2/repository
|
||||||
key: ${{ runner.os }}-m2-${{ hashFiles('pom.xml', '*/pom.xml', '*/*/pom.xml', '*/*/*/pom.xml') }}
|
key: ${{ runner.os }}-m2-${{ hashFiles('pom.xml', '*/pom.xml', '*/*/pom.xml', '*/*/*/pom.xml') }}
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,8 @@
|
||||||
name: "PR Merge Conflict Check"
|
name: "PR Merge Conflict Check"
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
pull_request_target:
|
pull_request:
|
||||||
types: [synchronize]
|
types: [opened, synchronize, reopened]
|
||||||
|
|
||||||
permissions: # added using https://github.com/step-security/secure-workflows
|
permissions: # added using https://github.com/step-security/secure-workflows
|
||||||
contents: read
|
contents: read
|
||||||
|
|
@ -35,7 +35,7 @@ jobs:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Conflict Check
|
- name: Conflict Check
|
||||||
uses: eps1lon/actions-label-merge-conflict@v2.0.0
|
uses: eps1lon/actions-label-merge-conflict@v3.0.3
|
||||||
with:
|
with:
|
||||||
repoToken: "${{ secrets.GITHUB_TOKEN }}"
|
repoToken: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
dirtyLabel: "status:has-conflicts"
|
dirtyLabel: "status:has-conflicts"
|
||||||
|
|
|
||||||
|
|
@ -32,18 +32,18 @@ jobs:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: Check Out
|
- name: Check Out
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
- name: Install
|
- name: Install
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
pip install pre-commit
|
pip install pre-commit
|
||||||
- name: Set PY
|
- name: Set PY
|
||||||
run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV
|
run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV
|
||||||
- uses: actions/cache@v4
|
- uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ~/.cache/pre-commit
|
path: ~/.cache/pre-commit
|
||||||
key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}
|
key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}
|
||||||
- name: Run pre-commit
|
- name: Run pre-commit
|
||||||
run: pre-commit run --all-files
|
run: pre-commit run --color=always --all-files
|
||||||
- name: Run manual pre-commit hooks
|
- name: Run manual pre-commit hooks
|
||||||
run: pre-commit run --all-files --hook-stage manual
|
run: pre-commit run --color=always --all-files --hook-stage manual
|
||||||
|
|
@ -30,7 +30,7 @@ jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Set up JDK 17
|
- name: Set up JDK 17
|
||||||
uses: actions/setup-java@v5
|
uses: actions/setup-java@v5
|
||||||
with:
|
with:
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ jobs:
|
||||||
name: Sonar JaCoCo Coverage
|
name: Sonar JaCoCo Coverage
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
ref: "refs/pull/${{ github.event.number }}/merge"
|
ref: "refs/pull/${{ github.event.number }}/merge"
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
@ -46,14 +46,14 @@ jobs:
|
||||||
cache: 'maven'
|
cache: 'maven'
|
||||||
|
|
||||||
- name: Cache SonarCloud packages
|
- name: Cache SonarCloud packages
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ~/.sonar/cache
|
path: ~/.sonar/cache
|
||||||
key: ${{ runner.os }}-sonar
|
key: ${{ runner.os }}-sonar
|
||||||
restore-keys: ${{ runner.os }}-sonar
|
restore-keys: ${{ runner.os }}-sonar
|
||||||
|
|
||||||
- name: Cache local Maven repository
|
- name: Cache local Maven repository
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ~/.m2/repository
|
path: ~/.m2/repository
|
||||||
key: ${{ runner.os }}-m2-${{ hashFiles('pom.xml', '*/pom.xml', '*/*/pom.xml', '*/*/*/pom.xml') }}
|
key: ${{ runner.os }}-m2-${{ hashFiles('pom.xml', '*/pom.xml', '*/*/pom.xml', '*/*/*/pom.xml') }}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
# or more contributor license agreements. See the NOTICE file
|
||||||
|
# distributed with this work for additional information
|
||||||
|
# regarding copyright ownership. The ASF licenses this file
|
||||||
|
# to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance
|
||||||
|
# with the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing,
|
||||||
|
# software distributed under the License is distributed on an
|
||||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
# KIND, either express or implied. See the License for the
|
||||||
|
# specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
name: 'Close stale issues and PRs'
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '30 1 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
actions: write
|
||||||
|
issues: write
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v10
|
||||||
|
with:
|
||||||
|
stale-issue-message: 'This issue is stale because it has been open for 120 days with no activity. It may be removed by administrators of this project at any time. Remove the stale label or comment to request for removal of it to prevent this.'
|
||||||
|
stale-pr-message: 'This PR is stale because it has been open for 120 days with no activity. It may be removed by administrators of this project at any time. Remove the stale label or comment to request for removal of it to prevent this.'
|
||||||
|
close-issue-message: 'This issue was closed because it has been stale for 120 days with no activity.'
|
||||||
|
close-pr-message: 'This PR was closed because it has been stale for 240 days with no activity.'
|
||||||
|
stale-issue-label: 'no-issue-activity'
|
||||||
|
stale-pr-label: 'no-pr-activity'
|
||||||
|
days-before-stale: 120
|
||||||
|
days-before-close: -1
|
||||||
|
days-before-pr-close: 240
|
||||||
|
exempt-issue-labels: 'gsoc,good-first-issue,long-term-plan'
|
||||||
|
exempt-pr-labels: 'status:ready-for-merge,status:needs-testing,status:on-hold'
|
||||||
|
- uses: actions/stale@v10
|
||||||
|
with:
|
||||||
|
stale-issue-label: 'archive'
|
||||||
|
days-before-stale: 240
|
||||||
|
exempt-issue-labels: 'gsoc,good-first-issue,long-term-plan'
|
||||||
|
days-before-close: -1
|
||||||
|
|
@ -31,10 +31,10 @@ jobs:
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Set up Node
|
- name: Set up Node
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 16
|
||||||
|
|
||||||
|
|
@ -55,7 +55,7 @@ jobs:
|
||||||
npm run lint
|
npm run lint
|
||||||
npm run test:unit
|
npm run test:unit
|
||||||
|
|
||||||
- uses: codecov/codecov-action@v4
|
- uses: codecov/codecov-action@v6
|
||||||
if: github.repository == 'apache/cloudstack'
|
if: github.repository == 'apache/cloudstack'
|
||||||
with:
|
with:
|
||||||
working-directory: ui
|
working-directory: ui
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,12 @@ repos:
|
||||||
hooks:
|
hooks:
|
||||||
- id: identity
|
- id: identity
|
||||||
- id: check-hooks-apply
|
- id: check-hooks-apply
|
||||||
|
- repo: https://github.com/thlorenz/doctoc.git
|
||||||
|
rev: v2.2.0
|
||||||
|
hooks:
|
||||||
|
- id: doctoc
|
||||||
|
name: Add TOC for Markdown files
|
||||||
|
files: ^CONTRIBUTING\.md$|^INSTALL\.md$|^README\.md$
|
||||||
- repo: https://github.com/oxipng/oxipng
|
- repo: https://github.com/oxipng/oxipng
|
||||||
rev: v9.1.5
|
rev: v9.1.5
|
||||||
hooks:
|
hooks:
|
||||||
|
|
@ -41,6 +47,21 @@ repos:
|
||||||
- repo: https://github.com/Lucas-C/pre-commit-hooks
|
- repo: https://github.com/Lucas-C/pre-commit-hooks
|
||||||
rev: v1.5.5
|
rev: v1.5.5
|
||||||
hooks:
|
hooks:
|
||||||
|
- id: chmod
|
||||||
|
name: set file permissions
|
||||||
|
args: ['644']
|
||||||
|
files: \.md$
|
||||||
|
stages: [manual]
|
||||||
|
- id: insert-license
|
||||||
|
name: add license for all cfg files
|
||||||
|
description: automatically adds a licence header to all cfg files that don't have a license header
|
||||||
|
files: \.cfg$
|
||||||
|
args:
|
||||||
|
- --comment-style
|
||||||
|
- '|#|'
|
||||||
|
- --license-filepath
|
||||||
|
- .github/workflows/license-templates/LICENSE.txt
|
||||||
|
- --fuzzy-match-generates-todo
|
||||||
- id: insert-license
|
- id: insert-license
|
||||||
name: add license for all Markdown files
|
name: add license for all Markdown files
|
||||||
files: \.md$
|
files: \.md$
|
||||||
|
|
@ -50,7 +71,56 @@ repos:
|
||||||
- --license-filepath
|
- --license-filepath
|
||||||
- .github/workflows/license-templates/LICENSE.txt
|
- .github/workflows/license-templates/LICENSE.txt
|
||||||
- --fuzzy-match-generates-todo
|
- --fuzzy-match-generates-todo
|
||||||
exclude: ^(CHANGES|ISSUE_TEMPLATE|PULL_REQUEST_TEMPLATE)\.md$|^ui/docs/(full|smoke)-test-plan\.template\.md$
|
exclude: ^(CHANGES|ISSUE_TEMPLATE|PULL_REQUEST_TEMPLATE)\.md$|^ui/docs/(full|smoke)-test-plan\.template\.md$|^\.github/workflows/.*\.md$|^\.github/aw/.*\.md$
|
||||||
|
- id: insert-license
|
||||||
|
name: add license for all properties files
|
||||||
|
description: automatically adds a licence header to all properties files that don't have a license header
|
||||||
|
files: \.properties$
|
||||||
|
args:
|
||||||
|
- --comment-style
|
||||||
|
- '|#|'
|
||||||
|
- --license-filepath
|
||||||
|
- .github/workflows/license-templates/LICENSE.txt
|
||||||
|
- --fuzzy-match-generates-todo
|
||||||
|
- id: insert-license
|
||||||
|
name: add license for all Shell files
|
||||||
|
description: automatically adds a licence header to all Shell files that don't have a license header
|
||||||
|
files: \.sh$
|
||||||
|
args:
|
||||||
|
- --comment-style
|
||||||
|
- '|#|'
|
||||||
|
- --license-filepath
|
||||||
|
- .github/workflows/license-templates/LICENSE.txt
|
||||||
|
- --fuzzy-match-generates-todo
|
||||||
|
- id: insert-license
|
||||||
|
name: add license for all SQL files
|
||||||
|
files: \.sql$
|
||||||
|
args:
|
||||||
|
- --comment-style
|
||||||
|
- '|--|'
|
||||||
|
- --license-filepath
|
||||||
|
- .github/workflows/license-templates/LICENSE.txt
|
||||||
|
- --fuzzy-match-generates-todo
|
||||||
|
- id: insert-license
|
||||||
|
name: add license for all Vue files
|
||||||
|
files: \.vue$
|
||||||
|
args:
|
||||||
|
- --comment-style
|
||||||
|
- '|//|'
|
||||||
|
- --license-filepath
|
||||||
|
- .github/workflows/license-templates/LICENSE.txt
|
||||||
|
- --fuzzy-match-generates-todo
|
||||||
|
- id: insert-license
|
||||||
|
name: add license for all YAML files
|
||||||
|
description: automatically adds a licence header to all YAML files that don't have a license header
|
||||||
|
files: \.ya?ml$
|
||||||
|
args:
|
||||||
|
- --comment-style
|
||||||
|
- '|#|'
|
||||||
|
- --license-filepath
|
||||||
|
- .github/workflows/license-templates/LICENSE.txt
|
||||||
|
- --fuzzy-match-generates-todo
|
||||||
|
exclude: ^\.github/workflows/.*\.lock\.yml$
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v6.0.0
|
rev: v6.0.0
|
||||||
hooks:
|
hooks:
|
||||||
|
|
@ -84,7 +154,7 @@ repos:
|
||||||
^systemvm/agent/certs/realhostip\.key$|
|
^systemvm/agent/certs/realhostip\.key$|
|
||||||
^test/integration/smoke/test_ssl_offloading\.py$
|
^test/integration/smoke/test_ssl_offloading\.py$
|
||||||
- id: end-of-file-fixer
|
- id: end-of-file-fixer
|
||||||
exclude: \.vhd$
|
exclude: \.vhd$|\.svg$
|
||||||
- id: file-contents-sorter
|
- id: file-contents-sorter
|
||||||
args: [--unique]
|
args: [--unique]
|
||||||
files: ^\.github/linters/codespell\.txt$
|
files: ^\.github/linters/codespell\.txt$
|
||||||
|
|
@ -92,17 +162,15 @@ repos:
|
||||||
- id: forbid-submodules
|
- id: forbid-submodules
|
||||||
- id: mixed-line-ending
|
- id: mixed-line-ending
|
||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
files: \.(bat|cfg|cs|css|gitignore|header|in|install|java|md|properties|py|rb|rc|sh|sql|te|template|txt|ucls|vue|xml|xsl|yaml|yml)$|^cloud-cli/bindir/cloud-tool$|^debian/changelog$
|
files: ^(LICENSE|NOTICE)$|README$|\.(bat|cfg|config|cs|css|erb|gitignore|header|in|install|java|md|properties|py|rb|rc|sh|sql|svg|te|template|txt|ucls|vue|xml|xsl|yaml|yml)$|^cloud-cli/bindir/cloud-tool$|^debian/changelog$
|
||||||
args: [--markdown-linebreak-ext=md]
|
args: [--markdown-linebreak-ext=md]
|
||||||
exclude: ^services/console-proxy/rdpconsole/src/test/doc/freerdp-debug-log\.txt$
|
exclude: ^services/console-proxy/rdpconsole/src/test/doc/freerdp-debug-log\.txt$
|
||||||
- repo: https://github.com/codespell-project/codespell
|
- repo: https://github.com/codespell-project/codespell
|
||||||
rev: v2.2.6
|
rev: v2.4.2
|
||||||
hooks:
|
hooks:
|
||||||
- id: codespell
|
- id: codespell
|
||||||
name: run codespell
|
name: run codespell
|
||||||
description: Check spelling with codespell
|
description: Check spelling with codespell
|
||||||
args: [--ignore-words=.github/linters/codespell.txt]
|
|
||||||
exclude: ^systemvm/agent/noVNC/|^ui/package\.json$|^ui/package-lock\.json$|^ui/public/js/less\.min\.js$|^ui/public/locales/.*[^n].*\.json$|^server/src/test/java/org/apache/cloudstack/network/ssl/CertServiceTest.java$|^test/integration/smoke/test_ssl_offloading.py$
|
|
||||||
- repo: https://github.com/pycqa/flake8
|
- repo: https://github.com/pycqa/flake8
|
||||||
rev: 7.0.0
|
rev: 7.0.0
|
||||||
hooks:
|
hooks:
|
||||||
|
|
@ -116,15 +184,7 @@ repos:
|
||||||
description: check Markdown files with markdownlint
|
description: check Markdown files with markdownlint
|
||||||
args: [--config=.github/linters/.markdown-lint.yml]
|
args: [--config=.github/linters/.markdown-lint.yml]
|
||||||
types: [markdown]
|
types: [markdown]
|
||||||
files: \.(md|mdown|markdown)$
|
|
||||||
- repo: https://github.com/Lucas-C/pre-commit-hooks
|
|
||||||
rev: v1.5.5
|
|
||||||
hooks:
|
|
||||||
- id: chmod
|
|
||||||
name: set file permissions
|
|
||||||
args: ['644']
|
|
||||||
files: \.md$
|
files: \.md$
|
||||||
stages: [manual]
|
|
||||||
- repo: https://github.com/adrienverge/yamllint
|
- repo: https://github.com/adrienverge/yamllint
|
||||||
rev: v1.37.1
|
rev: v1.37.1
|
||||||
hooks:
|
hooks:
|
||||||
|
|
@ -134,4 +194,4 @@ repos:
|
||||||
args: [--config-file=.github/linters/.yamllint.yml]
|
args: [--config-file=.github/linters/.yamllint.yml]
|
||||||
types: [yaml]
|
types: [yaml]
|
||||||
files: \.ya?ml$
|
files: \.ya?ml$
|
||||||
exclude: ^.*k8s-.*\.ya?ml$
|
exclude: ^.*k8s-.*\.ya?ml$|^.github/workflows/.*\.lock\.ya?ml$
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,24 @@
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
|
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
||||||
|
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
||||||
|
|
||||||
|
- [Summary](#summary)
|
||||||
|
- [Bug fixes](#bug-fixes)
|
||||||
|
- [Developing new features](#developing-new-features)
|
||||||
|
- [PendingReleaseNotes file](#pendingreleasenotes-file)
|
||||||
|
- [Fork the code](#fork-the-code)
|
||||||
|
- [Making changes](#making-changes)
|
||||||
|
- [Rebase `feature_x` to include updates from `upstream/main`](#rebase-feature_x-to-include-updates-from-upstreammain)
|
||||||
|
- [Make a GitHub Pull Request to contribute your changes](#make-a-github-pull-request-to-contribute-your-changes)
|
||||||
|
- [Cleaning up after a successful pull request](#cleaning-up-after-a-successful-pull-request)
|
||||||
|
- [Release Principles](#release-principles)
|
||||||
|
|
||||||
|
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
This document covers how to contribute to the ACS project. ACS uses GitHub PRs to manage code contributions.
|
This document covers how to contribute to the ACS project. ACS uses GitHub PRs to manage code contributions.
|
||||||
These instructions assume you have a GitHub.com account, so if you don't have one you will have to create one. Your proposed code changes will be published to your own fork of the ACS project, and you will submit a Pull Request for your changes to be added.
|
These instructions assume you have a GitHub.com account, so if you don't have one you will have to create one. Your proposed code changes will be published to your own fork of the ACS project, and you will submit a Pull Request for your changes to be added.
|
||||||
|
|
||||||
|
|
|
||||||
18
INSTALL.md
18
INSTALL.md
|
|
@ -26,9 +26,21 @@ or the developer [wiki](https://cwiki.apache.org/confluence/display/CLOUDSTACK/H
|
||||||
Apache CloudStack developers use various platforms for development, this guide
|
Apache CloudStack developers use various platforms for development, this guide
|
||||||
was tested against a CentOS 7 x86_64 setup.
|
was tested against a CentOS 7 x86_64 setup.
|
||||||
|
|
||||||
* [Setting up development environment](https://cwiki.apache.org/confluence/display/CLOUDSTACK/Setting+up+CloudStack+Development+Environment) for Apache CloudStack.
|
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
||||||
* [Building](https://cwiki.apache.org/confluence/display/CLOUDSTACK/How+to+build+CloudStack) Apache CloudStack.
|
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
||||||
* [Appliance based development](https://github.com/rhtyd/monkeybox)
|
|
||||||
|
- [Setting up Development Environment](#setting-up-development-environment)
|
||||||
|
- [Using jenv and/or pyenv for Version Management](#using-jenv-andor-pyenv-for-version-management)
|
||||||
|
- [Getting the Source Code](#getting-the-source-code)
|
||||||
|
- [Building](#building)
|
||||||
|
- [To bring up CloudStack UI](#to-bring-up-cloudstack-ui)
|
||||||
|
- [Building with non-redistributable plugins](#building-with-non-redistributable-plugins)
|
||||||
|
- [Packaging and Installation](#packaging-and-installation)
|
||||||
|
- [Debian/Ubuntu](#debianubuntu)
|
||||||
|
- [RHEL/CentOS](#rhelcentos)
|
||||||
|
- [Notes](#notes)
|
||||||
|
|
||||||
|
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
||||||
|
|
||||||
## Setting up Development Environment
|
## Setting up Development Environment
|
||||||
|
|
||||||
|
|
|
||||||
242
LICENSE
242
LICENSE
|
|
@ -177,14 +177,14 @@ Copyright (c) 2014 The Apache Software Foundation
|
||||||
of your accepting any such warranty or additional liability.
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
|
||||||
This distribution contains third party resources.
|
This distribution contains third party resources.
|
||||||
Within the console-proxy/js directory
|
Within the console-proxy/js directory
|
||||||
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
||||||
|
|
||||||
Copyright (c) 2009, John Resig
|
Copyright (c) 2009, John Resig
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
"Software"), to deal in the Software without restriction, including
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
|
@ -192,10 +192,10 @@ Within the console-proxy/js directory
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
the following conditions:
|
the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
The above copyright notice and this permission notice shall be
|
||||||
included in all copies or substantial portions of the Software.
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
|
@ -203,43 +203,43 @@ Within the console-proxy/js directory
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
from John Resig
|
from John Resig
|
||||||
jquery.js
|
jquery.js
|
||||||
|
|
||||||
|
|
||||||
Within the systemvm/debian/etc directory
|
Within the systemvm/debian/etc directory
|
||||||
placed in the public domain
|
placed in the public domain
|
||||||
by Adiscon GmbH http://www.adiscon.com/
|
by Adiscon GmbH http://www.adiscon.com/
|
||||||
rsyslog.conf
|
rsyslog.conf
|
||||||
by Simon Kelley
|
by Simon Kelley
|
||||||
dnsmasq.conf
|
dnsmasq.conf
|
||||||
vpcdnsmasq.conf
|
vpcdnsmasq.conf
|
||||||
|
|
||||||
Within the systemvm/debian/etc/apache2 directory
|
Within the systemvm/debian/etc/apache2 directory
|
||||||
licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above)
|
licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above)
|
||||||
Copyright (c) 2012 The Apache Software Foundation
|
Copyright (c) 2012 The Apache Software Foundation
|
||||||
from The Apache Software Foundation http://www.apache.org/
|
from The Apache Software Foundation http://www.apache.org/
|
||||||
httpd.conf
|
httpd.conf
|
||||||
vhost.template
|
vhost.template
|
||||||
|
|
||||||
Within the systemvm/debian/etc/ssh/ directory
|
Within the systemvm/debian/etc/ssh/ directory
|
||||||
licensed under the BSD (2-clause) http://www.opensource.org/licenses/BSD-2-Clause (as follows)
|
licensed under the BSD (2-clause) http://www.opensource.org/licenses/BSD-2-Clause (as follows)
|
||||||
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
are permitted provided that the following conditions are met:
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
Redistributions of source code must retain the above copyright notice, this list
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
of conditions and the following disclaimer. Redistributions in binary form must
|
of conditions and the following disclaimer. Redistributions in binary form must
|
||||||
reproduce the above copyright notice, this list of conditions and the following
|
reproduce the above copyright notice, this list of conditions and the following
|
||||||
disclaimer in the documentation and/or other materials provided with the
|
disclaimer in the documentation and/or other materials provided with the
|
||||||
distribution.
|
distribution.
|
||||||
|
|
||||||
Neither the name of the author nor the names of contributors may be used to
|
Neither the name of the author nor the names of contributors may be used to
|
||||||
endorse or promote products derived from this software without specific prior
|
endorse or promote products derived from this software without specific prior
|
||||||
written permission.
|
written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
|
@ -250,55 +250,55 @@ Within the systemvm/debian/etc/ssh/ directory
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
from OpenSSH Project http://www.openssh.org/
|
from OpenSSH Project http://www.openssh.org/
|
||||||
sshd_config
|
sshd_config
|
||||||
|
|
||||||
Within the systemvm/debian/root/redundant_router directory
|
Within the systemvm/debian/root/redundant_router directory
|
||||||
placed in the public domain
|
placed in the public domain
|
||||||
by The netfilter.org project http://www.netfilter.org/
|
by The netfilter.org project http://www.netfilter.org/
|
||||||
conntrackd.conf.templ
|
conntrackd.conf.templ
|
||||||
|
|
||||||
Within the scripts/storage/secondary directory
|
Within the scripts/storage/secondary directory
|
||||||
licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above)
|
licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above)
|
||||||
Copyright (c) 2010-2011 OpenStack, LLC.
|
Copyright (c) 2010-2011 OpenStack, LLC.
|
||||||
from OpenStack, LLC http://www.openstack.org
|
from OpenStack, LLC http://www.openstack.org
|
||||||
swift
|
swift
|
||||||
|
|
||||||
Within the scripts/vm/hypervisor/xenserver directory
|
Within the scripts/vm/hypervisor/xenserver directory
|
||||||
licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above)
|
licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above)
|
||||||
Copyright (c) 2010-2011 OpenStack, LLC.
|
Copyright (c) 2010-2011 OpenStack, LLC.
|
||||||
from OpenStack, LLC http://www.openstack.org
|
from OpenStack, LLC http://www.openstack.org
|
||||||
swift
|
swift
|
||||||
|
|
||||||
Within the ui/lib directory
|
Within the ui/lib directory
|
||||||
placed in the public domain
|
placed in the public domain
|
||||||
by Eric Meyer http://meyerweb.com/eric/
|
by Eric Meyer http://meyerweb.com/eric/
|
||||||
reset.css from http://meyerweb.com/eric/tools/css/reset/
|
reset.css from http://meyerweb.com/eric/tools/css/reset/
|
||||||
|
|
||||||
licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above)
|
licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above)
|
||||||
Copyright (c) 2006 Google Inc.
|
Copyright (c) 2006 Google Inc.
|
||||||
from Google Inc. http://google.com
|
from Google Inc. http://google.com
|
||||||
excanvas.js from http://code.google.com/p/explorercanvas/
|
excanvas.js from http://code.google.com/p/explorercanvas/
|
||||||
|
|
||||||
licensed under the BSD (2-clause) http://www.opensource.org/licenses/BSD-2-Clause (as follows)
|
licensed under the BSD (2-clause) http://www.opensource.org/licenses/BSD-2-Clause (as follows)
|
||||||
|
|
||||||
Copyright (c) 2008 George McGinley Smith
|
Copyright (c) 2008 George McGinley Smith
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without modification,
|
Redistribution and use in source and binary forms, with or without modification,
|
||||||
are permitted provided that the following conditions are met:
|
are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
Redistributions of source code must retain the above copyright notice, this list
|
Redistributions of source code must retain the above copyright notice, this list
|
||||||
of conditions and the following disclaimer. Redistributions in binary form must
|
of conditions and the following disclaimer. Redistributions in binary form must
|
||||||
reproduce the above copyright notice, this list of conditions and the following
|
reproduce the above copyright notice, this list of conditions and the following
|
||||||
disclaimer in the documentation and/or other materials provided with the
|
disclaimer in the documentation and/or other materials provided with the
|
||||||
distribution.
|
distribution.
|
||||||
|
|
||||||
Neither the name of the author nor the names of contributors may be used to
|
Neither the name of the author nor the names of contributors may be used to
|
||||||
endorse or promote products derived from this software without specific prior
|
endorse or promote products derived from this software without specific prior
|
||||||
written permission.
|
written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
|
@ -309,13 +309,13 @@ Within the ui/lib directory
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
from George McGinley Smith
|
from George McGinley Smith
|
||||||
jquery.easing.js
|
jquery.easing.js
|
||||||
|
|
||||||
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
||||||
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
"Software"), to deal in the Software without restriction, including
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
|
@ -323,10 +323,10 @@ Within the ui/lib directory
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
the following conditions:
|
the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
The above copyright notice and this permission notice shall be
|
||||||
included in all copies or substantial portions of the Software.
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
|
@ -334,14 +334,14 @@ Within the ui/lib directory
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
from The Dojo Foundation http://dojofoundation.org/
|
from The Dojo Foundation http://dojofoundation.org/
|
||||||
require.js from http://github.com/jrburke/requirejs
|
require.js from http://github.com/jrburke/requirejs
|
||||||
|
|
||||||
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
||||||
|
|
||||||
Copyright (c) 2011, John Resig
|
Copyright (c) 2011, John Resig
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
"Software"), to deal in the Software without restriction, including
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
|
@ -349,10 +349,10 @@ Within the ui/lib directory
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
the following conditions:
|
the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
The above copyright notice and this permission notice shall be
|
||||||
included in all copies or substantial portions of the Software.
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
|
@ -360,14 +360,14 @@ Within the ui/lib directory
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
from John Resig
|
from John Resig
|
||||||
jquery.js
|
jquery.js
|
||||||
|
|
||||||
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
||||||
|
|
||||||
Copyright (c) 2014 Jörn Zaefferer
|
Copyright (c) 2014 Jörn Zaefferer
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
"Software"), to deal in the Software without restriction, including
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
|
@ -375,10 +375,10 @@ Within the ui/lib directory
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
the following conditions:
|
the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
The above copyright notice and this permission notice shall be
|
||||||
included in all copies or substantial portions of the Software.
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
|
@ -386,9 +386,9 @@ Within the ui/lib directory
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
from Jorn Zaefferer
|
from Jorn Zaefferer
|
||||||
jquery.validate.js
|
jquery.validate.js
|
||||||
|
|
||||||
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
||||||
|
|
||||||
|
|
@ -418,8 +418,8 @@ Within the ui/lib directory
|
||||||
|
|
||||||
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
||||||
|
|
||||||
Copyright (c) 2010, Sebastian Tschan
|
Copyright (c) 2010, Sebastian Tschan
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
"Software"), to deal in the Software without restriction, including
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
|
@ -427,10 +427,10 @@ Within the ui/lib directory
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
the following conditions:
|
the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
The above copyright notice and this permission notice shall be
|
||||||
included in all copies or substantial portions of the Software.
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
|
@ -438,14 +438,14 @@ Within the ui/lib directory
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
from Sebastian Tschan https://blueimp.net
|
from Sebastian Tschan https://blueimp.net
|
||||||
jquery.md5.js
|
jquery.md5.js
|
||||||
|
|
||||||
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
||||||
|
|
||||||
Copyright (c) 2006 Klaus Hartl (stilbuero.de)
|
Copyright (c) 2006 Klaus Hartl (stilbuero.de)
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
"Software"), to deal in the Software without restriction, including
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
|
@ -453,10 +453,10 @@ Within the ui/lib directory
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
the following conditions:
|
the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
The above copyright notice and this permission notice shall be
|
||||||
included in all copies or substantial portions of the Software.
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
|
@ -464,15 +464,15 @@ Within the ui/lib directory
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
from Klaus Hartl http://stilbuero.de
|
from Klaus Hartl http://stilbuero.de
|
||||||
jquery.cookies.js
|
jquery.cookies.js
|
||||||
|
|
||||||
Within the ui/lib/flot directory
|
Within the ui/lib/flot directory
|
||||||
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
||||||
|
|
||||||
Released under the MIT license by IOLA, December 2007.
|
Released under the MIT license by IOLA, December 2007.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
"Software"), to deal in the Software without restriction, including
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
|
@ -480,10 +480,10 @@ Within the ui/lib/flot directory
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
the following conditions:
|
the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
The above copyright notice and this permission notice shall be
|
||||||
included in all copies or substantial portions of the Software.
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
|
@ -491,24 +491,24 @@ Within the ui/lib/flot directory
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
from IOLA http://www.iola.dk/
|
from IOLA http://www.iola.dk/
|
||||||
jquery.flot.crosshair.js
|
jquery.flot.crosshair.js
|
||||||
jquery.flot.fillbetween.js
|
jquery.flot.fillbetween.js
|
||||||
jquery.flot.image.js
|
jquery.flot.image.js
|
||||||
jquery.flot.js
|
jquery.flot.js
|
||||||
jquery.flot.navigate.js
|
jquery.flot.navigate.js
|
||||||
jquery.flot.resize.js
|
jquery.flot.resize.js
|
||||||
jquery.flot.selection.js
|
jquery.flot.selection.js
|
||||||
jquery.flot.stack.js
|
jquery.flot.stack.js
|
||||||
jquery.flot.symbol.js
|
jquery.flot.symbol.js
|
||||||
jquery.flot.threshold.js
|
jquery.flot.threshold.js
|
||||||
|
|
||||||
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
||||||
|
|
||||||
Created by Brian Medendorp, June 2009
|
Created by Brian Medendorp, June 2009
|
||||||
Updated November 2009 with contributions from: btburnett3, Anthony Aragues and Xavi Ivars
|
Updated November 2009 with contributions from: btburnett3, Anthony Aragues and Xavi Ivars
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
"Software"), to deal in the Software without restriction, including
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
|
@ -516,10 +516,10 @@ Within the ui/lib/flot directory
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
the following conditions:
|
the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
The above copyright notice and this permission notice shall be
|
||||||
included in all copies or substantial portions of the Software.
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
|
@ -527,13 +527,13 @@ Within the ui/lib/flot directory
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
from Brian Medendorp
|
from Brian Medendorp
|
||||||
jquery.pie.js
|
jquery.pie.js
|
||||||
|
|
||||||
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
||||||
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
"Software"), to deal in the Software without restriction, including
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
|
@ -541,10 +541,10 @@ Within the ui/lib/flot directory
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
the following conditions:
|
the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
The above copyright notice and this permission notice shall be
|
||||||
included in all copies or substantial portions of the Software.
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
|
@ -552,14 +552,14 @@ Within the ui/lib/flot directory
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
from Ole Laursen
|
from Ole Laursen
|
||||||
jquery.colorhelpers.js
|
jquery.colorhelpers.js
|
||||||
|
|
||||||
Within the ui/lib/jquery-ui directory
|
Within the ui/lib/jquery-ui directory
|
||||||
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
||||||
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
"Software"), to deal in the Software without restriction, including
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
|
@ -567,10 +567,10 @@ Within the ui/lib/jquery-ui directory
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
the following conditions:
|
the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
The above copyright notice and this permission notice shall be
|
||||||
included in all copies or substantial portions of the Software.
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
|
@ -578,17 +578,17 @@ Within the ui/lib/jquery-ui directory
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
from jQuery UI Developers http://jqueryui.com/about
|
from jQuery UI Developers http://jqueryui.com/about
|
||||||
css/jquery-ui.css
|
css/jquery-ui.css
|
||||||
index.html
|
index.html
|
||||||
js/jquery-ui.js
|
js/jquery-ui.js
|
||||||
|
|
||||||
Within the ui/lib/qunit directory
|
Within the ui/lib/qunit directory
|
||||||
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
licensed under the MIT License http://www.opensource.org/licenses/mit-license.php (as follows)
|
||||||
|
|
||||||
Copyright (c) 2012 John Resig, Jörn Zaefferer
|
Copyright (c) 2012 John Resig, Jörn Zaefferer
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
"Software"), to deal in the Software without restriction, including
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
|
@ -596,10 +596,10 @@ Within the ui/lib/qunit directory
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
the following conditions:
|
the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
The above copyright notice and this permission notice shall be
|
||||||
included in all copies or substantial portions of the Software.
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
|
@ -607,20 +607,20 @@ Within the ui/lib/qunit directory
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
from Jorn Zaefferer
|
from Jorn Zaefferer
|
||||||
qunit.css from http://docs.jquery.com/QUnit
|
qunit.css from http://docs.jquery.com/QUnit
|
||||||
qunit.js from http://docs.jquery.com/QUnit
|
qunit.js from http://docs.jquery.com/QUnit
|
||||||
|
|
||||||
Within the utils/src/main/java/com/cloud/utils/db directory
|
Within the utils/src/main/java/com/cloud/utils/db directory
|
||||||
licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above)
|
licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above)
|
||||||
Copyright (c) 2004 Clinton Begin
|
Copyright (c) 2004 Clinton Begin
|
||||||
from Clinton Begin http://code.google.com/p/mybatis/
|
from Clinton Begin http://code.google.com/p/mybatis/
|
||||||
ScriptRunner.java from http://code.google.com/p/mybatis/
|
ScriptRunner.java from http://code.google.com/p/mybatis/
|
||||||
|
|
||||||
Within the utils/src/main/java/org/apache/commons/httpclient/contrib/ssl directory
|
Within the utils/src/main/java/org/apache/commons/httpclient/contrib/ssl directory
|
||||||
licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above)
|
licensed under the Apache License, Version 2 http://www.apache.org/licenses/LICENSE-2.0.txt (as above)
|
||||||
Copyright (c) 2007 The Apache Software Foundation
|
Copyright (c) 2007 The Apache Software Foundation
|
||||||
from The Apache Software Foundation http://www.apache.org/
|
from The Apache Software Foundation http://www.apache.org/
|
||||||
EasySSLProtocolSocketFactory.java
|
EasySSLProtocolSocketFactory.java
|
||||||
EasyX509TrustManager.java
|
EasyX509TrustManager.java
|
||||||
|
|
|
||||||
52
NOTICE
52
NOTICE
|
|
@ -1,62 +1,62 @@
|
||||||
Apache CloudStack
|
Apache CloudStack
|
||||||
Copyright 2014 The Apache Software Foundation
|
Copyright 2014 The Apache Software Foundation
|
||||||
|
|
||||||
This product includes software developed at
|
This product includes software developed at
|
||||||
The Apache Software Foundation (http://www.apache.org/).
|
The Apache Software Foundation (http://www.apache.org/).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
This distribution contains third party resources requiring the following notices:
|
This distribution contains third party resources requiring the following notices:
|
||||||
|
|
||||||
|
|
||||||
For
|
For
|
||||||
jquery.js
|
jquery.js
|
||||||
|
|
||||||
|
|
||||||
jQuery JavaScript Library v1.3.2
|
jQuery JavaScript Library v1.3.2
|
||||||
http://jquery.com/
|
http://jquery.com/
|
||||||
|
|
||||||
Copyright (c) 2009 John Resig
|
Copyright (c) 2009 John Resig
|
||||||
Dual licensed under the MIT and GPL licenses.
|
Dual licensed under the MIT and GPL licenses.
|
||||||
http://docs.jquery.com/License
|
http://docs.jquery.com/License
|
||||||
|
|
||||||
Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
|
Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
|
||||||
Revision: 6246
|
Revision: 6246
|
||||||
|
|
||||||
|
|
||||||
For
|
For
|
||||||
jquery.js
|
jquery.js
|
||||||
|
|
||||||
|
|
||||||
jQuery JavaScript Library v1.6.4
|
jQuery JavaScript Library v1.6.4
|
||||||
http://jquery.com/
|
http://jquery.com/
|
||||||
|
|
||||||
Copyright 2011, John Resig
|
Copyright 2011, John Resig
|
||||||
Dual licensed under the MIT or GPL Version 2 licenses.
|
Dual licensed under the MIT or GPL Version 2 licenses.
|
||||||
http://jquery.org/license
|
http://jquery.org/license
|
||||||
|
|
||||||
Includes Sizzle.js
|
Includes Sizzle.js
|
||||||
http://sizzlejs.com/
|
http://sizzlejs.com/
|
||||||
Copyright 2011, The Dojo Foundation
|
Copyright 2011, The Dojo Foundation
|
||||||
Released under the MIT, BSD, and GPL Licenses.
|
Released under the MIT, BSD, and GPL Licenses.
|
||||||
|
|
||||||
Date: Mon Sep 12 18:54:48 2011 -0400
|
Date: Mon Sep 12 18:54:48 2011 -0400
|
||||||
|
|
||||||
|
|
||||||
For
|
For
|
||||||
jquery.md5.js
|
jquery.md5.js
|
||||||
|
|
||||||
|
|
||||||
jQuery MD5 Plugin 1.2.1
|
jQuery MD5 Plugin 1.2.1
|
||||||
https://github.com/blueimp/jQuery-MD5
|
https://github.com/blueimp/jQuery-MD5
|
||||||
|
|
||||||
Copyright 2010, Sebastian Tschan
|
Copyright 2010, Sebastian Tschan
|
||||||
https://blueimp.net
|
https://blueimp.net
|
||||||
|
|
||||||
Licensed under the MIT license:
|
Licensed under the MIT license:
|
||||||
http://creativecommons.org/licenses/MIT/
|
http://creativecommons.org/licenses/MIT/
|
||||||
|
|
||||||
Based on
|
Based on
|
||||||
A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
||||||
Digest Algorithm, as defined in RFC 1321.
|
Digest Algorithm, as defined in RFC 1321.
|
||||||
|
|
@ -65,15 +65,15 @@ Copyright 2014 The Apache Software Foundation
|
||||||
Distributed under the BSD License
|
Distributed under the BSD License
|
||||||
See http://pajhome.org.uk/crypt/md5 for more info.
|
See http://pajhome.org.uk/crypt/md5 for more info.
|
||||||
|
|
||||||
|
|
||||||
For
|
For
|
||||||
jquery.colorhelpers.js
|
jquery.colorhelpers.js
|
||||||
|
|
||||||
|
|
||||||
Plugin for jQuery for working with colors.
|
Plugin for jQuery for working with colors.
|
||||||
|
|
||||||
Version 1.1.
|
Version 1.1.
|
||||||
|
|
||||||
Inspiration from jQuery color animation plugin by John Resig.
|
Inspiration from jQuery color animation plugin by John Resig.
|
||||||
|
|
||||||
Released under the MIT license by Ole Laursen, October 2009.
|
Released under the MIT license by Ole Laursen, October 2009.
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
# pre-commit
|
# pre-commit
|
||||||
|
|
||||||
We run [pre-commit](https://pre-commit.com/) with
|
We run [pre-commit](https://pre-commit.com/) with
|
||||||
[GitHub Actions](https://github.com/apache/cloudstack/blob/main/.github/workflows/linter.yml) so installation on your
|
[GitHub Actions](https://github.com/apache/cloudstack/blob/main/.github/workflows/pre-commit.yml) so installation on your
|
||||||
local machine is currently optional.
|
local machine is currently optional.
|
||||||
|
|
||||||
The `pre-commit` [configuration file](https://github.com/apache/cloudstack/blob/main/.pre-commit-config.yaml)
|
The `pre-commit` [configuration file](https://github.com/apache/cloudstack/blob/main/.pre-commit-config.yaml)
|
||||||
18
README.md
18
README.md
|
|
@ -31,6 +31,24 @@
|
||||||
|
|
||||||
[](https://cloudstack.apache.org/)
|
[](https://cloudstack.apache.org/)
|
||||||
|
|
||||||
|
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
||||||
|
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
||||||
|
|
||||||
|
- [Who Uses CloudStack?](#who-uses-cloudstack)
|
||||||
|
- [Demo](#demo)
|
||||||
|
- [Getting Started](#getting-started)
|
||||||
|
- [Getting Source Repository](#getting-source-repository)
|
||||||
|
- [Documentation](#documentation)
|
||||||
|
- [News and Events](#news-and-events)
|
||||||
|
- [Getting Involved and Contributing](#getting-involved-and-contributing)
|
||||||
|
- [Reporting Security Vulnerabilities](#reporting-security-vulnerabilities)
|
||||||
|
- [License](#license)
|
||||||
|
- [Notice of Cryptographic Software](#notice-of-cryptographic-software)
|
||||||
|
- [Star History](#star-history)
|
||||||
|
- [Contributors](#contributors)
|
||||||
|
|
||||||
|
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
||||||
|
|
||||||
Apache CloudStack is open source software designed to deploy and manage large
|
Apache CloudStack is open source software designed to deploy and manage large
|
||||||
networks of virtual machines, as a highly available, highly scalable
|
networks of virtual machines, as a highly available, highly scalable
|
||||||
Infrastructure as a Service (IaaS) cloud computing platform. CloudStack is used
|
Infrastructure as a Service (IaaS) cloud computing platform. CloudStack is used
|
||||||
|
|
|
||||||
|
|
@ -457,3 +457,18 @@ iscsi.session.cleanup.enabled=false
|
||||||
|
|
||||||
# Instance conversion VIRT_V2V_TMPDIR env var
|
# Instance conversion VIRT_V2V_TMPDIR env var
|
||||||
#convert.instance.env.virtv2v.tmpdir=
|
#convert.instance.env.virtv2v.tmpdir=
|
||||||
|
|
||||||
|
# Time, in seconds, to wait before retrying to rebase during the incremental snapshot process.
|
||||||
|
# incremental.snapshot.retry.rebase.wait=60
|
||||||
|
|
||||||
|
# Path to the VDDK library directory for VMware to KVM conversion via VDDK,
|
||||||
|
# passed to virt-v2v as -io vddk-libdir=<path>
|
||||||
|
#vddk.lib.dir=
|
||||||
|
|
||||||
|
# Ordered VDDK transport preference for VMware to KVM conversion via VDDK, passed as
|
||||||
|
# -io vddk-transports=<value> to virt-v2v. Example: nbd:nbdssl
|
||||||
|
#vddk.transports=
|
||||||
|
|
||||||
|
# Optional vCenter SHA1 thumbprint for VMware to KVM conversion via VDDK, passed as
|
||||||
|
# -io vddk-thumbprint=<value>. If unset, CloudStack computes it on the KVM host via openssl.
|
||||||
|
#vddk.thumbprint=
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
# Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
# or more contributor license agreements. See the NOTICE file
|
||||||
|
# distributed with this work for additional information
|
||||||
|
# regarding copyright ownership. The ASF licenses this file
|
||||||
|
# to you under the Apache License, Version 2.0 (the
|
||||||
|
# "License"); you may not use this file except in compliance
|
||||||
|
# with the License. You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing,
|
||||||
|
# software distributed under the License is distributed on an
|
||||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
# KIND, either express or implied. See the License for the
|
||||||
|
# specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
# Configuration file for UEFI
|
||||||
|
|
||||||
|
guest.nvram.template.legacy=@GUESTNVRAMTEMPLATELEGACY@
|
||||||
|
guest.loader.legacy=@GUESTLOADERLEGACY@
|
||||||
|
guest.nvram.template.secure=@GUESTNVRAMTEMPLATESECURE@
|
||||||
|
guest.loader.secure=@GUESTLOADERSECURE@
|
||||||
|
guest.nvram.path=@GUESTNVRAMPATH@
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.apache.cloudstack</groupId>
|
<groupId>org.apache.cloudstack</groupId>
|
||||||
<artifactId>cloudstack</artifactId>
|
<artifactId>cloudstack</artifactId>
|
||||||
<version>4.22.0.1</version>
|
<version>4.23.0.0-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
||||||
|
|
@ -1322,7 +1322,6 @@ public class Agent implements HandlerFactory, IAgentControl, AgentStatusUpdater
|
||||||
processResponse((Response)request, task.getLink());
|
processResponse((Response)request, task.getLink());
|
||||||
} else {
|
} else {
|
||||||
//put the requests from mgt server into another thread pool, as the request may take a longer time to finish. Don't block the NIO main thread pool
|
//put the requests from mgt server into another thread pool, as the request may take a longer time to finish. Don't block the NIO main thread pool
|
||||||
//processRequest(request, task.getLink());
|
|
||||||
requestHandler.submit(new AgentRequestHandler(getType(), getLink(), request));
|
requestHandler.submit(new AgentRequestHandler(getType(), getLink(), request));
|
||||||
}
|
}
|
||||||
} catch (final ClassNotFoundException e) {
|
} catch (final ClassNotFoundException e) {
|
||||||
|
|
@ -1332,13 +1331,14 @@ public class Agent implements HandlerFactory, IAgentControl, AgentStatusUpdater
|
||||||
}
|
}
|
||||||
} else if (task.getType() == Task.Type.DISCONNECT) {
|
} else if (task.getType() == Task.Type.DISCONNECT) {
|
||||||
try {
|
try {
|
||||||
// an issue has been found if reconnect immediately after disconnecting. please refer to https://github.com/apache/cloudstack/issues/8517
|
// an issue has been found if reconnect immediately after disconnecting.
|
||||||
// wait 5 seconds before reconnecting
|
// wait 5 seconds before reconnecting
|
||||||
|
logger.debug("Wait for 5 secs before reconnecting, disconnect task - {}", () -> getLinkLog(task.getLink()));
|
||||||
Thread.sleep(5000);
|
Thread.sleep(5000);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
}
|
}
|
||||||
shell.setConnectionTransfer(false);
|
shell.setConnectionTransfer(false);
|
||||||
logger.debug("Executing disconnect task - {}", () -> getLinkLog(task.getLink()));
|
logger.debug("Executing disconnect task - {} and reconnecting", () -> getLinkLog(task.getLink()));
|
||||||
reconnect(task.getLink());
|
reconnect(task.getLink());
|
||||||
} else if (task.getType() == Task.Type.OTHER) {
|
} else if (task.getType() == Task.Type.OTHER) {
|
||||||
processOtherTask(task);
|
processOtherTask(task);
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ public class AgentProperties{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Local storage path.<br>
|
* Local storage path.<br>
|
||||||
* This property allows multiple values to be entered in a single String. The differente values must be separated by commas.<br>
|
* This property allows multiple values to be entered in a single String. The different values must be separated by commas.<br>
|
||||||
* Data type: String.<br>
|
* Data type: String.<br>
|
||||||
* Default value: <code>/var/lib/libvirt/images/</code>
|
* Default value: <code>/var/lib/libvirt/images/</code>
|
||||||
*/
|
*/
|
||||||
|
|
@ -134,7 +134,7 @@ public class AgentProperties{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MANDATORY: The UUID for the local storage pool.<br>
|
* MANDATORY: The UUID for the local storage pool.<br>
|
||||||
* This property allows multiple values to be entered in a single String. The differente values must be separated by commas.<br>
|
* This property allows multiple values to be entered in a single String. The different values must be separated by commas.<br>
|
||||||
* Data type: String.<br>
|
* Data type: String.<br>
|
||||||
* Default value: <code>null</code>
|
* Default value: <code>null</code>
|
||||||
*/
|
*/
|
||||||
|
|
@ -808,6 +808,30 @@ public class AgentProperties{
|
||||||
*/
|
*/
|
||||||
public static final Property<String> CONVERT_ENV_VIRTV2V_TMPDIR = new Property<>("convert.instance.env.virtv2v.tmpdir", null, String.class);
|
public static final Property<String> CONVERT_ENV_VIRTV2V_TMPDIR = new Property<>("convert.instance.env.virtv2v.tmpdir", null, String.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Path to the VDDK library directory on the KVM conversion host, used when converting VMs from VMware to KVM via VDDK.
|
||||||
|
* This directory is passed to virt-v2v as <code>-io vddk-libdir=<path></code>.
|
||||||
|
* Data type: String.<br>
|
||||||
|
* Default value: <code>null</code>
|
||||||
|
*/
|
||||||
|
public static final Property<String> VDDK_LIB_DIR = new Property<>("vddk.lib.dir", null, String.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ordered list of VDDK transports for virt-v2v, passed as <code>-io vddk-transports=<value></code>.
|
||||||
|
* Example: <code>nbd:nbdssl</code>.
|
||||||
|
* Data type: String.<br>
|
||||||
|
* Default value: <code>null</code>
|
||||||
|
*/
|
||||||
|
public static final Property<String> VDDK_TRANSPORTS = new Property<>("vddk.transports", null, String.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vCenter TLS certificate thumbprint used by virt-v2v VDDK mode, passed as <code>-io vddk-thumbprint=<value></code>.
|
||||||
|
* If unset, the KVM host computes it at runtime from the vCenter endpoint.
|
||||||
|
* Data type: String.<br>
|
||||||
|
* Default value: <code>null</code>
|
||||||
|
*/
|
||||||
|
public static final Property<String> VDDK_THUMBPRINT = new Property<>("vddk.thumbprint", null, String.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BGP controll CIDR
|
* BGP controll CIDR
|
||||||
* Data type: String.<br>
|
* Data type: String.<br>
|
||||||
|
|
@ -885,6 +909,11 @@ public class AgentProperties{
|
||||||
*/
|
*/
|
||||||
public static final Property<Boolean> CREATE_FULL_CLONE = new Property<>("create.full.clone", false);
|
public static final Property<Boolean> CREATE_FULL_CLONE = new Property<>("create.full.clone", false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Time, in seconds, to wait before retrying to rebase during the incremental snapshot process.
|
||||||
|
* */
|
||||||
|
public static final Property<Integer> INCREMENTAL_SNAPSHOT_RETRY_REBASE_WAIT = new Property<>("incremental.snapshot.retry.rebase.wait", 60);
|
||||||
|
|
||||||
|
|
||||||
public static class Property <T>{
|
public static class Property <T>{
|
||||||
private String name;
|
private String name;
|
||||||
|
|
|
||||||
|
|
@ -175,12 +175,12 @@ public class ConsoleProxyResource extends ServerResourceBase implements ServerRe
|
||||||
try {
|
try {
|
||||||
is.close();
|
is.close();
|
||||||
} catch (final IOException e) {
|
} catch (final IOException e) {
|
||||||
logger.warn("Exception when closing , console proxy address : {}", proxyManagementIp);
|
logger.warn("Exception when closing , console proxy address: {}", proxyManagementIp);
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (final IOException e) {
|
} catch (final IOException e) {
|
||||||
logger.warn("Unable to open console proxy command port url, console proxy address : {}", proxyManagementIp);
|
logger.warn("Unable to open console proxy command port url, console proxy address: {}", proxyManagementIp);
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -331,7 +331,7 @@ public class ConsoleProxyResource extends ServerResourceBase implements ServerRe
|
||||||
final Object resource = this;
|
final Object resource = this;
|
||||||
logger.info("Building class loader for com.cloud.consoleproxy.ConsoleProxy");
|
logger.info("Building class loader for com.cloud.consoleproxy.ConsoleProxy");
|
||||||
if (consoleProxyMain == null) {
|
if (consoleProxyMain == null) {
|
||||||
logger.info("Running com.cloud.consoleproxy.ConsoleProxy with encryptor password={}", encryptorPassword);
|
logger.info("Running com.cloud.consoleproxy.ConsoleProxy");
|
||||||
consoleProxyMain = new Thread(new ManagedContextRunnable() {
|
consoleProxyMain = new Thread(new ManagedContextRunnable() {
|
||||||
@Override
|
@Override
|
||||||
protected void runInContext() {
|
protected void runInContext() {
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.apache.cloudstack</groupId>
|
<groupId>org.apache.cloudstack</groupId>
|
||||||
<artifactId>cloudstack</artifactId>
|
<artifactId>cloudstack</artifactId>
|
||||||
<version>4.22.0.1</version>
|
<version>4.23.0.0-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
||||||
|
|
@ -119,8 +119,7 @@ public class OVFHelper {
|
||||||
boolean password = StringUtils.isNotBlank(passStr) && passStr.equalsIgnoreCase("true");
|
boolean password = StringUtils.isNotBlank(passStr) && passStr.equalsIgnoreCase("true");
|
||||||
String label = ovfParser.getChildNodeValue(node, "Label");
|
String label = ovfParser.getChildNodeValue(node, "Label");
|
||||||
String description = ovfParser.getChildNodeValue(node, "Description");
|
String description = ovfParser.getChildNodeValue(node, "Description");
|
||||||
logger.debug("Creating OVF property index " + index + (category == null ? "" : " for category " + category)
|
logger.debug("Creating OVF property index {} {} with key = {}", index, (category == null ? "" : " for category " + category), key);
|
||||||
+ " with key = " + key);
|
|
||||||
return new OVFPropertyTO(key, type, value, qualifiers, userConfigurable,
|
return new OVFPropertyTO(key, type, value, qualifiers, userConfigurable,
|
||||||
label, description, password, index, category);
|
label, description, password, index, category);
|
||||||
}
|
}
|
||||||
|
|
@ -152,7 +151,7 @@ public class OVFHelper {
|
||||||
if (child.getNodeName().equalsIgnoreCase("Category") ||
|
if (child.getNodeName().equalsIgnoreCase("Category") ||
|
||||||
child.getNodeName().endsWith(":Category")) {
|
child.getNodeName().endsWith(":Category")) {
|
||||||
lastCategoryFound = child.getTextContent();
|
lastCategoryFound = child.getTextContent();
|
||||||
logger.info("Category found " + lastCategoryFound);
|
logger.info("Category found {}", lastCategoryFound);
|
||||||
} else if (child.getNodeName().equalsIgnoreCase("Property") ||
|
} else if (child.getNodeName().equalsIgnoreCase("Property") ||
|
||||||
child.getNodeName().endsWith(":Property")) {
|
child.getNodeName().endsWith(":Property")) {
|
||||||
OVFPropertyTO prop = createOVFPropertyFromNode(child, propertyIndex, lastCategoryFound);
|
OVFPropertyTO prop = createOVFPropertyFromNode(child, propertyIndex, lastCategoryFound);
|
||||||
|
|
@ -250,13 +249,13 @@ public class OVFHelper {
|
||||||
int diskNumber = 0;
|
int diskNumber = 0;
|
||||||
for (OVFVirtualHardwareItemTO diskItem : diskHardwareItems) {
|
for (OVFVirtualHardwareItemTO diskItem : diskHardwareItems) {
|
||||||
if (StringUtils.isBlank(diskItem.getHostResource())) {
|
if (StringUtils.isBlank(diskItem.getHostResource())) {
|
||||||
logger.error("Missing disk information for hardware item " + diskItem.getElementName() + " " + diskItem.getInstanceId());
|
logger.error("Missing disk information for hardware item {} {}", diskItem.getElementName(), diskItem.getInstanceId());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
String diskId = extractDiskIdFromDiskHostResource(diskItem.getHostResource());
|
String diskId = extractDiskIdFromDiskHostResource(diskItem.getHostResource());
|
||||||
OVFDisk diskDefinition = getDiskDefinitionFromDiskId(diskId, disks);
|
OVFDisk diskDefinition = getDiskDefinitionFromDiskId(diskId, disks);
|
||||||
if (diskDefinition == null) {
|
if (diskDefinition == null) {
|
||||||
logger.error("Missing disk definition for disk ID " + diskId);
|
logger.error("Missing disk definition for disk ID {}", diskId);
|
||||||
}
|
}
|
||||||
OVFFile fileDefinition = getFileDefinitionFromDiskDefinition(diskDefinition._fileRef, files);
|
OVFFile fileDefinition = getFileDefinitionFromDiskDefinition(diskDefinition._fileRef, files);
|
||||||
DatadiskTO datadiskTO = generateDiskTO(fileDefinition, diskDefinition, ovfParentPath, diskNumber, diskItem);
|
DatadiskTO datadiskTO = generateDiskTO(fileDefinition, diskDefinition, ovfParentPath, diskNumber, diskItem);
|
||||||
|
|
@ -278,8 +277,8 @@ public class OVFHelper {
|
||||||
if (StringUtils.isNotBlank(path)) {
|
if (StringUtils.isNotBlank(path)) {
|
||||||
File f = new File(path);
|
File f = new File(path);
|
||||||
if (!f.exists() || f.isDirectory()) {
|
if (!f.exists() || f.isDirectory()) {
|
||||||
logger.error("One of the attached disk or iso does not exists " + path);
|
logger.error("One of the attached disk or ISOs does not exists {}", path);
|
||||||
throw new InternalErrorException("One of the attached disk or iso as stated on OVF does not exists " + path);
|
throw new InternalErrorException("One of the attached disk or ISOs as stated on OVF does not exists " + path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Long capacity = disk != null ? disk._capacity : file._size;
|
Long capacity = disk != null ? disk._capacity : file._size;
|
||||||
|
|
@ -334,9 +333,7 @@ public class OVFHelper {
|
||||||
od._controller = getControllerType(items, od._diskId);
|
od._controller = getControllerType(items, od._diskId);
|
||||||
vd.add(od);
|
vd.add(od);
|
||||||
}
|
}
|
||||||
if (logger.isTraceEnabled()) {
|
logger.trace("Found {} disk definitions", vd.size());
|
||||||
logger.trace(String.format("found %d disk definitions",vd.size()));
|
|
||||||
}
|
|
||||||
return vd;
|
return vd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -366,9 +363,7 @@ public class OVFHelper {
|
||||||
vf.add(of);
|
vf.add(of);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (logger.isTraceEnabled()) {
|
logger.trace("Found {} file definitions in {}", vf.size(), ovfFile.getPath());
|
||||||
logger.trace(String.format("found %d file definitions in %s",vf.size(), ovfFile.getPath()));
|
|
||||||
}
|
|
||||||
return vf;
|
return vf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -506,7 +501,7 @@ public class OVFHelper {
|
||||||
outfile.write(writer.toString());
|
outfile.write(writer.toString());
|
||||||
outfile.close();
|
outfile.close();
|
||||||
} catch (IOException | TransformerException e) {
|
} catch (IOException | TransformerException e) {
|
||||||
logger.info("Unexpected exception caught while rewriting OVF:" + e.getMessage(), e);
|
logger.info("Unexpected exception caught while rewriting OVF: {}", e.getMessage(), e);
|
||||||
throw new CloudRuntimeException(e);
|
throw new CloudRuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -522,9 +517,7 @@ public class OVFHelper {
|
||||||
|
|
||||||
public List<OVFNetworkTO> getNetPrerequisitesFromDocument(Document doc) throws InternalErrorException {
|
public List<OVFNetworkTO> getNetPrerequisitesFromDocument(Document doc) throws InternalErrorException {
|
||||||
if (doc == null) {
|
if (doc == null) {
|
||||||
if (logger.isTraceEnabled()) {
|
logger.trace("No document to parse; returning no prerequisite networks");
|
||||||
logger.trace("no document to parse; returning no prerequisite networks");
|
|
||||||
}
|
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -540,9 +533,7 @@ public class OVFHelper {
|
||||||
private void matchNicsToNets(Map<String, OVFNetworkTO> nets, Node systemElement) {
|
private void matchNicsToNets(Map<String, OVFNetworkTO> nets, Node systemElement) {
|
||||||
final DocumentTraversal traversal = (DocumentTraversal) systemElement;
|
final DocumentTraversal traversal = (DocumentTraversal) systemElement;
|
||||||
final NodeIterator iterator = traversal.createNodeIterator(systemElement, NodeFilter.SHOW_ELEMENT, null, true);
|
final NodeIterator iterator = traversal.createNodeIterator(systemElement, NodeFilter.SHOW_ELEMENT, null, true);
|
||||||
if (logger.isTraceEnabled()) {
|
logger.trace("Starting out with {} network-prerequisites, parsing hardware", nets.size());
|
||||||
logger.trace(String.format("starting out with %d network-prerequisites, parsing hardware",nets.size()));
|
|
||||||
}
|
|
||||||
int nicCount = 0;
|
int nicCount = 0;
|
||||||
for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) {
|
for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) {
|
||||||
final Element e = (Element) n;
|
final Element e = (Element) n;
|
||||||
|
|
@ -550,9 +541,7 @@ public class OVFHelper {
|
||||||
nicCount++;
|
nicCount++;
|
||||||
String name = e.getTextContent(); // should be in our nets
|
String name = e.getTextContent(); // should be in our nets
|
||||||
if(nets.get(name) == null) {
|
if(nets.get(name) == null) {
|
||||||
if(logger.isInfoEnabled()) {
|
logger.info("Found a NIC definition without a Network definition by name {}, adding it to the list.", name);
|
||||||
logger.info(String.format("found a nic definition without a network definition byname %s, adding it to the list.", name));
|
|
||||||
}
|
|
||||||
nets.put(name, new OVFNetworkTO());
|
nets.put(name, new OVFNetworkTO());
|
||||||
}
|
}
|
||||||
OVFNetworkTO thisNet = nets.get(name);
|
OVFNetworkTO thisNet = nets.get(name);
|
||||||
|
|
@ -561,9 +550,7 @@ public class OVFHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (logger.isTraceEnabled()) {
|
logger.trace("Ending up with {} network-prerequisites, parsed {} nics", nets.size(), nicCount);
|
||||||
logger.trace(String.format("ending up with %d network-prerequisites, parsed %d nics", nets.size(), nicCount));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -585,7 +572,7 @@ public class OVFHelper {
|
||||||
int addressOnParent = Integer.parseInt(addressOnParentStr);
|
int addressOnParent = Integer.parseInt(addressOnParentStr);
|
||||||
nic.setAddressOnParent(addressOnParent);
|
nic.setAddressOnParent(addressOnParent);
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
logger.warn("Encountered element of type \"AddressOnParent\", that could not be parse to an integer number: " + addressOnParentStr);
|
logger.warn("Encountered element of type \"AddressOnParent\", that could not be parse to an integer number: {}", addressOnParentStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean automaticAllocation = StringUtils.isNotBlank(automaticAllocationStr) && Boolean.parseBoolean(automaticAllocationStr);
|
boolean automaticAllocation = StringUtils.isNotBlank(automaticAllocationStr) && Boolean.parseBoolean(automaticAllocationStr);
|
||||||
|
|
@ -597,7 +584,7 @@ public class OVFHelper {
|
||||||
int instanceId = Integer.parseInt(instanceIdStr);
|
int instanceId = Integer.parseInt(instanceIdStr);
|
||||||
nic.setInstanceID(instanceId);
|
nic.setInstanceID(instanceId);
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
logger.warn("Encountered element of type \"InstanceID\", that could not be parse to an integer number: " + instanceIdStr);
|
logger.warn("Encountered element of type \"InstanceID\", that could not be parse to an integer number: {}", instanceIdStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
nic.setResourceSubType(resourceSubType);
|
nic.setResourceSubType(resourceSubType);
|
||||||
|
|
@ -630,9 +617,7 @@ public class OVFHelper {
|
||||||
|
|
||||||
nets.put(networkName,network);
|
nets.put(networkName,network);
|
||||||
}
|
}
|
||||||
if (logger.isTraceEnabled()) {
|
logger.trace("Found {} Networks in Template", nets.size());
|
||||||
logger.trace(String.format("found %d networks in template", nets.size()));
|
|
||||||
}
|
|
||||||
return nets;
|
return nets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -771,7 +756,7 @@ public class OVFHelper {
|
||||||
try {
|
try {
|
||||||
return Long.parseLong(value);
|
return Long.parseLong(value);
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
logger.debug("Could not parse the value: " + value + ", ignoring it");
|
logger.debug("Could not parse the value: {}, ignoring it", value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -782,7 +767,7 @@ public class OVFHelper {
|
||||||
try {
|
try {
|
||||||
return Integer.parseInt(value);
|
return Integer.parseInt(value);
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
logger.debug("Could not parse the value: " + value + ", ignoring it");
|
logger.debug("Could not parse the value: {}, ignoring it", value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -820,7 +805,7 @@ public class OVFHelper {
|
||||||
try {
|
try {
|
||||||
compressedLicense = compressOVFEula(eulaLicense);
|
compressedLicense = compressOVFEula(eulaLicense);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.error("Could not compress the license for info " + eulaInfo);
|
logger.error("Could not compress the license for info {}", eulaInfo);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
OVFEulaSectionTO eula = new OVFEulaSectionTO(eulaInfo, compressedLicense, eulaIndex);
|
OVFEulaSectionTO eula = new OVFEulaSectionTO(eulaInfo, compressedLicense, eulaIndex);
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ public class OVFParser {
|
||||||
documentBuilderFactory.setNamespaceAware(true);
|
documentBuilderFactory.setNamespaceAware(true);
|
||||||
documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||||
} catch (ParserConfigurationException e) {
|
} catch (ParserConfigurationException e) {
|
||||||
logger.error("Cannot start the OVF parser: " + e.getMessage(), e);
|
logger.error("Cannot start the OVF parser: {}", e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -70,7 +70,7 @@ public class OVFParser {
|
||||||
try {
|
try {
|
||||||
return documentBuilder.parse(new File(ovfFilePath));
|
return documentBuilder.parse(new File(ovfFilePath));
|
||||||
} catch (SAXException | IOException e) {
|
} catch (SAXException | IOException e) {
|
||||||
logger.error("Error parsing " + ovfFilePath + " " + e.getMessage(), e);
|
logger.error("Error parsing {} {}", ovfFilePath, e.getMessage(), e);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ public class NicTO extends NetworkTO {
|
||||||
boolean dpdkEnabled;
|
boolean dpdkEnabled;
|
||||||
Integer mtu;
|
Integer mtu;
|
||||||
Long networkId;
|
Long networkId;
|
||||||
|
boolean enabled;
|
||||||
|
|
||||||
String networkSegmentName;
|
String networkSegmentName;
|
||||||
|
|
||||||
|
|
@ -154,4 +155,12 @@ public class NicTO extends NetworkTO {
|
||||||
public void setNetworkSegmentName(String networkSegmentName) {
|
public void setNetworkSegmentName(String networkSegmentName) {
|
||||||
this.networkSegmentName = networkSegmentName;
|
this.networkSegmentName = networkSegmentName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnabled(boolean enabled) {
|
||||||
|
this.enabled = enabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,13 +36,17 @@ public class RemoteInstanceTO implements Serializable {
|
||||||
private String vcenterPassword;
|
private String vcenterPassword;
|
||||||
private String vcenterHost;
|
private String vcenterHost;
|
||||||
private String datacenterName;
|
private String datacenterName;
|
||||||
|
private String clusterName;
|
||||||
|
private String hostName;
|
||||||
|
|
||||||
public RemoteInstanceTO() {
|
public RemoteInstanceTO() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public RemoteInstanceTO(String instanceName) {
|
public RemoteInstanceTO(String instanceName, String clusterName, String hostName) {
|
||||||
this.hypervisorType = Hypervisor.HypervisorType.VMware;
|
this.hypervisorType = Hypervisor.HypervisorType.VMware;
|
||||||
this.instanceName = instanceName;
|
this.instanceName = instanceName;
|
||||||
|
this.clusterName = clusterName;
|
||||||
|
this.hostName = hostName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RemoteInstanceTO(String instanceName, String instancePath, String vcenterHost, String vcenterUsername, String vcenterPassword, String datacenterName) {
|
public RemoteInstanceTO(String instanceName, String instancePath, String vcenterHost, String vcenterUsername, String vcenterPassword, String datacenterName) {
|
||||||
|
|
@ -55,6 +59,12 @@ public class RemoteInstanceTO implements Serializable {
|
||||||
this.datacenterName = datacenterName;
|
this.datacenterName = datacenterName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RemoteInstanceTO(String instanceName, String instancePath, String vcenterHost, String vcenterUsername, String vcenterPassword, String datacenterName, String clusterName, String hostName) {
|
||||||
|
this(instanceName, instancePath, vcenterHost, vcenterUsername, vcenterPassword, datacenterName);
|
||||||
|
this.clusterName = clusterName;
|
||||||
|
this.hostName = hostName;
|
||||||
|
}
|
||||||
|
|
||||||
public Hypervisor.HypervisorType getHypervisorType() {
|
public Hypervisor.HypervisorType getHypervisorType() {
|
||||||
return this.hypervisorType;
|
return this.hypervisorType;
|
||||||
}
|
}
|
||||||
|
|
@ -82,4 +92,12 @@ public class RemoteInstanceTO implements Serializable {
|
||||||
public String getDatacenterName() {
|
public String getDatacenterName() {
|
||||||
return datacenterName;
|
return datacenterName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getClusterName() {
|
||||||
|
return clusterName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHostName() {
|
||||||
|
return hostName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,182 @@
|
||||||
|
// Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
// or more contributor license agreements. See the NOTICE file
|
||||||
|
// distributed with this work for additional information
|
||||||
|
// regarding copyright ownership. The ASF licenses this file
|
||||||
|
// to you under the Apache License, Version 2.0 (the
|
||||||
|
// "License"); you may not use this file except in compliance
|
||||||
|
// with the License. You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing,
|
||||||
|
// software distributed under the License is distributed on an
|
||||||
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
// KIND, either express or implied. See the License for the
|
||||||
|
// specific language governing permissions and limitations
|
||||||
|
// under the License.
|
||||||
|
package com.cloud.agent.api.to;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class VirtualMachineMetadataTO {
|
||||||
|
// VM details
|
||||||
|
private final String name;
|
||||||
|
private final String internalName;
|
||||||
|
private final String displayName;
|
||||||
|
private final String instanceUuid;
|
||||||
|
private final Integer cpuCores;
|
||||||
|
private final Integer memory;
|
||||||
|
private final Long created;
|
||||||
|
private final Long started;
|
||||||
|
|
||||||
|
// Owner details
|
||||||
|
private final String ownerDomainUuid;
|
||||||
|
private final String ownerDomainName;
|
||||||
|
private final String ownerAccountUuid;
|
||||||
|
private final String ownerAccountName;
|
||||||
|
private final String ownerProjectUuid;
|
||||||
|
private final String ownerProjectName;
|
||||||
|
|
||||||
|
// Host and service offering
|
||||||
|
private final String serviceOfferingName;
|
||||||
|
private final List<String> serviceOfferingHostTags;
|
||||||
|
|
||||||
|
// zone, pod, and cluster details
|
||||||
|
private final String zoneName;
|
||||||
|
private final String zoneUuid;
|
||||||
|
private final String podName;
|
||||||
|
private final String podUuid;
|
||||||
|
private final String clusterName;
|
||||||
|
private final String clusterUuid;
|
||||||
|
|
||||||
|
// resource tags
|
||||||
|
private final Map<String, String> resourceTags;
|
||||||
|
|
||||||
|
public VirtualMachineMetadataTO(
|
||||||
|
String name, String internalName, String displayName, String instanceUuid, Integer cpuCores, Integer memory, Long created, Long started,
|
||||||
|
String ownerDomainUuid, String ownerDomainName, String ownerAccountUuid, String ownerAccountName, String ownerProjectUuid, String ownerProjectName,
|
||||||
|
String serviceOfferingName, List<String> serviceOfferingHostTags,
|
||||||
|
String zoneName, String zoneUuid, String podName, String podUuid, String clusterName, String clusterUuid, Map<String, String> resourceTags) {
|
||||||
|
/*
|
||||||
|
* Something failed in the metadata shall not be a fatal error, the VM can still be started
|
||||||
|
* Thus, the unknown fields just get an explicit "unknown" value so it can be fixed in case
|
||||||
|
* there are bugs on some execution paths.
|
||||||
|
* */
|
||||||
|
|
||||||
|
this.name = (name != null) ? name : "unknown";
|
||||||
|
this.internalName = (internalName != null) ? internalName : "unknown";
|
||||||
|
this.displayName = (displayName != null) ? displayName : "unknown";
|
||||||
|
this.instanceUuid = (instanceUuid != null) ? instanceUuid : "unknown";
|
||||||
|
this.cpuCores = (cpuCores != null) ? cpuCores : -1;
|
||||||
|
this.memory = (memory != null) ? memory : -1;
|
||||||
|
this.created = (created != null) ? created : 0;
|
||||||
|
this.started = (started != null) ? started : 0;
|
||||||
|
this.ownerDomainUuid = (ownerDomainUuid != null) ? ownerDomainUuid : "unknown";
|
||||||
|
this.ownerDomainName = (ownerDomainName != null) ? ownerDomainName : "unknown";
|
||||||
|
this.ownerAccountUuid = (ownerAccountUuid != null) ? ownerAccountUuid : "unknown";
|
||||||
|
this.ownerAccountName = (ownerAccountName != null) ? ownerAccountName : "unknown";
|
||||||
|
this.ownerProjectUuid = (ownerProjectUuid != null) ? ownerProjectUuid : "unknown";
|
||||||
|
this.ownerProjectName = (ownerProjectName != null) ? ownerProjectName : "unknown";
|
||||||
|
this.serviceOfferingName = (serviceOfferingName != null) ? serviceOfferingName : "unknown";
|
||||||
|
this.serviceOfferingHostTags = (serviceOfferingHostTags != null) ? serviceOfferingHostTags : new ArrayList<>();
|
||||||
|
this.zoneName = (zoneName != null) ? zoneName : "unknown";
|
||||||
|
this.zoneUuid = (zoneUuid != null) ? zoneUuid : "unknown";
|
||||||
|
this.podName = (podName != null) ? podName : "unknown";
|
||||||
|
this.podUuid = (podUuid != null) ? podUuid : "unknown";
|
||||||
|
this.clusterName = (clusterName != null) ? clusterName : "unknown";
|
||||||
|
this.clusterUuid = (clusterUuid != null) ? clusterUuid : "unknown";
|
||||||
|
|
||||||
|
this.resourceTags = (resourceTags != null) ? resourceTags : new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInternalName() {
|
||||||
|
return internalName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisplayName() {
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInstanceUuid() {
|
||||||
|
return instanceUuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCpuCores() {
|
||||||
|
return cpuCores;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getMemory() {
|
||||||
|
return memory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getCreated() { return created; }
|
||||||
|
|
||||||
|
public Long getStarted() {
|
||||||
|
return started;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOwnerDomainUuid() {
|
||||||
|
return ownerDomainUuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOwnerDomainName() {
|
||||||
|
return ownerDomainName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOwnerAccountUuid() {
|
||||||
|
return ownerAccountUuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOwnerAccountName() {
|
||||||
|
return ownerAccountName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOwnerProjectUuid() {
|
||||||
|
return ownerProjectUuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOwnerProjectName() {
|
||||||
|
return ownerProjectName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getserviceOfferingName() {
|
||||||
|
return serviceOfferingName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getserviceOfferingHostTags() {
|
||||||
|
return serviceOfferingHostTags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getZoneName() {
|
||||||
|
return zoneName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getZoneUuid() {
|
||||||
|
return zoneUuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPodName() {
|
||||||
|
return podName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPodUuid() {
|
||||||
|
return podUuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getClusterName() {
|
||||||
|
return clusterName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getClusterUuid() {
|
||||||
|
return clusterUuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getResourceTags() { return resourceTags; }
|
||||||
|
}
|
||||||
|
|
@ -89,6 +89,7 @@ public class VirtualMachineTO {
|
||||||
private DeployAsIsInfoTO deployAsIsInfo;
|
private DeployAsIsInfoTO deployAsIsInfo;
|
||||||
private String metadataManufacturer;
|
private String metadataManufacturer;
|
||||||
private String metadataProductName;
|
private String metadataProductName;
|
||||||
|
private VirtualMachineMetadataTO metadata;
|
||||||
|
|
||||||
public VirtualMachineTO(long id, String instanceName, VirtualMachine.Type type, int cpus, Integer speed, long minRam, long maxRam, BootloaderType bootloader,
|
public VirtualMachineTO(long id, String instanceName, VirtualMachine.Type type, int cpus, Integer speed, long minRam, long maxRam, BootloaderType bootloader,
|
||||||
String os, boolean enableHA, boolean limitCpuUse, String vncPassword) {
|
String os, boolean enableHA, boolean limitCpuUse, String vncPassword) {
|
||||||
|
|
@ -494,6 +495,14 @@ public class VirtualMachineTO {
|
||||||
this.metadataProductName = metadataProductName;
|
this.metadataProductName = metadataProductName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public VirtualMachineMetadataTO getMetadata() {
|
||||||
|
return metadata;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMetadata(VirtualMachineMetadataTO metadata) {
|
||||||
|
this.metadata = metadata;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String.format("VM {id: \"%s\", name: \"%s\", uuid: \"%s\", type: \"%s\"}", id, name, uuid, type);
|
return String.format("VM {id: \"%s\", name: \"%s\", uuid: \"%s\", type: \"%s\"}", id, name, uuid, type);
|
||||||
|
|
|
||||||
|
|
@ -22,19 +22,11 @@ import com.cloud.deploy.DeploymentPlan;
|
||||||
import com.cloud.deploy.DeploymentPlanner.ExcludeList;
|
import com.cloud.deploy.DeploymentPlanner.ExcludeList;
|
||||||
import com.cloud.host.Host;
|
import com.cloud.host.Host;
|
||||||
import com.cloud.host.Host.Type;
|
import com.cloud.host.Host.Type;
|
||||||
import com.cloud.offering.ServiceOffering;
|
|
||||||
import com.cloud.utils.component.Adapter;
|
import com.cloud.utils.component.Adapter;
|
||||||
import com.cloud.vm.VirtualMachine;
|
|
||||||
import com.cloud.vm.VirtualMachineProfile;
|
import com.cloud.vm.VirtualMachineProfile;
|
||||||
|
|
||||||
public interface HostAllocator extends Adapter {
|
public interface HostAllocator extends Adapter {
|
||||||
|
|
||||||
/**
|
|
||||||
* @param UserVm vm
|
|
||||||
* @param ServiceOffering offering
|
|
||||||
**/
|
|
||||||
boolean isVirtualMachineUpgradable(final VirtualMachine vm, final ServiceOffering offering);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines which physical hosts are suitable to
|
* Determines which physical hosts are suitable to
|
||||||
* allocate the guest virtual machines on
|
* allocate the guest virtual machines on
|
||||||
|
|
@ -49,31 +41,6 @@ public interface HostAllocator extends Adapter {
|
||||||
|
|
||||||
public List<Host> allocateTo(VirtualMachineProfile vmProfile, DeploymentPlan plan, Type type, ExcludeList avoid, int returnUpTo);
|
public List<Host> allocateTo(VirtualMachineProfile vmProfile, DeploymentPlan plan, Type type, ExcludeList avoid, int returnUpTo);
|
||||||
|
|
||||||
/**
|
|
||||||
* Determines which physical hosts are suitable to allocate the guest
|
|
||||||
* virtual machines on
|
|
||||||
*
|
|
||||||
* Allocators must set any other hosts not considered for allocation in the
|
|
||||||
* ExcludeList avoid. Thus the avoid set and the list of hosts suitable,
|
|
||||||
* together must cover the entire host set in the cluster.
|
|
||||||
*
|
|
||||||
* @param VirtualMachineProfile
|
|
||||||
* vmProfile
|
|
||||||
* @param DeploymentPlan
|
|
||||||
* plan
|
|
||||||
* @param GuestType
|
|
||||||
* type
|
|
||||||
* @param ExcludeList
|
|
||||||
* avoid
|
|
||||||
* @param int returnUpTo (use -1 to return all possible hosts)
|
|
||||||
* @param boolean considerReservedCapacity (default should be true, set to
|
|
||||||
* false if host capacity calculation should not look at reserved
|
|
||||||
* capacity)
|
|
||||||
* @return List<Host> List of hosts that are suitable for VM allocation
|
|
||||||
**/
|
|
||||||
|
|
||||||
public List<Host> allocateTo(VirtualMachineProfile vmProfile, DeploymentPlan plan, Type type, ExcludeList avoid, int returnUpTo, boolean considerReservedCapacity);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines which physical hosts are suitable to allocate the guest
|
* Determines which physical hosts are suitable to allocate the guest
|
||||||
* virtual machines on
|
* virtual machines on
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,10 @@ public class ListRecurringSnapshotScheduleCmd extends BaseListCmd {
|
||||||
//////////////// API parameters /////////////////////
|
//////////////// API parameters /////////////////////
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
|
|
||||||
@Parameter(name = ApiConstants.SNAPSHOT_POLICY_ID, type = CommandType.LONG, description = "lists recurring snapshots by snapshot policy ID")
|
@Parameter(name = ApiConstants.SNAPSHOT_POLICY_ID, type = CommandType.LONG, description = "Lists recurring Snapshots by Snapshot policy ID")
|
||||||
private Long snapshotPolicyId;
|
private Long snapshotPolicyId;
|
||||||
|
|
||||||
@Parameter(name = ApiConstants.VOLUME_ID, type = CommandType.LONG, required = true, description = "list recurring snapshots by volume ID")
|
@Parameter(name = ApiConstants.VOLUME_ID, type = CommandType.LONG, required = true, description = "List recurring Snapshots by volume ID")
|
||||||
private Long volumeId;
|
private Long volumeId;
|
||||||
|
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
|
|
|
||||||
|
|
@ -24,15 +24,18 @@ import com.cloud.network.Network;
|
||||||
import org.apache.cloudstack.api.ApiConstants;
|
import org.apache.cloudstack.api.ApiConstants;
|
||||||
import org.apache.cloudstack.api.command.admin.config.ResetCfgCmd;
|
import org.apache.cloudstack.api.command.admin.config.ResetCfgCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd;
|
import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd;
|
||||||
|
import org.apache.cloudstack.api.command.admin.network.CloneNetworkOfferingCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.network.CreateGuestNetworkIpv6PrefixCmd;
|
import org.apache.cloudstack.api.command.admin.network.CreateGuestNetworkIpv6PrefixCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.network.CreateManagementNetworkIpRangeCmd;
|
import org.apache.cloudstack.api.command.admin.network.CreateManagementNetworkIpRangeCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.network.CreateNetworkOfferingCmd;
|
|
||||||
import org.apache.cloudstack.api.command.admin.network.DeleteGuestNetworkIpv6PrefixCmd;
|
import org.apache.cloudstack.api.command.admin.network.DeleteGuestNetworkIpv6PrefixCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.network.DeleteManagementNetworkIpRangeCmd;
|
import org.apache.cloudstack.api.command.admin.network.DeleteManagementNetworkIpRangeCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd;
|
import org.apache.cloudstack.api.command.admin.network.DeleteNetworkOfferingCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.network.ListGuestNetworkIpv6PrefixesCmd;
|
import org.apache.cloudstack.api.command.admin.network.ListGuestNetworkIpv6PrefixesCmd;
|
||||||
|
import org.apache.cloudstack.api.command.admin.network.NetworkOfferingBaseCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.network.UpdateNetworkOfferingCmd;
|
import org.apache.cloudstack.api.command.admin.network.UpdateNetworkOfferingCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.network.UpdatePodManagementNetworkIpRangeCmd;
|
import org.apache.cloudstack.api.command.admin.network.UpdatePodManagementNetworkIpRangeCmd;
|
||||||
|
import org.apache.cloudstack.api.command.admin.offering.CloneDiskOfferingCmd;
|
||||||
|
import org.apache.cloudstack.api.command.admin.offering.CloneServiceOfferingCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.offering.CreateDiskOfferingCmd;
|
import org.apache.cloudstack.api.command.admin.offering.CreateDiskOfferingCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.offering.CreateServiceOfferingCmd;
|
import org.apache.cloudstack.api.command.admin.offering.CreateServiceOfferingCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.offering.DeleteDiskOfferingCmd;
|
import org.apache.cloudstack.api.command.admin.offering.DeleteDiskOfferingCmd;
|
||||||
|
|
@ -105,6 +108,33 @@ public interface ConfigurationService {
|
||||||
*/
|
*/
|
||||||
ServiceOffering createServiceOffering(CreateServiceOfferingCmd cmd);
|
ServiceOffering createServiceOffering(CreateServiceOfferingCmd cmd);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clones a service offering with optional parameter overrides
|
||||||
|
*
|
||||||
|
* @param cmd
|
||||||
|
* the command object that specifies the source offering ID and optional parameter overrides
|
||||||
|
* @return the newly created service offering cloned from source, null otherwise
|
||||||
|
*/
|
||||||
|
ServiceOffering cloneServiceOffering(CloneServiceOfferingCmd cmd);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clones a disk offering with optional parameter overrides
|
||||||
|
*
|
||||||
|
* @param cmd
|
||||||
|
* the command object that specifies the source offering ID and optional parameter overrides
|
||||||
|
* @return the newly created disk offering cloned from source, null otherwise
|
||||||
|
*/
|
||||||
|
DiskOffering cloneDiskOffering(CloneDiskOfferingCmd cmd);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clones a network offering with optional parameter overrides
|
||||||
|
*
|
||||||
|
* @param cmd
|
||||||
|
* the command object that specifies the source offering ID and optional parameter overrides
|
||||||
|
* @return the newly created network offering cloned from source, null otherwise
|
||||||
|
*/
|
||||||
|
NetworkOffering cloneNetworkOffering(CloneNetworkOfferingCmd cmd);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates a service offering
|
* Updates a service offering
|
||||||
*
|
*
|
||||||
|
|
@ -282,7 +312,7 @@ public interface ConfigurationService {
|
||||||
|
|
||||||
boolean releasePublicIpRange(ReleasePublicIpRangeCmd cmd);
|
boolean releasePublicIpRange(ReleasePublicIpRangeCmd cmd);
|
||||||
|
|
||||||
NetworkOffering createNetworkOffering(CreateNetworkOfferingCmd cmd);
|
NetworkOffering createNetworkOffering(NetworkOfferingBaseCmd cmd);
|
||||||
|
|
||||||
NetworkOffering updateNetworkOffering(UpdateNetworkOfferingCmd cmd);
|
NetworkOffering updateNetworkOffering(UpdateNetworkOfferingCmd cmd);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,8 @@ public class CPU {
|
||||||
public enum CPUArch {
|
public enum CPUArch {
|
||||||
x86("i686", 32),
|
x86("i686", 32),
|
||||||
amd64("x86_64", 64),
|
amd64("x86_64", 64),
|
||||||
arm64("aarch64", 64);
|
arm64("aarch64", 64),
|
||||||
|
s390x("s390x", 64);
|
||||||
|
|
||||||
private final String type;
|
private final String type;
|
||||||
private final int bits;
|
private final int bits;
|
||||||
|
|
|
||||||
|
|
@ -62,11 +62,11 @@ public interface DeploymentClusterPlanner extends DeploymentPlanner {
|
||||||
"vm.allocation.algorithm",
|
"vm.allocation.algorithm",
|
||||||
"Advanced",
|
"Advanced",
|
||||||
"random",
|
"random",
|
||||||
"Order in which hosts within a cluster will be considered for VM allocation. The value can be 'random', 'firstfit', 'userdispersing', 'userconcentratedpod_random', 'userconcentratedpod_firstfit', or 'firstfitleastconsumed'.",
|
"Order in which hosts within a cluster will be considered for VM allocation. The value can be 'random', 'firstfit', 'userdispersing', or 'firstfitleastconsumed'.",
|
||||||
true,
|
true,
|
||||||
ConfigKey.Scope.Global, null, null, null, null, null,
|
ConfigKey.Scope.Global, null, null, null, null, null,
|
||||||
ConfigKey.Kind.Select,
|
ConfigKey.Kind.Select,
|
||||||
"random,firstfit,userdispersing,userconcentratedpod_random,userconcentratedpod_firstfit,firstfitleastconsumed");
|
"random,firstfit,userdispersing,firstfitleastconsumed");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is called to determine list of possible clusters where a virtual
|
* This is called to determine list of possible clusters where a virtual
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ public interface DeploymentPlanner extends Adapter {
|
||||||
boolean canHandle(VirtualMachineProfile vm, DeploymentPlan plan, ExcludeList avoid);
|
boolean canHandle(VirtualMachineProfile vm, DeploymentPlan plan, ExcludeList avoid);
|
||||||
|
|
||||||
public enum AllocationAlgorithm {
|
public enum AllocationAlgorithm {
|
||||||
random, firstfit, userdispersing, userconcentratedpod_random, userconcentratedpod_firstfit;
|
random, firstfit, userdispersing, firstfitleastconsumed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum PlannerResourceUsage {
|
public enum PlannerResourceUsage {
|
||||||
|
|
|
||||||
|
|
@ -298,8 +298,9 @@ public class EventTypes {
|
||||||
public static final String EVENT_REGISTER_CNI_CONFIG = "REGISTER.CNI.CONFIG";
|
public static final String EVENT_REGISTER_CNI_CONFIG = "REGISTER.CNI.CONFIG";
|
||||||
public static final String EVENT_DELETE_CNI_CONFIG = "DELETE.CNI.CONFIG";
|
public static final String EVENT_DELETE_CNI_CONFIG = "DELETE.CNI.CONFIG";
|
||||||
|
|
||||||
//register for user API and secret keys
|
//user API and secret keys
|
||||||
public static final String EVENT_REGISTER_FOR_SECRET_API_KEY = "REGISTER.USER.KEY";
|
public static final String EVENT_REGISTER_FOR_SECRET_API_KEY = "REGISTER.USER.KEY";
|
||||||
|
public static final String EVENT_DELETE_SECRET_API_KEY = "DELETE.USER.KEY";
|
||||||
public static final String API_KEY_ACCESS_UPDATE = "API.KEY.ACCESS.UPDATE";
|
public static final String API_KEY_ACCESS_UPDATE = "API.KEY.ACCESS.UPDATE";
|
||||||
|
|
||||||
// Template Events
|
// Template Events
|
||||||
|
|
@ -374,11 +375,13 @@ public class EventTypes {
|
||||||
|
|
||||||
// Service Offerings
|
// Service Offerings
|
||||||
public static final String EVENT_SERVICE_OFFERING_CREATE = "SERVICE.OFFERING.CREATE";
|
public static final String EVENT_SERVICE_OFFERING_CREATE = "SERVICE.OFFERING.CREATE";
|
||||||
|
public static final String EVENT_SERVICE_OFFERING_CLONE = "SERVICE.OFFERING.CLONE";
|
||||||
public static final String EVENT_SERVICE_OFFERING_EDIT = "SERVICE.OFFERING.EDIT";
|
public static final String EVENT_SERVICE_OFFERING_EDIT = "SERVICE.OFFERING.EDIT";
|
||||||
public static final String EVENT_SERVICE_OFFERING_DELETE = "SERVICE.OFFERING.DELETE";
|
public static final String EVENT_SERVICE_OFFERING_DELETE = "SERVICE.OFFERING.DELETE";
|
||||||
|
|
||||||
// Disk Offerings
|
// Disk Offerings
|
||||||
public static final String EVENT_DISK_OFFERING_CREATE = "DISK.OFFERING.CREATE";
|
public static final String EVENT_DISK_OFFERING_CREATE = "DISK.OFFERING.CREATE";
|
||||||
|
public static final String EVENT_DISK_OFFERING_CLONE = "DISK.OFFERING.CLONE";
|
||||||
public static final String EVENT_DISK_OFFERING_EDIT = "DISK.OFFERING.EDIT";
|
public static final String EVENT_DISK_OFFERING_EDIT = "DISK.OFFERING.EDIT";
|
||||||
public static final String EVENT_DISK_OFFERING_DELETE = "DISK.OFFERING.DELETE";
|
public static final String EVENT_DISK_OFFERING_DELETE = "DISK.OFFERING.DELETE";
|
||||||
|
|
||||||
|
|
@ -399,6 +402,7 @@ public class EventTypes {
|
||||||
|
|
||||||
// Network offerings
|
// Network offerings
|
||||||
public static final String EVENT_NETWORK_OFFERING_CREATE = "NETWORK.OFFERING.CREATE";
|
public static final String EVENT_NETWORK_OFFERING_CREATE = "NETWORK.OFFERING.CREATE";
|
||||||
|
public static final String EVENT_NETWORK_OFFERING_CLONE = "NETWORK.OFFERING.CLONE";
|
||||||
public static final String EVENT_NETWORK_OFFERING_ASSIGN = "NETWORK.OFFERING.ASSIGN";
|
public static final String EVENT_NETWORK_OFFERING_ASSIGN = "NETWORK.OFFERING.ASSIGN";
|
||||||
public static final String EVENT_NETWORK_OFFERING_EDIT = "NETWORK.OFFERING.EDIT";
|
public static final String EVENT_NETWORK_OFFERING_EDIT = "NETWORK.OFFERING.EDIT";
|
||||||
public static final String EVENT_NETWORK_OFFERING_REMOVE = "NETWORK.OFFERING.REMOVE";
|
public static final String EVENT_NETWORK_OFFERING_REMOVE = "NETWORK.OFFERING.REMOVE";
|
||||||
|
|
@ -503,6 +507,7 @@ public class EventTypes {
|
||||||
public static final String EVENT_S2S_VPN_CUSTOMER_GATEWAY_CREATE = "VPN.S2S.CUSTOMER.GATEWAY.CREATE";
|
public static final String EVENT_S2S_VPN_CUSTOMER_GATEWAY_CREATE = "VPN.S2S.CUSTOMER.GATEWAY.CREATE";
|
||||||
public static final String EVENT_S2S_VPN_CUSTOMER_GATEWAY_DELETE = "VPN.S2S.CUSTOMER.GATEWAY.DELETE";
|
public static final String EVENT_S2S_VPN_CUSTOMER_GATEWAY_DELETE = "VPN.S2S.CUSTOMER.GATEWAY.DELETE";
|
||||||
public static final String EVENT_S2S_VPN_CUSTOMER_GATEWAY_UPDATE = "VPN.S2S.CUSTOMER.GATEWAY.UPDATE";
|
public static final String EVENT_S2S_VPN_CUSTOMER_GATEWAY_UPDATE = "VPN.S2S.CUSTOMER.GATEWAY.UPDATE";
|
||||||
|
public static final String EVENT_S2S_VPN_GATEWAY_OBSOLETE_PARAMS = "VPN.S2S.GATEWAY.OBSOLETE.PARAMS";
|
||||||
public static final String EVENT_S2S_VPN_CONNECTION_CREATE = "VPN.S2S.CONNECTION.CREATE";
|
public static final String EVENT_S2S_VPN_CONNECTION_CREATE = "VPN.S2S.CONNECTION.CREATE";
|
||||||
public static final String EVENT_S2S_VPN_CONNECTION_DELETE = "VPN.S2S.CONNECTION.DELETE";
|
public static final String EVENT_S2S_VPN_CONNECTION_DELETE = "VPN.S2S.CONNECTION.DELETE";
|
||||||
public static final String EVENT_S2S_VPN_CONNECTION_RESET = "VPN.S2S.CONNECTION.RESET";
|
public static final String EVENT_S2S_VPN_CONNECTION_RESET = "VPN.S2S.CONNECTION.RESET";
|
||||||
|
|
@ -582,6 +587,7 @@ public class EventTypes {
|
||||||
|
|
||||||
// Network ACL
|
// Network ACL
|
||||||
public static final String EVENT_NETWORK_ACL_CREATE = "NETWORK.ACL.CREATE";
|
public static final String EVENT_NETWORK_ACL_CREATE = "NETWORK.ACL.CREATE";
|
||||||
|
public static final String EVENT_NETWORK_ACL_IMPORT = "NETWORK.ACL.IMPORT";
|
||||||
public static final String EVENT_NETWORK_ACL_DELETE = "NETWORK.ACL.DELETE";
|
public static final String EVENT_NETWORK_ACL_DELETE = "NETWORK.ACL.DELETE";
|
||||||
public static final String EVENT_NETWORK_ACL_REPLACE = "NETWORK.ACL.REPLACE";
|
public static final String EVENT_NETWORK_ACL_REPLACE = "NETWORK.ACL.REPLACE";
|
||||||
public static final String EVENT_NETWORK_ACL_UPDATE = "NETWORK.ACL.UPDATE";
|
public static final String EVENT_NETWORK_ACL_UPDATE = "NETWORK.ACL.UPDATE";
|
||||||
|
|
@ -596,6 +602,7 @@ public class EventTypes {
|
||||||
|
|
||||||
// VPC offerings
|
// VPC offerings
|
||||||
public static final String EVENT_VPC_OFFERING_CREATE = "VPC.OFFERING.CREATE";
|
public static final String EVENT_VPC_OFFERING_CREATE = "VPC.OFFERING.CREATE";
|
||||||
|
public static final String EVENT_VPC_OFFERING_CLONE = "VPC.OFFERING.CLONE";
|
||||||
public static final String EVENT_VPC_OFFERING_UPDATE = "VPC.OFFERING.UPDATE";
|
public static final String EVENT_VPC_OFFERING_UPDATE = "VPC.OFFERING.UPDATE";
|
||||||
public static final String EVENT_VPC_OFFERING_DELETE = "VPC.OFFERING.DELETE";
|
public static final String EVENT_VPC_OFFERING_DELETE = "VPC.OFFERING.DELETE";
|
||||||
|
|
||||||
|
|
@ -628,6 +635,7 @@ public class EventTypes {
|
||||||
|
|
||||||
// Backup and Recovery events
|
// Backup and Recovery events
|
||||||
public static final String EVENT_VM_BACKUP_IMPORT_OFFERING = "BACKUP.IMPORT.OFFERING";
|
public static final String EVENT_VM_BACKUP_IMPORT_OFFERING = "BACKUP.IMPORT.OFFERING";
|
||||||
|
public static final String EVENT_VM_BACKUP_OFFERING_CLONE = "BACKUP.OFFERING.CLONE";
|
||||||
public static final String EVENT_VM_BACKUP_OFFERING_ASSIGN = "BACKUP.OFFERING.ASSIGN";
|
public static final String EVENT_VM_BACKUP_OFFERING_ASSIGN = "BACKUP.OFFERING.ASSIGN";
|
||||||
public static final String EVENT_VM_BACKUP_OFFERING_REMOVE = "BACKUP.OFFERING.REMOVE";
|
public static final String EVENT_VM_BACKUP_OFFERING_REMOVE = "BACKUP.OFFERING.REMOVE";
|
||||||
public static final String EVENT_VM_BACKUP_CREATE = "BACKUP.CREATE";
|
public static final String EVENT_VM_BACKUP_CREATE = "BACKUP.CREATE";
|
||||||
|
|
@ -1043,11 +1051,13 @@ public class EventTypes {
|
||||||
|
|
||||||
// Service Offerings
|
// Service Offerings
|
||||||
entityEventDetails.put(EVENT_SERVICE_OFFERING_CREATE, ServiceOffering.class);
|
entityEventDetails.put(EVENT_SERVICE_OFFERING_CREATE, ServiceOffering.class);
|
||||||
|
entityEventDetails.put(EVENT_SERVICE_OFFERING_CLONE, ServiceOffering.class);
|
||||||
entityEventDetails.put(EVENT_SERVICE_OFFERING_EDIT, ServiceOffering.class);
|
entityEventDetails.put(EVENT_SERVICE_OFFERING_EDIT, ServiceOffering.class);
|
||||||
entityEventDetails.put(EVENT_SERVICE_OFFERING_DELETE, ServiceOffering.class);
|
entityEventDetails.put(EVENT_SERVICE_OFFERING_DELETE, ServiceOffering.class);
|
||||||
|
|
||||||
// Disk Offerings
|
// Disk Offerings
|
||||||
entityEventDetails.put(EVENT_DISK_OFFERING_CREATE, DiskOffering.class);
|
entityEventDetails.put(EVENT_DISK_OFFERING_CREATE, DiskOffering.class);
|
||||||
|
entityEventDetails.put(EVENT_DISK_OFFERING_CLONE, DiskOffering.class);
|
||||||
entityEventDetails.put(EVENT_DISK_OFFERING_EDIT, DiskOffering.class);
|
entityEventDetails.put(EVENT_DISK_OFFERING_EDIT, DiskOffering.class);
|
||||||
entityEventDetails.put(EVENT_DISK_OFFERING_DELETE, DiskOffering.class);
|
entityEventDetails.put(EVENT_DISK_OFFERING_DELETE, DiskOffering.class);
|
||||||
|
|
||||||
|
|
@ -1068,6 +1078,7 @@ public class EventTypes {
|
||||||
|
|
||||||
// Network offerings
|
// Network offerings
|
||||||
entityEventDetails.put(EVENT_NETWORK_OFFERING_CREATE, NetworkOffering.class);
|
entityEventDetails.put(EVENT_NETWORK_OFFERING_CREATE, NetworkOffering.class);
|
||||||
|
entityEventDetails.put(EVENT_NETWORK_OFFERING_CLONE, NetworkOffering.class);
|
||||||
entityEventDetails.put(EVENT_NETWORK_OFFERING_ASSIGN, NetworkOffering.class);
|
entityEventDetails.put(EVENT_NETWORK_OFFERING_ASSIGN, NetworkOffering.class);
|
||||||
entityEventDetails.put(EVENT_NETWORK_OFFERING_EDIT, NetworkOffering.class);
|
entityEventDetails.put(EVENT_NETWORK_OFFERING_EDIT, NetworkOffering.class);
|
||||||
entityEventDetails.put(EVENT_NETWORK_OFFERING_REMOVE, NetworkOffering.class);
|
entityEventDetails.put(EVENT_NETWORK_OFFERING_REMOVE, NetworkOffering.class);
|
||||||
|
|
@ -1151,6 +1162,7 @@ public class EventTypes {
|
||||||
entityEventDetails.put(EVENT_S2S_VPN_CUSTOMER_GATEWAY_CREATE, Site2SiteCustomerGateway.class);
|
entityEventDetails.put(EVENT_S2S_VPN_CUSTOMER_GATEWAY_CREATE, Site2SiteCustomerGateway.class);
|
||||||
entityEventDetails.put(EVENT_S2S_VPN_CUSTOMER_GATEWAY_DELETE, Site2SiteCustomerGateway.class);
|
entityEventDetails.put(EVENT_S2S_VPN_CUSTOMER_GATEWAY_DELETE, Site2SiteCustomerGateway.class);
|
||||||
entityEventDetails.put(EVENT_S2S_VPN_CUSTOMER_GATEWAY_UPDATE, Site2SiteCustomerGateway.class);
|
entityEventDetails.put(EVENT_S2S_VPN_CUSTOMER_GATEWAY_UPDATE, Site2SiteCustomerGateway.class);
|
||||||
|
entityEventDetails.put(EVENT_S2S_VPN_GATEWAY_OBSOLETE_PARAMS, Site2SiteCustomerGateway.class);
|
||||||
entityEventDetails.put(EVENT_S2S_VPN_CONNECTION_CREATE, Site2SiteVpnConnection.class);
|
entityEventDetails.put(EVENT_S2S_VPN_CONNECTION_CREATE, Site2SiteVpnConnection.class);
|
||||||
entityEventDetails.put(EVENT_S2S_VPN_CONNECTION_DELETE, Site2SiteVpnConnection.class);
|
entityEventDetails.put(EVENT_S2S_VPN_CONNECTION_DELETE, Site2SiteVpnConnection.class);
|
||||||
entityEventDetails.put(EVENT_S2S_VPN_CONNECTION_RESET, Site2SiteVpnConnection.class);
|
entityEventDetails.put(EVENT_S2S_VPN_CONNECTION_RESET, Site2SiteVpnConnection.class);
|
||||||
|
|
|
||||||
|
|
@ -26,17 +26,19 @@ public interface Investigator extends Adapter {
|
||||||
* Returns if the vm is still alive.
|
* Returns if the vm is still alive.
|
||||||
*
|
*
|
||||||
* @param vm to work on.
|
* @param vm to work on.
|
||||||
|
* @return true if vm is alive, otherwise false
|
||||||
*/
|
*/
|
||||||
public boolean isVmAlive(VirtualMachine vm, Host host) throws UnknownVM;
|
boolean isVmAlive(VirtualMachine vm, Host host) throws UnknownVM;
|
||||||
|
|
||||||
public Status isAgentAlive(Host agent);
|
/**
|
||||||
|
* Returns the agent status of the host.
|
||||||
|
*
|
||||||
|
* @param host
|
||||||
|
* @return status of the host agent
|
||||||
|
*/
|
||||||
|
Status getHostAgentStatus(Host host);
|
||||||
|
|
||||||
class UnknownVM extends Exception {
|
class UnknownVM extends Exception {
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,8 +57,14 @@ public interface Host extends StateObject<Status>, Identity, Partition, HAResour
|
||||||
String HOST_UEFI_ENABLE = "host.uefi.enable";
|
String HOST_UEFI_ENABLE = "host.uefi.enable";
|
||||||
String HOST_VOLUME_ENCRYPTION = "host.volume.encryption";
|
String HOST_VOLUME_ENCRYPTION = "host.volume.encryption";
|
||||||
String HOST_INSTANCE_CONVERSION = "host.instance.conversion";
|
String HOST_INSTANCE_CONVERSION = "host.instance.conversion";
|
||||||
|
String HOST_VDDK_SUPPORT = "host.vddk.support";
|
||||||
|
String HOST_VDDK_LIB_DIR = "vddk.lib.dir";
|
||||||
|
String HOST_VDDK_VERSION = "host.vddk.version";
|
||||||
String HOST_OVFTOOL_VERSION = "host.ovftool.version";
|
String HOST_OVFTOOL_VERSION = "host.ovftool.version";
|
||||||
String HOST_VIRTV2V_VERSION = "host.virtv2v.version";
|
String HOST_VIRTV2V_VERSION = "host.virtv2v.version";
|
||||||
|
String HOST_SSH_PORT = "host.ssh.port";
|
||||||
|
|
||||||
|
int DEFAULT_SSH_PORT = 22;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return name of the machine.
|
* @return name of the machine.
|
||||||
|
|
|
||||||
|
|
@ -36,5 +36,4 @@ public interface HostStats {
|
||||||
public HostStats getHostStats();
|
public HostStats getHostStats();
|
||||||
|
|
||||||
public double getLoadAverage();
|
public double getLoadAverage();
|
||||||
// public double getXapiMemoryUsageKBs();
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ public interface KubernetesCluster extends ControlledEntity, com.cloud.utils.fsm
|
||||||
s_fsm.addTransition(State.Running, Event.ScaleDownRequested, State.Scaling);
|
s_fsm.addTransition(State.Running, Event.ScaleDownRequested, State.Scaling);
|
||||||
s_fsm.addTransition(State.Stopped, Event.ScaleUpRequested, State.ScalingStoppedCluster);
|
s_fsm.addTransition(State.Stopped, Event.ScaleUpRequested, State.ScalingStoppedCluster);
|
||||||
s_fsm.addTransition(State.Scaling, Event.OperationSucceeded, State.Running);
|
s_fsm.addTransition(State.Scaling, Event.OperationSucceeded, State.Running);
|
||||||
s_fsm.addTransition(State.Scaling, Event.OperationFailed, State.Alert);
|
s_fsm.addTransition(State.Scaling, Event.OperationFailed, State.Running);
|
||||||
s_fsm.addTransition(State.ScalingStoppedCluster, Event.OperationSucceeded, State.Stopped);
|
s_fsm.addTransition(State.ScalingStoppedCluster, Event.OperationSucceeded, State.Stopped);
|
||||||
s_fsm.addTransition(State.ScalingStoppedCluster, Event.OperationFailed, State.Alert);
|
s_fsm.addTransition(State.ScalingStoppedCluster, Event.OperationFailed, State.Alert);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ package com.cloud.kubernetes.cluster;
|
||||||
|
|
||||||
import org.apache.cloudstack.acl.ControlledEntity;
|
import org.apache.cloudstack.acl.ControlledEntity;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.cloud.user.Account;
|
import com.cloud.user.Account;
|
||||||
|
|
@ -33,8 +34,10 @@ public interface KubernetesServiceHelper extends Adapter {
|
||||||
ControlledEntity findByUuid(String uuid);
|
ControlledEntity findByUuid(String uuid);
|
||||||
ControlledEntity findByVmId(long vmId);
|
ControlledEntity findByVmId(long vmId);
|
||||||
void checkVmCanBeDestroyed(UserVm userVm);
|
void checkVmCanBeDestroyed(UserVm userVm);
|
||||||
|
void checkVmAffinityGroupsCanBeUpdated(UserVm userVm);
|
||||||
boolean isValidNodeType(String nodeType);
|
boolean isValidNodeType(String nodeType);
|
||||||
Map<String, Long> getServiceOfferingNodeTypeMap(Map<String, Map<String, String>> serviceOfferingNodeTypeMap);
|
Map<String, Long> getServiceOfferingNodeTypeMap(Map<String, Map<String, String>> serviceOfferingNodeTypeMap);
|
||||||
Map<String, Long> getTemplateNodeTypeMap(Map<String, Map<String, String>> templateNodeTypeMap);
|
Map<String, Long> getTemplateNodeTypeMap(Map<String, Map<String, String>> templateNodeTypeMap);
|
||||||
|
Map<String, List<Long>> getAffinityGroupNodeTypeMap(Map<String, Map<String, String>> affinityGroupNodeTypeMap);
|
||||||
void cleanupForAccount(Account account);
|
void cleanupForAccount(Account account);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public interface Ipv6Service extends PluggableService, Configurable {
|
||||||
static final ConfigKey<Boolean> Ipv6OfferingCreationEnabled = new ConfigKey<Boolean>("Advanced", Boolean.class,
|
static final ConfigKey<Boolean> Ipv6OfferingCreationEnabled = new ConfigKey<Boolean>("Advanced", Boolean.class,
|
||||||
"ipv6.offering.enabled",
|
"ipv6.offering.enabled",
|
||||||
"false",
|
"false",
|
||||||
"Indicates whether creation of IPv6 network/VPC offering is enabled or not.",
|
"Indicates whether creation of IPv6 Network/VPC offering is enabled or not.",
|
||||||
true);
|
true);
|
||||||
|
|
||||||
static final ConfigKey<Integer> Ipv6PrefixSubnetCleanupInterval = new ConfigKey<Integer>("Advanced", Integer.class,
|
static final ConfigKey<Integer> Ipv6PrefixSubnetCleanupInterval = new ConfigKey<Integer>("Advanced", Integer.class,
|
||||||
|
|
|
||||||
|
|
@ -325,9 +325,9 @@ public interface Network extends ControlledEntity, StateObject<Network.State>, I
|
||||||
|
|
||||||
public enum State {
|
public enum State {
|
||||||
|
|
||||||
Allocated("Indicates the network configuration is in allocated but not setup"), Setup("Indicates the network configuration is setup"), Implementing(
|
Allocated("Indicates the Network configuration is in allocated but not setup"), Setup("Indicates the Network configuration is setup"), Implementing(
|
||||||
"Indicates the network configuration is being implemented"), Implemented("Indicates the network configuration is in use"), Shutdown(
|
"Indicates the Network configuration is being implemented"), Implemented("Indicates the Network configuration is in use"), Shutdown(
|
||||||
"Indicates the network configuration is being destroyed"), Destroy("Indicates that the network is destroyed");
|
"Indicates the Network configuration is being destroyed"), Destroy("Indicates that the Network is destroyed");
|
||||||
|
|
||||||
protected static final StateMachine2<State, Network.Event, Network> s_fsm = new StateMachine2<State, Network.Event, Network>();
|
protected static final StateMachine2<State, Network.Event, Network> s_fsm = new StateMachine2<State, Network.Event, Network>();
|
||||||
|
|
||||||
|
|
@ -510,4 +510,6 @@ public interface Network extends ControlledEntity, StateObject<Network.State>, I
|
||||||
Integer getPrivateMtu();
|
Integer getPrivateMtu();
|
||||||
|
|
||||||
Integer getNetworkCidrSize();
|
Integer getNetworkCidrSize();
|
||||||
|
|
||||||
|
boolean getKeepMacAddressOnPublicNic();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -125,6 +125,10 @@ public interface NetworkModel {
|
||||||
*/
|
*/
|
||||||
String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException;
|
String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException;
|
||||||
|
|
||||||
|
String getUniqueMacAddress(long macAddress, long networkId, long datacenterId) throws InsufficientAddressCapacityException;
|
||||||
|
|
||||||
|
boolean isMACUnique(String mac, long networkId);
|
||||||
|
|
||||||
PublicIpAddress getPublicIpAddress(long ipAddressId);
|
PublicIpAddress getPublicIpAddress(long ipAddressId);
|
||||||
|
|
||||||
List<? extends Vlan> listPodVlans(long podId);
|
List<? extends Vlan> listPodVlans(long podId);
|
||||||
|
|
@ -364,4 +368,8 @@ public interface NetworkModel {
|
||||||
|
|
||||||
boolean checkSecurityGroupSupportForNetwork(Account account, DataCenter zone, List<Long> networkIds,
|
boolean checkSecurityGroupSupportForNetwork(Account account, DataCenter zone, List<Long> networkIds,
|
||||||
List<Long> securityGroupsIds);
|
List<Long> securityGroupsIds);
|
||||||
|
|
||||||
|
default long getMacIdentifier(Long dataCenterId) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -385,6 +385,11 @@ public class NetworkProfile implements Network {
|
||||||
return networkCidrSize;
|
return networkCidrSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean getKeepMacAddressOnPublicNic() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String.format("NetworkProfile %s",
|
return String.format("NetworkProfile %s",
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ public interface NetworkService {
|
||||||
true, ConfigKey.Scope.Zone);
|
true, ConfigKey.Scope.Zone);
|
||||||
|
|
||||||
public static final ConfigKey<Boolean> AllowUsersToSpecifyVRMtu = new ConfigKey<>("Advanced", Boolean.class,
|
public static final ConfigKey<Boolean> AllowUsersToSpecifyVRMtu = new ConfigKey<>("Advanced", Boolean.class,
|
||||||
"allow.end.users.to.specify.vr.mtu", "false", "Allow end users to specify VR MTU",
|
"allow.end.users.to.specify.vr.mtu", "false", "Allow end Users to specify VR MTU",
|
||||||
true, ConfigKey.Scope.Zone);
|
true, ConfigKey.Scope.Zone);
|
||||||
|
|
||||||
List<? extends Network> getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner);
|
List<? extends Network> getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner);
|
||||||
|
|
@ -108,6 +108,10 @@ public interface NetworkService {
|
||||||
PhysicalNetwork physicalNetwork, long zoneId, ControlledEntity.ACLType aclType) throws
|
PhysicalNetwork physicalNetwork, long zoneId, ControlledEntity.ACLType aclType) throws
|
||||||
InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException;
|
InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException;
|
||||||
|
|
||||||
|
Network createGuestNetwork(long networkOfferingId, String name, String displayText, Account owner,
|
||||||
|
PhysicalNetwork physicalNetwork, long zoneId, ControlledEntity.ACLType aclType, Pair<Integer, Integer> vrIfaceMTUs) throws
|
||||||
|
InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException;
|
||||||
|
|
||||||
Pair<List<? extends Network>, Integer> searchForNetworks(ListNetworksCmd cmd);
|
Pair<List<? extends Network>, Integer> searchForNetworks(ListNetworksCmd cmd);
|
||||||
|
|
||||||
boolean deleteNetwork(long networkId, boolean forced);
|
boolean deleteNetwork(long networkId, boolean forced);
|
||||||
|
|
@ -275,4 +279,6 @@ public interface NetworkService {
|
||||||
IpAddresses getIpAddressesFromIps(String ipAddress, String ip6Address, String macAddress);
|
IpAddresses getIpAddressesFromIps(String ipAddress, String ip6Address, String macAddress);
|
||||||
|
|
||||||
String getNicVlanValueForExternalVm(NicTO nic);
|
String getNicVlanValueForExternalVm(NicTO nic);
|
||||||
|
|
||||||
|
Long getPreferredNetworkIdForPublicIpRuleAssignment(IpAddress ip, Long networkId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ public class Networks {
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public String getValueFrom(URI uri) {
|
public String getValueFrom(URI uri) {
|
||||||
return uri.getAuthority();
|
return uri == null ? null : uri.getAuthority();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Vswitch("vs", String.class), LinkLocal(null, null), Vnet("vnet", Long.class), Storage("storage", Integer.class), Lswitch("lswitch", String.class) {
|
Vswitch("vs", String.class), LinkLocal(null, null), Vnet("vnet", Long.class), Storage("storage", Integer.class), Lswitch("lswitch", String.class) {
|
||||||
|
|
@ -96,7 +96,7 @@ public class Networks {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String getValueFrom(URI uri) {
|
public String getValueFrom(URI uri) {
|
||||||
return uri.getSchemeSpecificPart();
|
return uri == null ? null : uri.getSchemeSpecificPart();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Mido("mido", String.class), Pvlan("pvlan", String.class),
|
Mido("mido", String.class), Pvlan("pvlan", String.class),
|
||||||
|
|
@ -177,7 +177,7 @@ public class Networks {
|
||||||
* @return the scheme as BroadcastDomainType
|
* @return the scheme as BroadcastDomainType
|
||||||
*/
|
*/
|
||||||
public static BroadcastDomainType getSchemeValue(URI uri) {
|
public static BroadcastDomainType getSchemeValue(URI uri) {
|
||||||
return toEnumValue(uri.getScheme());
|
return toEnumValue(uri == null ? null : uri.getScheme());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -191,7 +191,7 @@ public class Networks {
|
||||||
if (com.cloud.dc.Vlan.UNTAGGED.equalsIgnoreCase(str)) {
|
if (com.cloud.dc.Vlan.UNTAGGED.equalsIgnoreCase(str)) {
|
||||||
return Native;
|
return Native;
|
||||||
}
|
}
|
||||||
return getSchemeValue(new URI(str));
|
return getSchemeValue(str == null ? null : new URI(str));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -220,7 +220,7 @@ public class Networks {
|
||||||
* @return the host part as String
|
* @return the host part as String
|
||||||
*/
|
*/
|
||||||
public String getValueFrom(URI uri) {
|
public String getValueFrom(URI uri) {
|
||||||
return uri.getHost();
|
return uri == null ? null : uri.getHost();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -243,7 +243,7 @@ public class Networks {
|
||||||
* @throws URISyntaxException the string is not even an uri
|
* @throws URISyntaxException the string is not even an uri
|
||||||
*/
|
*/
|
||||||
public static String getValue(String uriString) throws URISyntaxException {
|
public static String getValue(String uriString) throws URISyntaxException {
|
||||||
return getValue(new URI(uriString));
|
return getValue(uriString == null ? null : new URI(uriString));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -41,4 +41,6 @@ public interface PhysicalNetworkTrafficType extends InternalIdentity, Identity {
|
||||||
String getHypervNetworkLabel();
|
String getHypervNetworkLabel();
|
||||||
|
|
||||||
String getOvm3NetworkLabel();
|
String getOvm3NetworkLabel();
|
||||||
|
|
||||||
|
String getVlan();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ public interface AutoScaleVmGroup extends ControlledEntity, InternalIdentity, Di
|
||||||
} else if (state.equalsIgnoreCase("scaling")) {
|
} else if (state.equalsIgnoreCase("scaling")) {
|
||||||
return SCALING;
|
return SCALING;
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException("Unexpected AutoScale VM group state : " + state);
|
throw new IllegalArgumentException("Unexpected AutoScale Instance group state : " + state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -108,7 +108,7 @@ public interface LoadBalancingRulesService {
|
||||||
/**
|
/**
|
||||||
* Assign a virtual machine or list of virtual machines, or Map of <vmId vmIp> to a load balancer.
|
* Assign a virtual machine or list of virtual machines, or Map of <vmId vmIp> to a load balancer.
|
||||||
*/
|
*/
|
||||||
boolean assignToLoadBalancer(long lbRuleId, List<Long> vmIds, Map<Long, List<String>> vmIdIpMap, boolean isAutoScaleVM);
|
boolean assignToLoadBalancer(long lbRuleId, List<Long> vmIds, Map<Long, List<String>> vmIdIpMap, Map<Long, Long> vmIdNetworkMap, boolean isAutoScaleVM);
|
||||||
|
|
||||||
boolean assignSSLCertToLoadBalancerRule(Long lbRuleId, String certName, String publicCert, String privateKey);
|
boolean assignSSLCertToLoadBalancerRule(Long lbRuleId, String certName, String publicCert, String privateKey);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -108,8 +108,7 @@ public class LbStickinessMethod {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addParam(String name, Boolean required, String description, Boolean isFlag) {
|
public void addParam(String name, Boolean required, String description, Boolean isFlag) {
|
||||||
/* FIXME : UI is breaking if the capability string length is larger , temporarily description is commented out */
|
/* is this still a valid comment: FIXME : UI is breaking if the capability string length is larger , temporarily description is commented out */
|
||||||
// LbStickinessMethodParam param = new LbStickinessMethodParam(name, required, description);
|
|
||||||
LbStickinessMethodParam param = new LbStickinessMethodParam(name, required, " ", isFlag);
|
LbStickinessMethodParam param = new LbStickinessMethodParam(name, required, " ", isFlag);
|
||||||
_paramList.add(param);
|
_paramList.add(param);
|
||||||
return;
|
return;
|
||||||
|
|
@ -133,7 +132,6 @@ public class LbStickinessMethod {
|
||||||
|
|
||||||
public void setDescription(String description) {
|
public void setDescription(String description) {
|
||||||
/* FIXME : UI is breaking if the capability string length is larger , temporarily description is commented out */
|
/* FIXME : UI is breaking if the capability string length is larger , temporarily description is commented out */
|
||||||
//this.description = description;
|
|
||||||
this._description = " ";
|
this._description = " ";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ package com.cloud.network.vpc;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
|
import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
|
||||||
|
import org.apache.cloudstack.api.command.user.network.ImportNetworkACLCmd;
|
||||||
import org.apache.cloudstack.api.command.user.network.ListNetworkACLListsCmd;
|
import org.apache.cloudstack.api.command.user.network.ListNetworkACLListsCmd;
|
||||||
import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;
|
import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;
|
||||||
import org.apache.cloudstack.api.command.user.network.MoveNetworkAclItemCmd;
|
import org.apache.cloudstack.api.command.user.network.MoveNetworkAclItemCmd;
|
||||||
|
|
@ -98,4 +99,6 @@ public interface NetworkACLService {
|
||||||
NetworkACLItem moveNetworkAclRuleToNewPosition(MoveNetworkAclItemCmd moveNetworkAclItemCmd);
|
NetworkACLItem moveNetworkAclRuleToNewPosition(MoveNetworkAclItemCmd moveNetworkAclItemCmd);
|
||||||
|
|
||||||
NetworkACLItem moveRuleToTheTopInACLList(NetworkACLItem ruleBeingMoved);
|
NetworkACLItem moveRuleToTheTopInACLList(NetworkACLItem ruleBeingMoved);
|
||||||
|
|
||||||
|
List<NetworkACLItem> importNetworkACLRules(ImportNetworkACLCmd cmd) throws ResourceUnavailableException;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -107,4 +107,6 @@ public interface Vpc extends ControlledEntity, Identity, InternalIdentity {
|
||||||
String getIp6Dns2();
|
String getIp6Dns2();
|
||||||
|
|
||||||
boolean useRouterIpAsResolver();
|
boolean useRouterIpAsResolver();
|
||||||
|
|
||||||
|
boolean getKeepMacAddressOnPublicNic();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -84,4 +84,6 @@ public interface VpcOffering extends InternalIdentity, Identity {
|
||||||
NetworkOffering.RoutingMode getRoutingMode();
|
NetworkOffering.RoutingMode getRoutingMode();
|
||||||
|
|
||||||
Boolean isSpecifyAsNumber();
|
Boolean isSpecifyAsNumber();
|
||||||
|
|
||||||
|
boolean isConserveMode();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ package com.cloud.network.vpc;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.api.command.admin.vpc.CloneVPCOfferingCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.vpc.CreateVPCOfferingCmd;
|
import org.apache.cloudstack.api.command.admin.vpc.CreateVPCOfferingCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.vpc.UpdateVPCOfferingCmd;
|
import org.apache.cloudstack.api.command.admin.vpc.UpdateVPCOfferingCmd;
|
||||||
import org.apache.cloudstack.api.command.user.vpc.ListVPCOfferingsCmd;
|
import org.apache.cloudstack.api.command.user.vpc.ListVPCOfferingsCmd;
|
||||||
|
|
@ -34,12 +35,14 @@ public interface VpcProvisioningService {
|
||||||
|
|
||||||
VpcOffering createVpcOffering(CreateVPCOfferingCmd cmd);
|
VpcOffering createVpcOffering(CreateVPCOfferingCmd cmd);
|
||||||
|
|
||||||
|
VpcOffering cloneVPCOffering(CloneVPCOfferingCmd cmd);
|
||||||
|
|
||||||
VpcOffering createVpcOffering(String name, String displayText, List<String> supportedServices,
|
VpcOffering createVpcOffering(String name, String displayText, List<String> supportedServices,
|
||||||
Map<String, List<String>> serviceProviders,
|
Map<String, List<String>> serviceProviders,
|
||||||
Map serviceCapabilitystList, NetUtils.InternetProtocol internetProtocol,
|
Map serviceCapabilitystList, NetUtils.InternetProtocol internetProtocol,
|
||||||
Long serviceOfferingId, String externalProvider, NetworkOffering.NetworkMode networkMode,
|
Long serviceOfferingId, String externalProvider, NetworkOffering.NetworkMode networkMode,
|
||||||
List<Long> domainIds, List<Long> zoneIds, VpcOffering.State state,
|
List<Long> domainIds, List<Long> zoneIds, VpcOffering.State state,
|
||||||
NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber);
|
NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber, boolean conserveMode);
|
||||||
|
|
||||||
|
|
||||||
Pair<List<? extends VpcOffering>,Integer> listVpcOfferings(ListVPCOfferingsCmd cmd);
|
Pair<List<? extends VpcOffering>,Integer> listVpcOfferings(ListVPCOfferingsCmd cmd);
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ public interface VpcService {
|
||||||
*/
|
*/
|
||||||
Vpc createVpc(long zoneId, long vpcOffId, long vpcOwnerId, String vpcName, String displayText, String cidr, String networkDomain,
|
Vpc createVpc(long zoneId, long vpcOffId, long vpcOwnerId, String vpcName, String displayText, String cidr, String networkDomain,
|
||||||
String ip4Dns1, String ip4Dns2, String ip6Dns1, String ip6Dns2, Boolean displayVpc, Integer publicMtu, Integer cidrSize,
|
String ip4Dns1, String ip4Dns2, String ip6Dns1, String ip6Dns2, Boolean displayVpc, Integer publicMtu, Integer cidrSize,
|
||||||
Long asNumber, List<Long> bgpPeerIds, Boolean useVrIpResolver) throws ResourceAllocationException;
|
Long asNumber, List<Long> bgpPeerIds, Boolean useVrIpResolver, boolean keepMacAddressOnPublicNic) throws ResourceAllocationException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Persists VPC record in the database
|
* Persists VPC record in the database
|
||||||
|
|
@ -104,7 +104,7 @@ public interface VpcService {
|
||||||
* @throws ResourceUnavailableException if during restart some resources may not be available
|
* @throws ResourceUnavailableException if during restart some resources may not be available
|
||||||
* @throws InsufficientCapacityException if for instance no address space, compute or storage is sufficiently available
|
* @throws InsufficientCapacityException if for instance no address space, compute or storage is sufficiently available
|
||||||
*/
|
*/
|
||||||
Vpc updateVpc(long vpcId, String vpcName, String displayText, String customId, Boolean displayVpc, Integer mtu, String sourceNatIp) throws ResourceUnavailableException, InsufficientCapacityException;
|
Vpc updateVpc(long vpcId, String vpcName, String displayText, String customId, Boolean displayVpc, Integer mtu, String sourceNatIp, Boolean keepMacAddressOnPublicNic) throws ResourceUnavailableException, InsufficientCapacityException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lists VPC(s) based on the parameters passed to the API call
|
* Lists VPC(s) based on the parameters passed to the API call
|
||||||
|
|
|
||||||
|
|
@ -71,12 +71,13 @@ import org.apache.cloudstack.api.command.user.vm.GetVMPasswordCmd;
|
||||||
import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd;
|
import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd;
|
||||||
import org.apache.cloudstack.config.Configuration;
|
import org.apache.cloudstack.config.Configuration;
|
||||||
import org.apache.cloudstack.config.ConfigurationGroup;
|
import org.apache.cloudstack.config.ConfigurationGroup;
|
||||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
|
||||||
|
|
||||||
import com.cloud.alert.Alert;
|
import com.cloud.alert.Alert;
|
||||||
import com.cloud.capacity.Capacity;
|
import com.cloud.capacity.Capacity;
|
||||||
import com.cloud.dc.Pod;
|
import com.cloud.dc.Pod;
|
||||||
import com.cloud.dc.Vlan;
|
import com.cloud.dc.Vlan;
|
||||||
|
import com.cloud.deploy.DeploymentPlan;
|
||||||
|
import com.cloud.deploy.DeploymentPlanner.ExcludeList;
|
||||||
import com.cloud.exception.ConcurrentOperationException;
|
import com.cloud.exception.ConcurrentOperationException;
|
||||||
import com.cloud.exception.ManagementServerException;
|
import com.cloud.exception.ManagementServerException;
|
||||||
import com.cloud.exception.ResourceUnavailableException;
|
import com.cloud.exception.ResourceUnavailableException;
|
||||||
|
|
@ -97,6 +98,7 @@ import com.cloud.utils.Ternary;
|
||||||
import com.cloud.vm.InstanceGroup;
|
import com.cloud.vm.InstanceGroup;
|
||||||
import com.cloud.vm.VirtualMachine;
|
import com.cloud.vm.VirtualMachine;
|
||||||
import com.cloud.vm.VirtualMachine.Type;
|
import com.cloud.vm.VirtualMachine.Type;
|
||||||
|
import com.cloud.vm.VirtualMachineProfile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hopefully this is temporary.
|
* Hopefully this is temporary.
|
||||||
|
|
@ -105,14 +107,6 @@ import com.cloud.vm.VirtualMachine.Type;
|
||||||
public interface ManagementService {
|
public interface ManagementService {
|
||||||
static final String Name = "management-server";
|
static final String Name = "management-server";
|
||||||
|
|
||||||
ConfigKey<Boolean> JsInterpretationEnabled = new ConfigKey<>("Hidden"
|
|
||||||
, Boolean.class
|
|
||||||
, "js.interpretation.enabled"
|
|
||||||
, "false"
|
|
||||||
, "Enable/Disable all JavaScript interpretation related functionalities to create or update Javascript rules."
|
|
||||||
, false
|
|
||||||
, ConfigKey.Scope.Global);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns the a map of the names/values in the configuration table
|
* returns the a map of the names/values in the configuration table
|
||||||
*
|
*
|
||||||
|
|
@ -478,6 +472,19 @@ public interface ManagementService {
|
||||||
|
|
||||||
Ternary<Pair<List<? extends Host>, Integer>, List<? extends Host>, Map<Host, Boolean>> listHostsForMigrationOfVM(VirtualMachine vm, Long startIndex, Long pageSize, String keyword, List<VirtualMachine> vmList);
|
Ternary<Pair<List<? extends Host>, Integer>, List<? extends Host>, Map<Host, Boolean>> listHostsForMigrationOfVM(VirtualMachine vm, Long startIndex, Long pageSize, String keyword, List<VirtualMachine> vmList);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply affinity group constraints and other exclusion rules for VM migration.
|
||||||
|
* This is a helper method that can be used independently for per-iteration affinity checks in DRS.
|
||||||
|
*
|
||||||
|
* @param vm The virtual machine to migrate
|
||||||
|
* @param vmProfile The VM profile
|
||||||
|
* @param plan The deployment plan
|
||||||
|
* @param vmList List of VMs with current/simulated placements for affinity processing
|
||||||
|
* @return ExcludeList containing hosts to avoid
|
||||||
|
*/
|
||||||
|
ExcludeList applyAffinityConstraints(VirtualMachine vm, VirtualMachineProfile vmProfile,
|
||||||
|
DeploymentPlan plan, List<VirtualMachine> vmList);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List storage pools for live migrating of a volume. The API returns list of all pools in the cluster to which the
|
* List storage pools for live migrating of a volume. The API returns list of all pools in the cluster to which the
|
||||||
* volume can be migrated. Current pool is not included in the list. In case of vSphere datastore cluster storage pools,
|
* volume can be migrated. Current pool is not included in the list. In case of vSphere datastore cluster storage pools,
|
||||||
|
|
@ -518,6 +525,4 @@ public interface ManagementService {
|
||||||
|
|
||||||
boolean removeManagementServer(RemoveManagementServerCmd cmd);
|
boolean removeManagementServer(RemoveManagementServerCmd cmd);
|
||||||
|
|
||||||
void checkJsInterpretationAllowedIfNeededForParameterValue(String paramName, boolean paramValue);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,14 +16,14 @@
|
||||||
// under the License.
|
// under the License.
|
||||||
package com.cloud.server;
|
package com.cloud.server;
|
||||||
|
|
||||||
import org.apache.cloudstack.acl.ControlledEntity;
|
|
||||||
import org.apache.cloudstack.api.Identity;
|
|
||||||
import org.apache.cloudstack.api.InternalIdentity;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.acl.ControlledEntity;
|
||||||
|
import org.apache.cloudstack.api.Identity;
|
||||||
|
import org.apache.cloudstack.api.InternalIdentity;
|
||||||
|
|
||||||
public interface ResourceTag extends ControlledEntity, Identity, InternalIdentity {
|
public interface ResourceTag extends ControlledEntity, Identity, InternalIdentity {
|
||||||
|
|
||||||
// FIXME - extract enum to another interface as its used both by resourceTags and resourceMetaData code
|
// FIXME - extract enum to another interface as its used both by resourceTags and resourceMetaData code
|
||||||
|
|
@ -70,7 +70,7 @@ public interface ResourceTag extends ControlledEntity, Identity, InternalIdentit
|
||||||
GuestOs(false, true),
|
GuestOs(false, true),
|
||||||
NetworkOffering(false, true),
|
NetworkOffering(false, true),
|
||||||
VpcOffering(true, false),
|
VpcOffering(true, false),
|
||||||
Domain(false, false, true),
|
Domain(true, false, true),
|
||||||
ObjectStore(false, false, true);
|
ObjectStore(false, false, true);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ public class Storage {
|
||||||
public static enum TemplateType {
|
public static enum TemplateType {
|
||||||
ROUTING, // Router template
|
ROUTING, // Router template
|
||||||
SYSTEM, /* routing, system vm template */
|
SYSTEM, /* routing, system vm template */
|
||||||
BUILTIN, /* buildin template */
|
BUILTIN, /* builtin template */
|
||||||
PERHOST, /* every host has this template, don't need to install it in secondary storage */
|
PERHOST, /* every host has this template, don't need to install it in secondary storage */
|
||||||
USER, /* User supplied template/iso */
|
USER, /* User supplied template/iso */
|
||||||
VNF, /* VNFs (virtual network functions) template */
|
VNF, /* VNFs (virtual network functions) template */
|
||||||
|
|
|
||||||
|
|
@ -56,9 +56,9 @@ public interface VolumeApiService {
|
||||||
Boolean.class,
|
Boolean.class,
|
||||||
"use.https.to.upload",
|
"use.https.to.upload",
|
||||||
"true",
|
"true",
|
||||||
"Determines the protocol (HTTPS or HTTP) ACS will use to generate links to upload ISOs, volumes, and templates. When set as 'true', ACS will use protocol HTTPS, otherwise, it will use protocol HTTP. Default value is 'true'.",
|
"Controls whether upload links for ISOs, volumes, and templates use HTTPS (true, default) or HTTP (false). After changing this setting, the Secondary Storage VM (SSVM) must be recreated",
|
||||||
true,
|
true,
|
||||||
ConfigKey.Scope.StoragePool);
|
ConfigKey.Scope.Zone);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the database object for a volume based on the given criteria
|
* Creates the database object for a volume based on the given criteria
|
||||||
|
|
|
||||||
|
|
@ -21,12 +21,13 @@ import java.util.Map;
|
||||||
|
|
||||||
import com.cloud.utils.Pair;
|
import com.cloud.utils.Pair;
|
||||||
import org.apache.cloudstack.acl.ControlledEntity;
|
import org.apache.cloudstack.acl.ControlledEntity;
|
||||||
|
import org.apache.cloudstack.acl.RolePermissionEntity;
|
||||||
import org.apache.cloudstack.acl.RoleType;
|
import org.apache.cloudstack.acl.RoleType;
|
||||||
import org.apache.cloudstack.acl.SecurityChecker.AccessType;
|
import org.apache.cloudstack.acl.SecurityChecker.AccessType;
|
||||||
|
import org.apache.cloudstack.acl.apikeypair.ApiKeyPair;
|
||||||
|
import org.apache.cloudstack.acl.apikeypair.ApiKeyPairPermission;
|
||||||
|
import org.apache.cloudstack.api.BaseCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.account.CreateAccountCmd;
|
import org.apache.cloudstack.api.command.admin.account.CreateAccountCmd;
|
||||||
import org.apache.cloudstack.api.command.admin.user.GetUserKeysCmd;
|
|
||||||
import org.apache.cloudstack.api.command.admin.user.RegisterCmd;
|
|
||||||
import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;
|
|
||||||
|
|
||||||
import com.cloud.dc.DataCenter;
|
import com.cloud.dc.DataCenter;
|
||||||
import com.cloud.domain.Domain;
|
import com.cloud.domain.Domain;
|
||||||
|
|
@ -35,7 +36,16 @@ import com.cloud.network.vpc.VpcOffering;
|
||||||
import com.cloud.offering.DiskOffering;
|
import com.cloud.offering.DiskOffering;
|
||||||
import com.cloud.offering.NetworkOffering;
|
import com.cloud.offering.NetworkOffering;
|
||||||
import com.cloud.offering.ServiceOffering;
|
import com.cloud.offering.ServiceOffering;
|
||||||
|
import org.apache.cloudstack.api.command.admin.user.DeleteUserKeysCmd;
|
||||||
|
import org.apache.cloudstack.api.command.admin.user.GetUserKeysCmd;
|
||||||
|
import org.apache.cloudstack.api.command.admin.user.ListUserKeyRulesCmd;
|
||||||
|
import org.apache.cloudstack.api.command.admin.user.ListUserKeysCmd;
|
||||||
|
import org.apache.cloudstack.api.command.admin.user.RegisterUserKeysCmd;
|
||||||
|
import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;
|
||||||
|
import org.apache.cloudstack.api.response.ApiKeyPairResponse;
|
||||||
|
import org.apache.cloudstack.api.response.ListResponse;
|
||||||
import org.apache.cloudstack.auth.UserTwoFactorAuthenticator;
|
import org.apache.cloudstack.auth.UserTwoFactorAuthenticator;
|
||||||
|
import org.apache.cloudstack.backup.BackupOffering;
|
||||||
|
|
||||||
public interface AccountService {
|
public interface AccountService {
|
||||||
|
|
||||||
|
|
@ -58,7 +68,8 @@ public interface AccountService {
|
||||||
|
|
||||||
User getSystemUser();
|
User getSystemUser();
|
||||||
|
|
||||||
User createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId, String userUUID);
|
User createUser(String userName, String password, String firstName, String lastName, String email, String timeZone,
|
||||||
|
String accountName, Long domainId, String userUUID, boolean isPasswordChangeRequired);
|
||||||
|
|
||||||
User createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId, String userUUID,
|
User createUser(String userName, String password, String firstName, String lastName, String email, String timeZone, String accountName, Long domainId, String userUUID,
|
||||||
User.Source source);
|
User.Source source);
|
||||||
|
|
@ -95,7 +106,7 @@ public interface AccountService {
|
||||||
|
|
||||||
void markUserRegistered(long userId);
|
void markUserRegistered(long userId);
|
||||||
|
|
||||||
public String[] createApiKeyAndSecretKey(RegisterCmd cmd);
|
ApiKeyPair createApiKeyAndSecretKey(RegisterUserKeysCmd cmd);
|
||||||
|
|
||||||
public String[] createApiKeyAndSecretKey(final long userId);
|
public String[] createApiKeyAndSecretKey(final long userId);
|
||||||
|
|
||||||
|
|
@ -115,13 +126,19 @@ public interface AccountService {
|
||||||
|
|
||||||
void checkAccess(Account account, VpcOffering vof, DataCenter zone) throws PermissionDeniedException;
|
void checkAccess(Account account, VpcOffering vof, DataCenter zone) throws PermissionDeniedException;
|
||||||
|
|
||||||
|
void checkAccess(Account account, BackupOffering bof) throws PermissionDeniedException;
|
||||||
|
|
||||||
void checkAccess(User user, ControlledEntity entity);
|
void checkAccess(User user, ControlledEntity entity);
|
||||||
|
|
||||||
void checkAccess(Account account, AccessType accessType, boolean sameOwner, String apiName, ControlledEntity... entities) throws PermissionDeniedException;
|
void checkAccess(Account account, AccessType accessType, boolean sameOwner, String apiName, ControlledEntity... entities) throws PermissionDeniedException;
|
||||||
|
|
||||||
void validateAccountHasAccessToResource(Account account, AccessType accessType, Object resource);
|
void validateAccountHasAccessToResource(Account account, AccessType accessType, Object resource);
|
||||||
|
|
||||||
Long finalyzeAccountId(String accountName, Long domainId, Long projectId, boolean enabledOnly);
|
void validateCallingUserHasAccessToDesiredUser(Long userId);
|
||||||
|
|
||||||
|
Long finalizeAccountId(String accountName, Long domainId, Long projectId, boolean enabledOnly);
|
||||||
|
|
||||||
|
Long finalizeAccountId(Long accountId, String accountName, Long domainId, Long projectId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns the user account object for a given user id
|
* returns the user account object for a given user id
|
||||||
|
|
@ -130,9 +147,15 @@ public interface AccountService {
|
||||||
*/
|
*/
|
||||||
UserAccount getUserAccountById(Long userId);
|
UserAccount getUserAccountById(Long userId);
|
||||||
|
|
||||||
public Pair<Boolean, Map<String, String>> getKeys(GetUserKeysCmd cmd);
|
Pair<Boolean, Map<String, String>> getKeys(GetUserKeysCmd cmd);
|
||||||
|
|
||||||
public Pair<Boolean, Map<String, String>> getKeys(Long userId);
|
ListResponse<ApiKeyPairResponse> listKeys(ListUserKeysCmd cmd);
|
||||||
|
|
||||||
|
List<ApiKeyPairPermission> listKeyRules(ListUserKeyRulesCmd cmd);
|
||||||
|
|
||||||
|
void deleteApiKey(DeleteUserKeysCmd cmd);
|
||||||
|
|
||||||
|
void deleteApiKey(ApiKeyPair id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lists user two-factor authentication provider plugins
|
* Lists user two-factor authentication provider plugins
|
||||||
|
|
@ -147,4 +170,13 @@ public interface AccountService {
|
||||||
*/
|
*/
|
||||||
UserTwoFactorAuthenticator getUserTwoFactorAuthenticationProvider(final Long domainId);
|
UserTwoFactorAuthenticator getUserTwoFactorAuthenticationProvider(final Long domainId);
|
||||||
|
|
||||||
|
ApiKeyPair getLatestUserKeyPair(Long userId);
|
||||||
|
|
||||||
|
ApiKeyPair getKeyPairById(Long id);
|
||||||
|
|
||||||
|
ApiKeyPair getKeyPairByApiKey(String apiKey);
|
||||||
|
|
||||||
|
String getAccessingApiKey(BaseCmd cmd);
|
||||||
|
|
||||||
|
List<RolePermissionEntity> getAllKeypairPermissions(String apiKey);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
// Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
// or more contributor license agreements. See the NOTICE file
|
||||||
|
// distributed with this work for additional information
|
||||||
|
// regarding copyright ownership. The ASF licenses this file
|
||||||
|
// to you under the Apache License, Version 2.0 (the
|
||||||
|
// "License"); you may not use this file except in compliance
|
||||||
|
// with the License. You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing,
|
||||||
|
// software distributed under the License is distributed on an
|
||||||
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
// KIND, either express or implied. See the License for the
|
||||||
|
// specific language governing permissions and limitations
|
||||||
|
// under the License.
|
||||||
|
package com.cloud.user;
|
||||||
|
|
||||||
|
public enum ApiKeyPairState {
|
||||||
|
ENABLED, REMOVED, EXPIRED
|
||||||
|
}
|
||||||
|
|
@ -35,7 +35,7 @@ import org.apache.cloudstack.resourcelimit.Reserver;
|
||||||
public interface ResourceLimitService {
|
public interface ResourceLimitService {
|
||||||
|
|
||||||
static final ConfigKey<Long> MaxAccountSecondaryStorage = new ConfigKey<>("Account Defaults", Long.class, "max.account.secondary.storage", "400",
|
static final ConfigKey<Long> MaxAccountSecondaryStorage = new ConfigKey<>("Account Defaults", Long.class, "max.account.secondary.storage", "400",
|
||||||
"The default maximum secondary storage space (in GiB) that can be used for an account", false);
|
"The default maximum secondary storage space (in GiB) that can be used for an Account", false);
|
||||||
static final ConfigKey<Long> MaxProjectSecondaryStorage = new ConfigKey<>("Project Defaults", Long.class, "max.project.secondary.storage", "400",
|
static final ConfigKey<Long> MaxProjectSecondaryStorage = new ConfigKey<>("Project Defaults", Long.class, "max.project.secondary.storage", "400",
|
||||||
"The default maximum secondary storage space (in GiB) that can be used for a project", false);
|
"The default maximum secondary storage space (in GiB) that can be used for a project", false);
|
||||||
static final ConfigKey<Long> ResourceCountCheckInterval = new ConfigKey<>("Advanced", Long.class, "resourcecount.check.interval", "300",
|
static final ConfigKey<Long> ResourceCountCheckInterval = new ConfigKey<>("Advanced", Long.class, "resourcecount.check.interval", "300",
|
||||||
|
|
|
||||||
|
|
@ -65,14 +65,6 @@ public interface User extends OwnedBy, InternalIdentity {
|
||||||
|
|
||||||
public void setState(Account.State state);
|
public void setState(Account.State state);
|
||||||
|
|
||||||
public String getApiKey();
|
|
||||||
|
|
||||||
public void setApiKey(String apiKey);
|
|
||||||
|
|
||||||
public String getSecretKey();
|
|
||||||
|
|
||||||
public void setSecretKey(String secretKey);
|
|
||||||
|
|
||||||
public String getTimezone();
|
public String getTimezone();
|
||||||
|
|
||||||
public void setTimezone(String timezone);
|
public void setTimezone(String timezone);
|
||||||
|
|
|
||||||
|
|
@ -39,10 +39,6 @@ public interface UserAccount extends InternalIdentity {
|
||||||
|
|
||||||
String getState();
|
String getState();
|
||||||
|
|
||||||
String getApiKey();
|
|
||||||
|
|
||||||
String getSecretKey();
|
|
||||||
|
|
||||||
Date getCreated();
|
Date getCreated();
|
||||||
|
|
||||||
Date getRemoved();
|
Date getRemoved();
|
||||||
|
|
|
||||||
|
|
@ -162,4 +162,6 @@ public interface Nic extends Identity, InternalIdentity {
|
||||||
String getIPv6Address();
|
String getIPv6Address();
|
||||||
|
|
||||||
Integer getMtu();
|
Integer getMtu();
|
||||||
|
|
||||||
|
boolean isEnabled();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ public class NicProfile implements InternalIdentity, Serializable {
|
||||||
boolean defaultNic;
|
boolean defaultNic;
|
||||||
Integer networkRate;
|
Integer networkRate;
|
||||||
boolean isSecurityGroupEnabled;
|
boolean isSecurityGroupEnabled;
|
||||||
|
boolean enabled;
|
||||||
|
|
||||||
Integer orderIndex;
|
Integer orderIndex;
|
||||||
|
|
||||||
|
|
@ -87,6 +88,7 @@ public class NicProfile implements InternalIdentity, Serializable {
|
||||||
broadcastType = network.getBroadcastDomainType();
|
broadcastType = network.getBroadcastDomainType();
|
||||||
trafficType = network.getTrafficType();
|
trafficType = network.getTrafficType();
|
||||||
format = nic.getAddressFormat();
|
format = nic.getAddressFormat();
|
||||||
|
enabled = nic.isEnabled();
|
||||||
|
|
||||||
iPv4Address = nic.getIPv4Address();
|
iPv4Address = nic.getIPv4Address();
|
||||||
iPv4Netmask = nic.getIPv4Netmask();
|
iPv4Netmask = nic.getIPv4Netmask();
|
||||||
|
|
@ -414,6 +416,14 @@ public class NicProfile implements InternalIdentity, Serializable {
|
||||||
this.ipv4AllocationRaceCheck = ipv4AllocationRaceCheck;
|
this.ipv4AllocationRaceCheck = ipv4AllocationRaceCheck;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnabled(boolean enabled) {
|
||||||
|
this.enabled = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// OTHER METHODS
|
// OTHER METHODS
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ import org.apache.cloudstack.api.command.user.vm.ScaleVMCmd;
|
||||||
import org.apache.cloudstack.api.command.user.vm.StartVMCmd;
|
import org.apache.cloudstack.api.command.user.vm.StartVMCmd;
|
||||||
import org.apache.cloudstack.api.command.user.vm.UpdateDefaultNicForVMCmd;
|
import org.apache.cloudstack.api.command.user.vm.UpdateDefaultNicForVMCmd;
|
||||||
import org.apache.cloudstack.api.command.user.vm.UpdateVMCmd;
|
import org.apache.cloudstack.api.command.user.vm.UpdateVMCmd;
|
||||||
|
import org.apache.cloudstack.api.command.user.vm.UpdateVmNicCmd;
|
||||||
import org.apache.cloudstack.api.command.user.vm.UpdateVmNicIpCmd;
|
import org.apache.cloudstack.api.command.user.vm.UpdateVmNicIpCmd;
|
||||||
import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd;
|
import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd;
|
||||||
import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd;
|
import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd;
|
||||||
|
|
@ -152,6 +153,8 @@ public interface UserVmService {
|
||||||
*/
|
*/
|
||||||
UserVm updateNicIpForVirtualMachine(UpdateVmNicIpCmd cmd);
|
UserVm updateNicIpForVirtualMachine(UpdateVmNicIpCmd cmd);
|
||||||
|
|
||||||
|
UserVm updateVirtualMachineNic(UpdateVmNicCmd cmd);
|
||||||
|
|
||||||
UserVm recoverVirtualMachine(RecoverVMCmd cmd) throws ResourceAllocationException;
|
UserVm recoverVirtualMachine(RecoverVMCmd cmd) throws ResourceAllocationException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -524,6 +527,7 @@ public interface UserVmService {
|
||||||
* @param userId user ID
|
* @param userId user ID
|
||||||
* @param serviceOffering service offering for the imported VM
|
* @param serviceOffering service offering for the imported VM
|
||||||
* @param sshPublicKey ssh key for the imported VM
|
* @param sshPublicKey ssh key for the imported VM
|
||||||
|
* @param guestOsId guest OS ID for the imported VM (if not passed, then the guest OS of the template will be used)
|
||||||
* @param hostName the name for the imported VM
|
* @param hostName the name for the imported VM
|
||||||
* @param hypervisorType hypervisor type for the imported VM
|
* @param hypervisorType hypervisor type for the imported VM
|
||||||
* @param customParameters details for the imported VM
|
* @param customParameters details for the imported VM
|
||||||
|
|
@ -533,7 +537,7 @@ public interface UserVmService {
|
||||||
* @throws InsufficientCapacityException in case of errors
|
* @throws InsufficientCapacityException in case of errors
|
||||||
*/
|
*/
|
||||||
UserVm importVM(final DataCenter zone, final Host host, final VirtualMachineTemplate template, final String instanceNameInternal, final String displayName, final Account owner, final String userData, final Account caller, final Boolean isDisplayVm, final String keyboard,
|
UserVm importVM(final DataCenter zone, final Host host, final VirtualMachineTemplate template, final String instanceNameInternal, final String displayName, final Account owner, final String userData, final Account caller, final Boolean isDisplayVm, final String keyboard,
|
||||||
final long accountId, final long userId, final ServiceOffering serviceOffering, final String sshPublicKey,
|
final long accountId, final long userId, final ServiceOffering serviceOffering, final String sshPublicKey, final Long guestOsId,
|
||||||
final String hostName, final HypervisorType hypervisorType, final Map<String, String> customParameters,
|
final String hostName, final HypervisorType hypervisorType, final Map<String, String> customParameters,
|
||||||
final VirtualMachine.PowerState powerState, final LinkedHashMap<String, List<NicProfile>> networkNicMap) throws InsufficientCapacityException;
|
final VirtualMachine.PowerState powerState, final LinkedHashMap<String, List<NicProfile>> networkNicMap) throws InsufficientCapacityException;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -124,6 +124,9 @@ public interface VirtualMachine extends RunningOn, ControlledEntity, Partition,
|
||||||
s_fsm.addTransition(new Transition<State, Event>(State.Stopping, VirtualMachine.Event.StopRequested, State.Stopping, null));
|
s_fsm.addTransition(new Transition<State, Event>(State.Stopping, VirtualMachine.Event.StopRequested, State.Stopping, null));
|
||||||
s_fsm.addTransition(new Transition<State, Event>(State.Stopping, VirtualMachine.Event.AgentReportShutdowned, State.Stopped, Arrays.asList(new Impact[]{Impact.USAGE})));
|
s_fsm.addTransition(new Transition<State, Event>(State.Stopping, VirtualMachine.Event.AgentReportShutdowned, State.Stopped, Arrays.asList(new Impact[]{Impact.USAGE})));
|
||||||
s_fsm.addTransition(new Transition<State, Event>(State.Expunging, VirtualMachine.Event.OperationFailed, State.Expunging,null));
|
s_fsm.addTransition(new Transition<State, Event>(State.Expunging, VirtualMachine.Event.OperationFailed, State.Expunging,null));
|
||||||
|
// Note: In addition to the Stopped -> Error transition for failed VM creation,
|
||||||
|
// a VM can also transition from Expunging to Error on OperationFailedToError.
|
||||||
|
s_fsm.addTransition(new Transition<State, Event>(State.Expunging, VirtualMachine.Event.OperationFailedToError, State.Error, null));
|
||||||
s_fsm.addTransition(new Transition<State, Event>(State.Expunging, VirtualMachine.Event.ExpungeOperation, State.Expunging,null));
|
s_fsm.addTransition(new Transition<State, Event>(State.Expunging, VirtualMachine.Event.ExpungeOperation, State.Expunging,null));
|
||||||
s_fsm.addTransition(new Transition<State, Event>(State.Error, VirtualMachine.Event.DestroyRequested, State.Expunging, null));
|
s_fsm.addTransition(new Transition<State, Event>(State.Error, VirtualMachine.Event.DestroyRequested, State.Expunging, null));
|
||||||
s_fsm.addTransition(new Transition<State, Event>(State.Error, VirtualMachine.Event.ExpungeOperation, State.Expunging, null));
|
s_fsm.addTransition(new Transition<State, Event>(State.Error, VirtualMachine.Event.ExpungeOperation, State.Expunging, null));
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,9 @@ public interface VmDetailConstants {
|
||||||
String NIC_MULTIQUEUE_NUMBER = "nic.multiqueue.number";
|
String NIC_MULTIQUEUE_NUMBER = "nic.multiqueue.number";
|
||||||
String NIC_PACKED_VIRTQUEUES_ENABLED = "nic.packed.virtqueues.enabled";
|
String NIC_PACKED_VIRTQUEUES_ENABLED = "nic.packed.virtqueues.enabled";
|
||||||
|
|
||||||
|
// KVM specific, disk controllers
|
||||||
|
String KVM_SKIP_FORCE_DISK_CONTROLLER = "skip.force.disk.controller";
|
||||||
|
|
||||||
// Mac OSX guest specific (internal)
|
// Mac OSX guest specific (internal)
|
||||||
String SMC_PRESENT = "smc.present";
|
String SMC_PRESENT = "smc.present";
|
||||||
String FIRMWARE = "firmware";
|
String FIRMWARE = "firmware";
|
||||||
|
|
@ -93,6 +96,7 @@ public interface VmDetailConstants {
|
||||||
String CKS_NODE_TYPE = "node";
|
String CKS_NODE_TYPE = "node";
|
||||||
String OFFERING = "offering";
|
String OFFERING = "offering";
|
||||||
String TEMPLATE = "template";
|
String TEMPLATE = "template";
|
||||||
|
String AFFINITY_GROUP = "affinitygroup";
|
||||||
|
|
||||||
// VMware to KVM VM migrations specific
|
// VMware to KVM VM migrations specific
|
||||||
String VMWARE_TO_KVM_PREFIX = "vmware-to-kvm";
|
String VMWARE_TO_KVM_PREFIX = "vmware-to-kvm";
|
||||||
|
|
|
||||||
|
|
@ -29,10 +29,10 @@ import com.cloud.utils.fsm.StateObject;
|
||||||
public interface VMSnapshot extends ControlledEntity, Identity, InternalIdentity, StateObject<VMSnapshot.State> {
|
public interface VMSnapshot extends ControlledEntity, Identity, InternalIdentity, StateObject<VMSnapshot.State> {
|
||||||
|
|
||||||
enum State {
|
enum State {
|
||||||
Allocated("The VM snapshot is allocated but has not been created yet."), Creating("The VM snapshot is being created."), Ready(
|
Allocated("The Instance Snapshot is allocated but has not been created yet."), Creating("The Instance Snapshot is being created."), Ready(
|
||||||
"The VM snapshot is ready to be used."), Reverting("The VM snapshot is being used to revert"), Expunging("The volume is being expunging"), Removed(
|
"The Instance Snapshot is ready to be used."), Reverting("The Instance Snapshot is being used to revert"), Expunging("The volume is being expunging"), Removed(
|
||||||
"The volume is destroyed, and can't be recovered."), Error("The volume is in error state, and can't be recovered"),
|
"The volume is destroyed, and can't be recovered."), Error("The volume is in error state, and can't be recovered"),
|
||||||
Hidden("The VM snapshot is hidden from the user and cannot be recovered.");
|
Hidden("The Instance snapshot is hidden from the user and cannot be recovered.");
|
||||||
|
|
||||||
String _description;
|
String _description;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import com.cloud.exception.PermissionDeniedException;
|
||||||
import com.cloud.user.Account;
|
import com.cloud.user.Account;
|
||||||
import com.cloud.user.User;
|
import com.cloud.user.User;
|
||||||
import com.cloud.utils.component.Adapter;
|
import com.cloud.utils.component.Adapter;
|
||||||
|
import org.apache.cloudstack.acl.apikeypair.ApiKeyPairPermission;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -31,8 +32,8 @@ public interface APIChecker extends Adapter {
|
||||||
// If true, apiChecker has checked the operation
|
// If true, apiChecker has checked the operation
|
||||||
// If false, apiChecker is unable to handle the operation or not implemented
|
// If false, apiChecker is unable to handle the operation or not implemented
|
||||||
// On exception, checkAccess failed don't allow
|
// On exception, checkAccess failed don't allow
|
||||||
boolean checkAccess(User user, String apiCommandName) throws PermissionDeniedException;
|
boolean checkAccess(User user, String apiCommandName, ApiKeyPairPermission... apiKeyPairPermissions) throws PermissionDeniedException;
|
||||||
boolean checkAccess(Account account, String apiCommandName) throws PermissionDeniedException;
|
boolean checkAccess(Account account, String apiCommandName, ApiKeyPairPermission... apiKeyPairPermissions) throws PermissionDeniedException;
|
||||||
/**
|
/**
|
||||||
* Verifies if the account has permission for the given list of APIs and returns only the allowed ones.
|
* Verifies if the account has permission for the given list of APIs and returns only the allowed ones.
|
||||||
*
|
*
|
||||||
|
|
@ -43,4 +44,5 @@ public interface APIChecker extends Adapter {
|
||||||
*/
|
*/
|
||||||
List<String> getApisAllowedToUser(Role role, User user, List<String> apiNames) throws PermissionDeniedException;
|
List<String> getApisAllowedToUser(Role role, User user, List<String> apiNames) throws PermissionDeniedException;
|
||||||
boolean isEnabled();
|
boolean isEnabled();
|
||||||
|
List<RolePermissionEntity> getImplicitRolePermissions(RoleType roleType);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ import org.apache.cloudstack.api.Identity;
|
||||||
import org.apache.cloudstack.api.InternalIdentity;
|
import org.apache.cloudstack.api.InternalIdentity;
|
||||||
|
|
||||||
public interface RolePermissionEntity extends InternalIdentity, Identity {
|
public interface RolePermissionEntity extends InternalIdentity, Identity {
|
||||||
public enum Permission {
|
enum Permission {
|
||||||
ALLOW, DENY
|
ALLOW, DENY
|
||||||
}
|
}
|
||||||
Rule getRule();
|
Rule getRule();
|
||||||
|
|
|
||||||
|
|
@ -104,5 +104,26 @@ public interface RoleService {
|
||||||
|
|
||||||
List<RolePermission> findAllPermissionsBy(Long roleId);
|
List<RolePermission> findAllPermissionsBy(Long roleId);
|
||||||
|
|
||||||
|
List<RolePermissionEntity> findAllRolePermissionsEntityBy(Long roleId, boolean considerImplicitRules);
|
||||||
|
|
||||||
Permission getRolePermission(String permission);
|
Permission getRolePermission(String permission);
|
||||||
|
|
||||||
|
int removeRolesIfNeeded(List<? extends Role> roles);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the role of the caller account has compatible permissions of the specified role permissions.
|
||||||
|
* For each permission of the {@param rolePermissionsToAccess}, the role of the caller needs to contain the same permission.
|
||||||
|
*
|
||||||
|
* @param rolePermissions the permissions of the caller role.
|
||||||
|
* @param rolePermissionsToAccess the permissions for the role that the caller role wants to access.
|
||||||
|
* @return True if the role can be accessed with the given permissions; false otherwise.
|
||||||
|
*/
|
||||||
|
boolean roleHasPermission(Map<String, RolePermissionEntity> rolePermissions, List<RolePermissionEntity> rolePermissionsToAccess);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a list of role permissions, returns a {@link Map} containing the API name as the key and the {@link RolePermissionEntity} for the API as the value.
|
||||||
|
*
|
||||||
|
* @param rolePermissions Permissions for the role from role.
|
||||||
|
*/
|
||||||
|
Map<String, RolePermissionEntity> getRoleRulesAndPermissions(List<RolePermissionEntity> rolePermissions);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -132,10 +132,10 @@ public enum RoleType {
|
||||||
* */
|
* */
|
||||||
public static Account.Type getAccountTypeByRole(final Role role, final Account.Type defautAccountType) {
|
public static Account.Type getAccountTypeByRole(final Role role, final Account.Type defautAccountType) {
|
||||||
if (role != null) {
|
if (role != null) {
|
||||||
LOGGER.debug(String.format("Role [%s] is not null; therefore, we use its account type [%s].", role, defautAccountType));
|
LOGGER.debug("Role [{}] is not null; therefore, we use its Account type [{}].", role, defautAccountType);
|
||||||
return role.getRoleType().getAccountType();
|
return role.getRoleType().getAccountType();
|
||||||
}
|
}
|
||||||
LOGGER.debug(String.format("Role is null; therefore, we use the default account type [%s] value.", defautAccountType));
|
LOGGER.debug("Role is null; therefore, we use the default Account type [{}] value.", defautAccountType);
|
||||||
return defautAccountType;
|
return defautAccountType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,16 +25,18 @@ import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
public final class Rule {
|
public final class Rule {
|
||||||
private final String rule;
|
private final String rule;
|
||||||
|
private final Pattern matchingPattern;
|
||||||
private final static Pattern ALLOWED_PATTERN = Pattern.compile("^[a-zA-Z0-9*]+$");
|
private final static Pattern ALLOWED_PATTERN = Pattern.compile("^[a-zA-Z0-9*]+$");
|
||||||
|
|
||||||
public Rule(final String rule) {
|
public Rule(final String rule) {
|
||||||
validate(rule);
|
validate(rule);
|
||||||
this.rule = rule;
|
this.rule = rule;
|
||||||
|
matchingPattern = Pattern.compile(rule.toLowerCase().replace("*", "(\\w*\\*?)+"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean matches(final String commandName) {
|
public boolean matches(final String commandName) {
|
||||||
return StringUtils.isNotEmpty(commandName)
|
return StringUtils.isNotEmpty(commandName) &&
|
||||||
&& commandName.toLowerCase().matches(rule.toLowerCase().replace("*", "\\w*"));
|
matchingPattern.matcher(commandName.toLowerCase()).matches();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getRuleString() {
|
public String getRuleString() {
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@ import com.cloud.user.Account;
|
||||||
import com.cloud.user.User;
|
import com.cloud.user.User;
|
||||||
import com.cloud.utils.component.Adapter;
|
import com.cloud.utils.component.Adapter;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.backup.BackupOffering;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SecurityChecker checks the ownership and access control to objects within
|
* SecurityChecker checks the ownership and access control to objects within
|
||||||
*/
|
*/
|
||||||
|
|
@ -145,4 +147,6 @@ public interface SecurityChecker extends Adapter {
|
||||||
boolean checkAccess(Account account, NetworkOffering nof, DataCenter zone) throws PermissionDeniedException;
|
boolean checkAccess(Account account, NetworkOffering nof, DataCenter zone) throws PermissionDeniedException;
|
||||||
|
|
||||||
boolean checkAccess(Account account, VpcOffering vof, DataCenter zone) throws PermissionDeniedException;
|
boolean checkAccess(Account account, VpcOffering vof, DataCenter zone) throws PermissionDeniedException;
|
||||||
|
|
||||||
|
boolean checkAccess(Account account, BackupOffering bof) throws PermissionDeniedException;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
// Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
// or more contributor license agreements. See the NOTICE file
|
||||||
|
// distributed with this work for additional information
|
||||||
|
// regarding copyright ownership. The ASF licenses this file
|
||||||
|
// to you under the Apache License, Version 2.0 (the
|
||||||
|
// "License"); you may not use this file except in compliance
|
||||||
|
// with the License. You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing,
|
||||||
|
// software distributed under the License is distributed on an
|
||||||
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
// KIND, either express or implied. See the License for the
|
||||||
|
// specific language governing permissions and limitations
|
||||||
|
// under the License.
|
||||||
|
package org.apache.cloudstack.acl.apikeypair;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.acl.ControlledEntity;
|
||||||
|
import org.apache.cloudstack.api.Identity;
|
||||||
|
import org.apache.cloudstack.api.InternalIdentity;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
public interface ApiKeyPair extends ControlledEntity, InternalIdentity, Identity {
|
||||||
|
Long getUserId();
|
||||||
|
Date getStartDate();
|
||||||
|
Date getEndDate();
|
||||||
|
Date getCreated();
|
||||||
|
String getDescription();
|
||||||
|
String getApiKey();
|
||||||
|
String getSecretKey();
|
||||||
|
String getName();
|
||||||
|
Date getRemoved();
|
||||||
|
void setRemoved(Date date);
|
||||||
|
void validateDate();
|
||||||
|
boolean hasEndDatePassed();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
// Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
// or more contributor license agreements. See the NOTICE file
|
||||||
|
// distributed with this work for additional information
|
||||||
|
// regarding copyright ownership. The ASF licenses this file
|
||||||
|
// to you under the Apache License, Version 2.0 (the
|
||||||
|
// "License"); you may not use this file except in compliance
|
||||||
|
// with the License. You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing,
|
||||||
|
// software distributed under the License is distributed on an
|
||||||
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
// KIND, either express or implied. See the License for the
|
||||||
|
// specific language governing permissions and limitations
|
||||||
|
// under the License.
|
||||||
|
package org.apache.cloudstack.acl.apikeypair;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.acl.RolePermissionEntity;
|
||||||
|
|
||||||
|
public interface ApiKeyPairPermission extends RolePermissionEntity {
|
||||||
|
long getApiKeyPairId();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
// Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
// or more contributor license agreements. See the NOTICE file
|
||||||
|
// distributed with this work for additional information
|
||||||
|
// regarding copyright ownership. The ASF licenses this file
|
||||||
|
// to you under the Apache License, Version 2.0 (the
|
||||||
|
// "License"); you may not use this file except in compliance
|
||||||
|
// with the License. You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing,
|
||||||
|
// software distributed under the License is distributed on an
|
||||||
|
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
// KIND, either express or implied. See the License for the
|
||||||
|
// specific language governing permissions and limitations
|
||||||
|
// under the License.
|
||||||
|
package org.apache.cloudstack.acl.apikeypair;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface ApiKeyPairService {
|
||||||
|
List<ApiKeyPairPermission> findAllPermissionsByKeyPairId(Long apiKeyPairId, Long roleId);
|
||||||
|
|
||||||
|
ApiKeyPair findByApiKey(String apiKey);
|
||||||
|
|
||||||
|
ApiKeyPair findById(Long id);
|
||||||
|
}
|
||||||
|
|
@ -34,27 +34,27 @@ import com.cloud.serializer.Param;
|
||||||
public class AffinityGroupResponse extends BaseResponse implements ControlledViewEntityResponse {
|
public class AffinityGroupResponse extends BaseResponse implements ControlledViewEntityResponse {
|
||||||
|
|
||||||
@SerializedName(ApiConstants.ID)
|
@SerializedName(ApiConstants.ID)
|
||||||
@Param(description = "the ID of the affinity group")
|
@Param(description = "The ID of the affinity group")
|
||||||
private String id;
|
private String id;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.NAME)
|
@SerializedName(ApiConstants.NAME)
|
||||||
@Param(description = "the name of the affinity group")
|
@Param(description = "The name of the affinity group")
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.DESCRIPTION)
|
@SerializedName(ApiConstants.DESCRIPTION)
|
||||||
@Param(description = "the description of the affinity group")
|
@Param(description = "The description of the affinity group")
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.ACCOUNT)
|
@SerializedName(ApiConstants.ACCOUNT)
|
||||||
@Param(description = "the account owning the affinity group")
|
@Param(description = "The account owning the affinity group")
|
||||||
private String accountName;
|
private String accountName;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.DOMAIN_ID)
|
@SerializedName(ApiConstants.DOMAIN_ID)
|
||||||
@Param(description = "the domain ID of the affinity group")
|
@Param(description = "The domain ID of the affinity group")
|
||||||
private String domainId;
|
private String domainId;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.DOMAIN)
|
@SerializedName(ApiConstants.DOMAIN)
|
||||||
@Param(description = "the domain name of the affinity group")
|
@Param(description = "The domain name of the affinity group")
|
||||||
private String domainName;
|
private String domainName;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.DOMAIN_PATH)
|
@SerializedName(ApiConstants.DOMAIN_PATH)
|
||||||
|
|
@ -62,19 +62,19 @@ public class AffinityGroupResponse extends BaseResponse implements ControlledVie
|
||||||
private String domainPath;
|
private String domainPath;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.PROJECT_ID)
|
@SerializedName(ApiConstants.PROJECT_ID)
|
||||||
@Param(description = "the project ID of the affinity group")
|
@Param(description = "The project ID of the affinity group")
|
||||||
private String projectId;
|
private String projectId;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.PROJECT)
|
@SerializedName(ApiConstants.PROJECT)
|
||||||
@Param(description = "the project name of the affinity group")
|
@Param(description = "The project name of the affinity group")
|
||||||
private String projectName;
|
private String projectName;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.TYPE)
|
@SerializedName(ApiConstants.TYPE)
|
||||||
@Param(description = "the type of the affinity group")
|
@Param(description = "The type of the affinity group")
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
@SerializedName("virtualmachineIds")
|
@SerializedName("virtualmachineIds")
|
||||||
@Param(description = "virtual machine IDs associated with this affinity group")
|
@Param(description = "Instance IDs associated with this affinity group")
|
||||||
private List<String> vmIdList;
|
private List<String> vmIdList;
|
||||||
|
|
||||||
@SerializedName("dedicatedresources")
|
@SerializedName("dedicatedresources")
|
||||||
|
|
|
||||||
|
|
@ -66,5 +66,4 @@ public interface AffinityGroupService {
|
||||||
|
|
||||||
boolean isAffinityGroupAvailableInDomain(long affinityGroupId, long domainId);
|
boolean isAffinityGroupAvailableInDomain(long affinityGroupId, long domainId);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ import com.cloud.serializer.Param;
|
||||||
public class AffinityGroupTypeResponse extends BaseResponse {
|
public class AffinityGroupTypeResponse extends BaseResponse {
|
||||||
|
|
||||||
@SerializedName(ApiConstants.TYPE)
|
@SerializedName(ApiConstants.TYPE)
|
||||||
@Param(description = "the type of the affinity group")
|
@Param(description = "The type of the affinity group")
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
public AffinityGroupTypeResponse() {
|
public AffinityGroupTypeResponse() {
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue