mirror of https://github.com/apache/cloudstack.git
Merge branch 'main' into Backroll
This commit is contained in:
commit
dd07f56945
|
|
@ -59,11 +59,12 @@ github:
|
|||
- abh1sar
|
||||
- rosi-shapeblue
|
||||
- sudo87
|
||||
- erikbocks
|
||||
|
||||
protected_branches: ~
|
||||
|
||||
notifications:
|
||||
commits: commits@cloudstack.apache.org
|
||||
issues: commits@cloudstack.apache.org
|
||||
commits: commits@cloudstack.apache.org
|
||||
issues: commits@cloudstack.apache.org
|
||||
pullrequests: commits@cloudstack.apache.org
|
||||
discussions: users@cloudstack.apache.org
|
||||
discussions: users@cloudstack.apache.org
|
||||
|
|
|
|||
|
|
@ -18,9 +18,6 @@
|
|||
# MD001/heading-increment Heading levels should only increment by one level at a time
|
||||
MD001: false
|
||||
|
||||
# MD003/heading-style Heading style
|
||||
MD003: false
|
||||
|
||||
# MD004/ul-style Unordered list style
|
||||
MD004: false
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
# 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.
|
||||
---
|
||||
extends: relaxed
|
||||
|
||||
rules:
|
||||
line-length:
|
||||
max: 400 # Very forgiving for GitHub Actions and infrastructure files
|
||||
indentation: disable # Disable indentation checking for existing files
|
||||
comments: disable # Disable comment formatting checks
|
||||
brackets: disable # Disable bracket spacing checks
|
||||
colons:
|
||||
max-spaces-after: -1 # Allow any number of spaces after colon
|
||||
max-spaces-before: 0
|
||||
document-start: disable # Many files don't have ---
|
||||
truthy:
|
||||
allowed-values: ['true', 'false', 'on', 'off', 'yes', 'no']
|
||||
|
|
@ -4,6 +4,7 @@ acount
|
|||
actuall
|
||||
acuiring
|
||||
acumulate
|
||||
addin
|
||||
addreess
|
||||
addtion
|
||||
adminstrator
|
||||
|
|
@ -12,10 +13,8 @@ afrer
|
|||
afterall
|
||||
againt
|
||||
ags
|
||||
aktive
|
||||
algoritm
|
||||
allo
|
||||
alloacate
|
||||
allocted
|
||||
alocation
|
||||
alogrithm
|
||||
|
|
@ -65,6 +64,7 @@ bject
|
|||
boardcast
|
||||
bootstraper
|
||||
bu
|
||||
callin
|
||||
cant
|
||||
capabilites
|
||||
capablity
|
||||
|
|
@ -73,6 +73,7 @@ carrefully
|
|||
cavaet
|
||||
chaing
|
||||
checkd
|
||||
checkin
|
||||
childs
|
||||
choosen
|
||||
chould
|
||||
|
|
@ -93,7 +94,6 @@ confg
|
|||
configruation
|
||||
configuable
|
||||
conneciton
|
||||
connexion
|
||||
constrait
|
||||
constraits
|
||||
containg
|
||||
|
|
@ -101,9 +101,7 @@ contex
|
|||
continuesly
|
||||
contro
|
||||
controler
|
||||
controles
|
||||
controll
|
||||
convienient
|
||||
convinience
|
||||
coputer
|
||||
correcponding
|
||||
|
|
@ -158,13 +156,13 @@ differnet
|
|||
differnt
|
||||
direcotry
|
||||
directroy
|
||||
disale
|
||||
disbale
|
||||
discrepency
|
||||
disover
|
||||
dissapper
|
||||
dissassociated
|
||||
divice
|
||||
dockin
|
||||
doesn'
|
||||
doesnot
|
||||
doesnt
|
||||
|
|
@ -175,7 +173,6 @@ eanbled
|
|||
earch
|
||||
ect
|
||||
elemnt
|
||||
eles
|
||||
elments
|
||||
emmited
|
||||
enble
|
||||
|
|
@ -183,29 +180,23 @@ encryted
|
|||
enebled
|
||||
enmpty
|
||||
entires
|
||||
enviornment
|
||||
environmnet
|
||||
equivalant
|
||||
erro
|
||||
erronous
|
||||
everthing
|
||||
everytime
|
||||
excetion
|
||||
excption
|
||||
excute
|
||||
execept
|
||||
execption
|
||||
exects
|
||||
execut
|
||||
executeable
|
||||
exeeded
|
||||
exisitng
|
||||
exisits
|
||||
existin
|
||||
existsing
|
||||
exitting
|
||||
expcted
|
||||
expection
|
||||
explaination
|
||||
explicitely
|
||||
faield
|
||||
faild
|
||||
|
|
@ -218,7 +209,6 @@ fillled
|
|||
findout
|
||||
fisrt
|
||||
fo
|
||||
folowing
|
||||
fowarding
|
||||
frist
|
||||
fro
|
||||
|
|
@ -237,6 +227,7 @@ hanling
|
|||
happend
|
||||
hasing
|
||||
hasnt
|
||||
havin
|
||||
hda
|
||||
hostanme
|
||||
hould
|
||||
|
|
@ -256,18 +247,13 @@ implmeneted
|
|||
implmentation
|
||||
incase
|
||||
includeing
|
||||
incosistency
|
||||
indecates
|
||||
indien
|
||||
infor
|
||||
informations
|
||||
informaton
|
||||
infrastrcuture
|
||||
ingore
|
||||
inital
|
||||
initalize
|
||||
initator
|
||||
initilization
|
||||
inspite
|
||||
instace
|
||||
instal
|
||||
|
|
@ -287,12 +273,8 @@ ist
|
|||
klunky
|
||||
lable
|
||||
leve
|
||||
lief
|
||||
limite
|
||||
linke
|
||||
listner
|
||||
lokal
|
||||
lokales
|
||||
maintainence
|
||||
maintenace
|
||||
maintenence
|
||||
|
|
@ -301,7 +283,6 @@ mambers
|
|||
manaully
|
||||
manuel
|
||||
maxium
|
||||
mehtod
|
||||
mergable
|
||||
mesage
|
||||
messge
|
||||
|
|
@ -311,7 +292,6 @@ minumum
|
|||
mis
|
||||
modifers
|
||||
mor
|
||||
mot
|
||||
mulitply
|
||||
multipl
|
||||
multple
|
||||
|
|
@ -325,7 +305,7 @@ nin
|
|||
nodel
|
||||
nome
|
||||
noone
|
||||
nowe
|
||||
notin
|
||||
numbe
|
||||
numer
|
||||
occured
|
||||
|
|
@ -378,6 +358,7 @@ propogate
|
|||
provison
|
||||
psudo
|
||||
pyhsical
|
||||
re-use
|
||||
readabilty
|
||||
readd
|
||||
reccuring
|
||||
|
|
@ -392,11 +373,9 @@ remaning
|
|||
remore
|
||||
remvoing
|
||||
renabling
|
||||
repeatly
|
||||
reponse
|
||||
reqest
|
||||
reqiured
|
||||
requieres
|
||||
requried
|
||||
reserv
|
||||
reserverd
|
||||
|
|
@ -414,17 +393,15 @@ retriving
|
|||
retrun
|
||||
retuned
|
||||
returing
|
||||
re-use
|
||||
rever
|
||||
rocessor
|
||||
roperty
|
||||
runing
|
||||
runnign
|
||||
sate
|
||||
scalled
|
||||
scipt
|
||||
scirpt
|
||||
scrip
|
||||
seconadry
|
||||
seconday
|
||||
seesion
|
||||
sepcified
|
||||
|
|
@ -437,12 +414,10 @@ settig
|
|||
sevices
|
||||
shoul
|
||||
shoule
|
||||
sie
|
||||
signle
|
||||
simplier
|
||||
singature
|
||||
skiping
|
||||
snaphsot
|
||||
snpashot
|
||||
specied
|
||||
specifed
|
||||
|
|
@ -453,7 +428,6 @@ standy
|
|||
statics
|
||||
stickyness
|
||||
stil
|
||||
stip
|
||||
storeage
|
||||
strat
|
||||
streched
|
||||
|
|
@ -462,7 +436,6 @@ succesfull
|
|||
successfull
|
||||
suceessful
|
||||
suces
|
||||
sucessfully
|
||||
suiteable
|
||||
suppots
|
||||
suppport
|
||||
|
|
@ -495,7 +468,6 @@ uncompressible
|
|||
uneccessarily
|
||||
unexepected
|
||||
unexpect
|
||||
unknow
|
||||
unkonw
|
||||
unkown
|
||||
unneccessary
|
||||
|
|
@ -503,14 +475,12 @@ unparseable
|
|||
unrecoginized
|
||||
unsupport
|
||||
unxpected
|
||||
updat
|
||||
uptodate
|
||||
usera
|
||||
usign
|
||||
usin
|
||||
utlization
|
||||
vaidate
|
||||
valiate
|
||||
valule
|
||||
valus
|
||||
varibles
|
||||
|
|
@ -519,8 +489,6 @@ verfying
|
|||
verifing
|
||||
virutal
|
||||
visable
|
||||
wakup
|
||||
wil
|
||||
wit
|
||||
wll
|
||||
wth
|
||||
|
|
|
|||
|
|
@ -30,17 +30,17 @@ jobs:
|
|||
build:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
cache: 'maven'
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: '3.10'
|
||||
architecture: 'x64'
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ permissions:
|
|||
jobs:
|
||||
build:
|
||||
if: github.repository == 'apache/cloudstack'
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
|
@ -216,19 +216,19 @@ jobs:
|
|||
smoke/test_list_volumes"]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
cache: 'maven'
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: '3.10'
|
||||
architecture: 'x64'
|
||||
|
|
@ -236,7 +236,25 @@ jobs:
|
|||
- name: Install Build Dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y git uuid-runtime genisoimage netcat ipmitool build-essential libgcrypt20 libgpg-error-dev libgpg-error0 libopenipmi0 ipmitool libpython3-dev libssl-dev libffi-dev python3-openssl python3-dev python3-setuptools
|
||||
sudo apt-get install -y git uuid-runtime genisoimage netcat-openbsd ipmitool build-essential libgcrypt20 libgpg-error-dev libgpg-error0 libopenipmi0 ipmitool libpython3-dev libssl-dev libffi-dev python3-openssl python3-dev python3-setuptools
|
||||
|
||||
- name: Setup IPMI Tool for CloudStack
|
||||
run: |
|
||||
# Create cloudstack-common directory if it doesn't exist
|
||||
sudo mkdir -p /usr/share/cloudstack-common
|
||||
|
||||
# Copy ipmitool to cloudstack-common directory if it doesn't exist
|
||||
if [ ! -f /usr/share/cloudstack-common/ipmitool ]; then
|
||||
sudo cp /usr/bin/ipmitool /usr/share/cloudstack-common/ipmitool
|
||||
sudo chmod 755 /usr/share/cloudstack-common/ipmitool
|
||||
fi
|
||||
|
||||
# Create ipmitool-C3 wrapper script
|
||||
sudo tee /usr/bin/ipmitool > /dev/null << 'EOF'
|
||||
#!/bin/bash
|
||||
/usr/share/cloudstack-common/ipmitool -C3 $@
|
||||
EOF
|
||||
sudo chmod 755 /usr/bin/ipmitool
|
||||
|
||||
- name: Install Python dependencies
|
||||
run: |
|
||||
|
|
@ -275,7 +293,7 @@ jobs:
|
|||
- name: Setup Simulator Prerequisites
|
||||
run: |
|
||||
sudo python3 -m pip install --upgrade netaddr mysql-connector-python
|
||||
python3 -m pip install --user --upgrade tools/marvin/dist/Marvin-*.tar.gz
|
||||
python3 -m pip install --user --upgrade tools/marvin/dist/[mM]arvin-*.tar.gz
|
||||
mvn -q -Pdeveloper -pl developer -Ddeploydb
|
||||
mvn -q -Pdeveloper -pl developer -Ddeploydb-simulator
|
||||
|
||||
|
|
|
|||
|
|
@ -32,12 +32,12 @@ jobs:
|
|||
name: codecov
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ jobs:
|
|||
language: ["actions"]
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ jobs:
|
|||
- name: Set Docker repository name
|
||||
run: echo "DOCKER_REPOSITORY=apache" >> $GITHUB_ENV
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Set ACS version
|
||||
run: echo "ACS_VERSION=$(grep '<version>' pom.xml | head -2 | tail -1 | cut -d'>' -f2 |cut -d'<' -f1)" >> $GITHUB_ENV
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
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.
|
||||
|
|
@ -32,12 +32,12 @@ jobs:
|
|||
name: Main Sonar JaCoCo Build
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up JDK17
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ jobs:
|
|||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Check Out
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
- name: Install
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
|
|
@ -44,4 +44,6 @@ jobs:
|
|||
path: ~/.cache/pre-commit
|
||||
key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}
|
||||
- name: Run pre-commit
|
||||
run: pre-commit run --all-files
|
||||
run: pre-commit run --color=always --all-files
|
||||
- name: Run manual pre-commit hooks
|
||||
run: pre-commit run --color=always --all-files --hook-stage manual
|
||||
|
|
@ -30,9 +30,9 @@ jobs:
|
|||
build:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
- name: Set up JDK 17
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
java-version: '17'
|
||||
distribution: 'adopt'
|
||||
|
|
|
|||
|
|
@ -33,13 +33,13 @@ jobs:
|
|||
name: Sonar JaCoCo Coverage
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
ref: "refs/pull/${{ github.event.number }}/merge"
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up JDK17
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
|
|
|
|||
|
|
@ -31,10 +31,10 @@ jobs:
|
|||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v5
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
CHANGES.md
|
||||
|
|
@ -25,18 +25,79 @@ repos:
|
|||
hooks:
|
||||
- id: identity
|
||||
- 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
|
||||
rev: v9.1.5
|
||||
hooks:
|
||||
- id: oxipng
|
||||
name: run oxipng
|
||||
description: optimize PNG images with lossless compression
|
||||
args: ['-o', '4', '--strip', 'safe', '--alpha']
|
||||
- repo: https://github.com/gitleaks/gitleaks
|
||||
rev: v8.27.2
|
||||
hooks:
|
||||
- id: gitleaks
|
||||
name: run gitleaks
|
||||
description: detect hardcoded secrets
|
||||
- repo: https://github.com/Lucas-C/pre-commit-hooks
|
||||
rev: v1.5.5
|
||||
hooks:
|
||||
- id: chmod
|
||||
name: set file permissions
|
||||
args: ['644']
|
||||
files: \.md$
|
||||
stages: [manual]
|
||||
- id: insert-license
|
||||
name: add license for all Markdown files
|
||||
files: \.md$
|
||||
args:
|
||||
- --comment-style
|
||||
- '<!--|| -->'
|
||||
- --license-filepath
|
||||
- .github/workflows/license-templates/LICENSE.txt
|
||||
- --fuzzy-match-generates-todo
|
||||
exclude: ^(CHANGES|ISSUE_TEMPLATE|PULL_REQUEST_TEMPLATE)\.md$|^ui/docs/(full|smoke)-test-plan\.template\.md$
|
||||
- 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 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
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v5.0.0
|
||||
rev: v6.0.0
|
||||
hooks:
|
||||
#- id: check-added-large-files
|
||||
- id: check-case-conflict
|
||||
#- id: check-executables-have-shebangs
|
||||
- id: check-illegal-windows-names
|
||||
- id: check-merge-conflict
|
||||
- id: check-shebang-scripts-are-executable
|
||||
files: \.sh$
|
||||
|
|
@ -50,7 +111,7 @@ repos:
|
|||
exclude: >
|
||||
(?x)
|
||||
^scripts/vm/systemvm/id_rsa\.cloud$|
|
||||
^server/src/test/java/org/apache/cloudstack/network/ssl/CertServiceTest.java$|
|
||||
^server/src/test/java/org/apache/cloudstack/network/ssl/CertServiceTest\.java$|
|
||||
^server/src/test/java/com/cloud/keystore/KeystoreTest\.java$|
|
||||
^server/src/test/resources/certs/dsa_self_signed\.key$|
|
||||
^server/src/test/resources/certs/non_root\.key$|
|
||||
|
|
@ -61,19 +122,21 @@ repos:
|
|||
^services/console-proxy/rdpconsole/src/test/doc/rdp-key\.pem$|
|
||||
^systemvm/agent/certs/localhost\.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
|
||||
exclude: \.vhd$
|
||||
exclude: \.vhd$|\.svg$
|
||||
- id: file-contents-sorter
|
||||
args: [--unique]
|
||||
files: ^\.github/linters/codespell\.txt$
|
||||
- id: fix-byte-order-marker
|
||||
- id: forbid-submodules
|
||||
- id: mixed-line-ending
|
||||
exclude: \.cs$
|
||||
- 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$
|
||||
args: [--markdown-linebreak-ext=md]
|
||||
exclude: ^services/console-proxy/rdpconsole/src/test/doc/freerdp-debug-log\.txt$
|
||||
- repo: https://github.com/codespell-project/codespell
|
||||
rev: v2.2.6
|
||||
rev: v2.4.1
|
||||
hooks:
|
||||
- id: codespell
|
||||
name: run codespell
|
||||
|
|
@ -94,3 +157,13 @@ repos:
|
|||
args: [--config=.github/linters/.markdown-lint.yml]
|
||||
types: [markdown]
|
||||
files: \.(md|mdown|markdown)$
|
||||
- repo: https://github.com/adrienverge/yamllint
|
||||
rev: v1.37.1
|
||||
hooks:
|
||||
- id: yamllint
|
||||
name: run yamllint
|
||||
description: check YAML files with yamllint
|
||||
args: [--config-file=.github/linters/.yamllint.yml]
|
||||
types: [yaml]
|
||||
files: \.ya?ml$
|
||||
exclude: ^.*k8s-.*\.ya?ml$
|
||||
|
|
|
|||
|
|
@ -644,12 +644,12 @@ Bug ID | Description
|
|||
Version 4.2.1
|
||||
-------------
|
||||
|
||||
Release notes contain the list of [bug fixes](http://cloudstack.apache.org/docs/en-US/Apache_CloudStack/4.2.1/html/Release_Notes/version-4.2.html#issues-fixed-4.2.1)
|
||||
Release notes contain the list of [bug fixes](https://cloudstack.apache.org/docs/en-US/Apache_CloudStack/4.2.1/html/Release_Notes/version-4.2.html#issues-fixed-4.2.1)
|
||||
|
||||
Version 4.2.0
|
||||
-------------
|
||||
Released on October 1 2013.
|
||||
Release notes contain the list of [bug fixes](http://cloudstack.apache.org/docs/en-US/Apache_CloudStack/4.2.0/html/Release_Notes/index.html)
|
||||
Release notes contain the list of [bug fixes](https://cloudstack.apache.org/docs/en-US/Apache_CloudStack/4.2.0/html/Release_Notes/index.html)
|
||||
|
||||
Version 4.1.0
|
||||
-------------
|
||||
|
|
|
|||
|
|
@ -1,31 +1,65 @@
|
|||
Contributing to Apache CloudStack (ACS)
|
||||
=======================================
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
# Contributing to Apache CloudStack (ACS)
|
||||
|
||||
## 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
|
||||
|
||||
Summary
|
||||
-------
|
||||
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.
|
||||
|
||||
_Let's get started!!!_
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
## Bug fixes
|
||||
|
||||
It's very important that we can easily track bug fix commits, so their hashes should remain the same in all branches.
|
||||
Therefore, a pull request (PR) that fixes a bug, should be sent against a release branch.
|
||||
This can be either the "current release" or the "previous release", depending on which ones are maintained.
|
||||
Since the goal is a stable main, bug fixes should be "merged forward" to the next branch in order: "previous release" -> "current release" -> main (in other words: old to new)
|
||||
|
||||
Developing new features
|
||||
-----------------------
|
||||
## Developing new features
|
||||
|
||||
Development should be done in a feature branch, branched off of main.
|
||||
Send a PR(steps below) to get it into main (2x LGTM applies).
|
||||
PR will only be merged when main is open, will be held otherwise until main is open again.
|
||||
No back porting / cherry-picking features to existing branches!
|
||||
|
||||
PendingReleaseNotes file
|
||||
------------------------
|
||||
## PendingReleaseNotes file
|
||||
|
||||
When developing a new feature or making a (major) change to an existing feature you are encouraged to append this to the PendingReleaseNotes file so that the Release Manager can
|
||||
use this file as a source of information when compiling the Release Notes for a new release.
|
||||
|
||||
|
|
@ -33,8 +67,7 @@ When adding information to the PendingReleaseNotes file make sure that you write
|
|||
|
||||
Updating the PendingReleaseNotes file is preferably a part of the original Pull Request, but that is up to the developers' discretion.
|
||||
|
||||
Fork the code
|
||||
-------------
|
||||
## Fork the code
|
||||
|
||||
In your browser, navigate to: [https://github.com/apache/cloudstack](https://github.com/apache/cloudstack)
|
||||
|
||||
|
|
@ -51,8 +84,7 @@ $ git fetch upstream
|
|||
$ git rebase upstream/main
|
||||
```
|
||||
|
||||
Making changes
|
||||
--------------
|
||||
## Making changes
|
||||
|
||||
It is important that you create a new branch to make changes on and that you do not change the `main` branch (other than to rebase in changes from `upstream/main`). In this example I will assume you will be making your changes to a branch called `feature_x`. This `feature_x` branch will be created on your local repository and will be pushed to your forked repository on GitHub. Once this branch is on your fork you will create a Pull Request for the changes to be added to the ACS project.
|
||||
|
||||
|
|
@ -68,8 +100,7 @@ $ git commit -a -m "descriptive commit message for your changes"
|
|||
|
||||
> The `-b` specifies that you want to create a new branch called `feature_x`. You only specify `-b` the first time you checkout because you are creating a new branch. Once the `feature_x` branch exists, you can later switch to it with only `git checkout feature_x`.
|
||||
|
||||
Rebase `feature_x` to include updates from `upstream/main`
|
||||
------------------------------------------------------------
|
||||
## Rebase `feature_x` to include updates from `upstream/main`
|
||||
|
||||
It is important that you maintain an up-to-date `main` branch in your local repository. This is done by rebasing in the code changes from `upstream/main` (the official ACS project repository) into your local repository. You will want to do this before you start working on a feature as well as right before you submit your changes as a pull request. I recommend you do this process periodically while you work to make sure you are working off the most recent project code.
|
||||
|
||||
|
|
@ -89,8 +120,7 @@ $ git rebase main
|
|||
|
||||
> Now your `feature_x` branch is up-to-date with all the code in `upstream/main`.
|
||||
|
||||
Make a GitHub Pull Request to contribute your changes
|
||||
-----------------------------------------------------
|
||||
## Make a GitHub Pull Request to contribute your changes
|
||||
|
||||
When you are happy with your changes, and you are ready to contribute them, you will create a Pull Request on GitHub to do so. This is done by pushing your local changes to your forked repository (default remote name is `origin`) and then initiating a pull request on GitHub.
|
||||
|
||||
|
|
@ -114,8 +144,7 @@ To initiate the pull request, do the following:
|
|||
|
||||
If you are requested to make modifications to your proposed changes, make the changes locally on your `feature_x` branch, re-push the `feature_x` branch to your fork. The existing pull request should automatically pick up the change and update accordingly.
|
||||
|
||||
Cleaning up after a successful pull request
|
||||
-------------------------------------------
|
||||
## Cleaning up after a successful pull request
|
||||
|
||||
Once the `feature_x` branch has been committed into the `upstream/main` branch, your local `feature_x` branch and the `origin/feature_x` branch are no longer needed. If you want to make additional changes, restart the process with a new branch.
|
||||
|
||||
|
|
@ -129,6 +158,6 @@ $ git branch -D feature_x
|
|||
$ git push origin :feature_x
|
||||
```
|
||||
|
||||
Release Principles
|
||||
------------------
|
||||
## Release Principles
|
||||
|
||||
Detailed information about ACS release principles is available at https://cwiki.apache.org/confluence/display/CLOUDSTACK/Release+principles+for+Apache+CloudStack+4.6+and+up
|
||||
|
|
|
|||
43
INSTALL.md
43
INSTALL.md
|
|
@ -1,15 +1,46 @@
|
|||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
# Apache CloudStack Installation basics
|
||||
|
||||
This document describes how to develop, build, package and install Apache
|
||||
CloudStack. For more information please refer to the official [documentation](http://docs.cloudstack.apache.org)
|
||||
CloudStack. For more information please refer to the official [documentation](https://docs.cloudstack.apache.org)
|
||||
or the developer [wiki](https://cwiki.apache.org/confluence/display/CLOUDSTACK/Home).
|
||||
|
||||
Apache CloudStack developers use various platforms for development, this guide
|
||||
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.
|
||||
* [Building](https://cwiki.apache.org/confluence/display/CLOUDSTACK/How+to+build+CloudStack) Apache CloudStack.
|
||||
* [Appliance based development](https://github.com/rhtyd/monkeybox)
|
||||
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
||||
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
||||
|
||||
- [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
|
||||
|
||||
|
|
@ -41,7 +72,7 @@ Start the MySQL service:
|
|||
|
||||
### Using jenv and/or pyenv for Version Management
|
||||
|
||||
CloudStack is built using Java and Python. To make selection of these tools versions more consistent and ease installation for developers, optional support for [jenv](http://www.jenv.be/) and [pyenv](https://github.com/yyuu/pyenv) with [virtualenv]|(https://github.com/yyuu/pyenv-virtualenv) is provided. jenv installation instructions are available here and pyenv installation instructions are available here. For users of [oh-my-zsh](http://ohmyz.sh/) there is a pyenv plugin available to trigger configuration of pyenv in a shell session.
|
||||
CloudStack is built using Java and Python. To make selection of these tools versions more consistent and ease installation for developers, optional support for [jenv](http://www.jenv.be/) and [pyenv](https://github.com/yyuu/pyenv) with [virtualenv]|(https://github.com/yyuu/pyenv-virtualenv) is provided. jenv installation instructions are available here and pyenv installation instructions are available here. For users of [oh-my-zsh](https://ohmyz.sh/) there is a pyenv plugin available to trigger configuration of pyenv in a shell session.
|
||||
|
||||
Following installation, execute the following commands to configure jenv and pyenv for use with CloudStack development:
|
||||
|
||||
|
|
@ -171,7 +202,7 @@ All the rpm packages will be created in `dist/rpmbuild/RPMS/x86_64` directory.
|
|||
|
||||
## Notes
|
||||
|
||||
If you will be using Xen as your hypervisor, please download [vhd-util](http://download.cloudstack.org/tools/vhd-util)
|
||||
If you will be using Xen as your hypervisor, please download [vhd-util](https://download.cloudstack.org/tools/vhd-util)
|
||||
|
||||
If management server is installed on RHEL/CentOS, then copy vhd-util into:
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,62 @@
|
|||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
# pre-commit
|
||||
|
||||
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
|
||||
local machine is currently optional.
|
||||
|
||||
The `pre-commit` [configuration file](https://github.com/apache/cloudstack/blob/main/.pre-commit-config.yaml)
|
||||
is in the repository root. Before you can run the hooks, you need to have `pre-commit` installed. `pre-commit` is a
|
||||
[Python package](https://pypi.org/project/pre-commit/).
|
||||
|
||||
From the repository root run: `pip install -r requirements-dev.txt` to install `pre-commit` and after you install
|
||||
`pre-commit` you will then need to install the pre-commit hooks by running `pre-commit install`.
|
||||
|
||||
The hooks run when running `git commit` and also from the command line with `pre-commit`. Some of the hooks will auto
|
||||
fix the code after the hooks fail whilst most will print error messages from the linters. If a hook fails the overall
|
||||
commit will fail, and you will need to fix the issues or problems and `git add` and `git commit` again. On `git commit`
|
||||
the hooks will run mostly only against modified files so if you want to test all hooks against all files and when you
|
||||
are adding a new hook you should always run:
|
||||
|
||||
`pre-commit run --all-files`
|
||||
|
||||
Sometimes you might need to skip a hook to commit because the hook is stopping you from committing or your computer
|
||||
might not have all the installation requirements for all the hooks. The `SKIP` variable is comma separated for two or
|
||||
more hooks:
|
||||
|
||||
`SKIP=codespell git commit -m "foo"`
|
||||
|
||||
The same applies when running pre-commit:
|
||||
|
||||
`SKIP=codespell pre-commit run --all-files`
|
||||
|
||||
Occasionally you can have more serious problems when using `pre-commit` with `git commit`. You can use `--no-verify` to
|
||||
commit and stop `pre-commit` from checking the hooks. For example:
|
||||
|
||||
`git commit --no-verify -m "foo"`
|
||||
|
||||
If you are having major problems using `pre-commit` you can always uninstall it.
|
||||
|
||||
To run a single hook use `pre-commit run --all-files <hook_id>`
|
||||
|
||||
For example just run the `codespell` hook:
|
||||
|
||||
`pre-commit run --all-files codespell`
|
||||
|
|
@ -22,8 +22,8 @@ This PR...
|
|||
- [ ] Bug fix (non-breaking change which fixes an issue)
|
||||
- [ ] Enhancement (improves an existing feature and functionality)
|
||||
- [ ] Cleanup (Code refactoring and cleanup, that may add test cases)
|
||||
- [ ] build/CI
|
||||
- [ ] test (unit or integration test code)
|
||||
- [ ] Build/CI
|
||||
- [ ] Test (unit or integration test code)
|
||||
|
||||
### Feature/Enhancement Scale or Bug Severity
|
||||
|
||||
|
|
|
|||
47
README.md
47
README.md
|
|
@ -1,3 +1,22 @@
|
|||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
# Apache CloudStack
|
||||
|
||||
[](https://github.com/apache/cloudstack/actions/workflows/build.yml)
|
||||
|
|
@ -12,6 +31,24 @@
|
|||
|
||||
[](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
|
||||
networks of virtual machines, as a highly available, highly scalable
|
||||
Infrastructure as a Service (IaaS) cloud computing platform. CloudStack is used
|
||||
|
|
@ -31,7 +68,7 @@ OVM and LXC containers.
|
|||
Users can manage their cloud with an easy to use Web interface, command line
|
||||
tools, and/or a full-featured query based API.
|
||||
|
||||
For more information on Apache CloudStack, please visit the [website](http://cloudstack.apache.org)
|
||||
For more information on Apache CloudStack, please visit the [website](https://cloudstack.apache.org)
|
||||
|
||||
## Who Uses CloudStack?
|
||||
|
||||
|
|
@ -88,10 +125,10 @@ via GitHub pull requests.
|
|||
## Getting Involved and Contributing
|
||||
|
||||
Interested in helping out with Apache CloudStack? Great! We welcome
|
||||
participation from anybody willing to work [The Apache Way](http://theapacheway.com) and make a
|
||||
participation from anybody willing to work [The Apache Way](https://theapacheway.com) and make a
|
||||
contribution. Note that you do not have to be a developer in order to contribute
|
||||
to Apache CloudStack. We need folks to help with documentation, translation,
|
||||
promotion etc. See our contribution [page](http://cloudstack.apache.org/contribute.html).
|
||||
promotion etc. See our contribution [page](https://cloudstack.apache.org/contribute.html).
|
||||
|
||||
If you are a frequent contributors, you can request to be added as collaborators
|
||||
(see https://cwiki.apache.org/confluence/display/INFRA/Git+-+.asf.yaml+features#Git.asf.yamlfeatures-AssigningexternalcollaboratorswiththetriageroleonGitHub)
|
||||
|
|
@ -102,7 +139,7 @@ You may do so by sharing your GitHub users ID or raise a GitHub issue.
|
|||
|
||||
If you're interested in learning more or participating in the Apache CloudStack
|
||||
project, the mailing lists are the best way to do that. While the project has
|
||||
several communications channels, the [mailing lists](http://cloudstack.apache.org/mailing-lists.html) are the most active and the
|
||||
several communications channels, the [mailing lists](https://cloudstack.apache.org/mailing-lists.html) are the most active and the
|
||||
official channels for making decisions about the project itself.
|
||||
|
||||
Mailing lists:
|
||||
|
|
@ -122,7 +159,7 @@ released version of CloudStack, please report it to `security@apache.org` with
|
|||
details about the vulnerability, how it might be exploited, and any additional
|
||||
information that might be useful.
|
||||
|
||||
For more details, please visit our security [page](http://cloudstack.apache.org/security.html).
|
||||
For more details, please visit our security [page](https://cloudstack.apache.org/security.html).
|
||||
|
||||
## License
|
||||
|
||||
|
|
|
|||
|
|
@ -451,3 +451,9 @@ iscsi.session.cleanup.enabled=false
|
|||
|
||||
# If set to true, creates VMs as full clones of their templates on KVM hypervisor. Creates as linked clones otherwise.
|
||||
# create.full.clone=false
|
||||
|
||||
# Instance conversion TMPDIR env var
|
||||
#convert.instance.env.tmpdir=
|
||||
|
||||
# Instance conversion VIRT_V2V_TMPDIR env var
|
||||
#convert.instance.env.virtv2v.tmpdir=
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
<parent>
|
||||
<groupId>org.apache.cloudstack</groupId>
|
||||
<artifactId>cloudstack</artifactId>
|
||||
<version>4.22.0.0-SNAPSHOT</version>
|
||||
<version>4.23.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -613,7 +613,7 @@ public class Agent implements HandlerFactory, IAgentControl, AgentStatusUpdater
|
|||
}
|
||||
|
||||
protected String getAgentArch() {
|
||||
String arch = Script.runSimpleBashScript(Script.getExecutableAbsolutePath("arch"), 1000);
|
||||
String arch = Script.runSimpleBashScript(Script.getExecutableAbsolutePath("arch"), 2000);
|
||||
logger.debug("Arch for agent: {} found: {}", _name, arch);
|
||||
return arch;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ public class AgentProperties{
|
|||
|
||||
/**
|
||||
* 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>
|
||||
* Default value: <code>/var/lib/libvirt/images/</code>
|
||||
*/
|
||||
|
|
@ -134,7 +134,7 @@ public class AgentProperties{
|
|||
|
||||
/**
|
||||
* 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>
|
||||
* Default value: <code>null</code>
|
||||
*/
|
||||
|
|
@ -794,6 +794,20 @@ public class AgentProperties{
|
|||
*/
|
||||
public static final Property<Boolean> VIRTV2V_VERBOSE_ENABLED = new Property<>("virtv2v.verbose.enabled", false);
|
||||
|
||||
/**
|
||||
* Set env TMPDIR var for virt-v2v Instance Conversion from VMware to KVM
|
||||
* Data type: String.<br>
|
||||
* Default value: <code>null</code>
|
||||
*/
|
||||
public static final Property<String> CONVERT_ENV_TMPDIR = new Property<>("convert.instance.env.tmpdir", null, String.class);
|
||||
|
||||
/**
|
||||
* Set env VIRT_V2V_TMPDIR var for virt-v2v Instance Conversion from VMware to KVM
|
||||
* Data type: String.<br>
|
||||
* Default value: <code>null</code>
|
||||
*/
|
||||
public static final Property<String> CONVERT_ENV_VIRTV2V_TMPDIR = new Property<>("convert.instance.env.virtv2v.tmpdir", null, String.class);
|
||||
|
||||
/**
|
||||
* BGP controll CIDR
|
||||
* Data type: String.<br>
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
<parent>
|
||||
<groupId>org.apache.cloudstack</groupId>
|
||||
<artifactId>cloudstack</artifactId>
|
||||
<version>4.22.0.0-SNAPSHOT</version>
|
||||
<version>4.23.0.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
|
|
|
|||
|
|
@ -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 String metadataManufacturer;
|
||||
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,
|
||||
String os, boolean enableHA, boolean limitCpuUse, String vncPassword) {
|
||||
|
|
@ -494,6 +495,14 @@ public class VirtualMachineTO {
|
|||
this.metadataProductName = metadataProductName;
|
||||
}
|
||||
|
||||
public VirtualMachineMetadataTO getMetadata() {
|
||||
return metadata;
|
||||
}
|
||||
|
||||
public void setMetadata(VirtualMachineMetadataTO metadata) {
|
||||
this.metadata = metadata;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("VM {id: \"%s\", name: \"%s\", uuid: \"%s\", type: \"%s\"}", id, name, uuid, type);
|
||||
|
|
|
|||
|
|
@ -108,36 +108,22 @@ public interface ConfigurationService {
|
|||
/**
|
||||
* Updates a service offering
|
||||
*
|
||||
* @param serviceOfferingId
|
||||
* @param userId
|
||||
* @param name
|
||||
* @param displayText
|
||||
* @param offerHA
|
||||
* @param useVirtualNetwork
|
||||
* @param tags
|
||||
* @return updated service offering
|
||||
*/
|
||||
ServiceOffering updateServiceOffering(UpdateServiceOfferingCmd cmd);
|
||||
|
||||
/**
|
||||
* Deletes a service offering
|
||||
*
|
||||
* @param userId
|
||||
* @param serviceOfferingId
|
||||
*/
|
||||
boolean deleteServiceOffering(DeleteServiceOfferingCmd cmd);
|
||||
|
||||
/**
|
||||
* Retrieve ID of domains for a service offering
|
||||
*
|
||||
* @param serviceOfferingId
|
||||
*/
|
||||
List<Long> getServiceOfferingDomains(Long serviceOfferingId);
|
||||
|
||||
/**
|
||||
* Retrieve ID of domains for a service offering
|
||||
*
|
||||
* @param serviceOfferingId
|
||||
*/
|
||||
List<Long> getServiceOfferingZones(Long serviceOfferingId);
|
||||
|
||||
|
|
@ -147,7 +133,6 @@ public interface ConfigurationService {
|
|||
* @param cmd
|
||||
* - the command specifying diskOfferingId, name, description, tags
|
||||
* @return updated disk offering
|
||||
* @throws
|
||||
*/
|
||||
DiskOffering updateDiskOffering(UpdateDiskOfferingCmd cmd);
|
||||
|
||||
|
|
@ -157,34 +142,22 @@ public interface ConfigurationService {
|
|||
* @param cmd
|
||||
* - the command specifying disk offering id
|
||||
* @return true or false
|
||||
* @throws
|
||||
*/
|
||||
boolean deleteDiskOffering(DeleteDiskOfferingCmd cmd);
|
||||
|
||||
/**
|
||||
* Creates a new disk offering
|
||||
*
|
||||
* @param domainId
|
||||
* @param name
|
||||
* @param description
|
||||
* @param numGibibytes
|
||||
* @param mirrored
|
||||
* @param size
|
||||
* @return ID
|
||||
*/
|
||||
DiskOffering createDiskOffering(CreateDiskOfferingCmd cmd);
|
||||
|
||||
/**
|
||||
* Retrieve ID of domains for a disk offering
|
||||
*
|
||||
* @param diskOfferingId
|
||||
*/
|
||||
List<Long> getDiskOfferingDomains(Long diskOfferingId);
|
||||
|
||||
/**
|
||||
* Retrieve ID of domains for a disk offering
|
||||
*
|
||||
* @param diskOfferingId
|
||||
*/
|
||||
List<Long> getDiskOfferingZones(Long diskOfferingId);
|
||||
|
||||
|
|
@ -207,8 +180,6 @@ public interface ConfigurationService {
|
|||
* TODO
|
||||
* @param storageAccessGroups
|
||||
* @return the new pod if successful, null otherwise
|
||||
* @throws
|
||||
* @throws
|
||||
*/
|
||||
Pod createPod(long zoneId, String name, String startIp, String endIp, String gateway, String netmask, String allocationState, List<String> storageAccessGroups);
|
||||
|
||||
|
|
@ -228,8 +199,7 @@ public interface ConfigurationService {
|
|||
/**
|
||||
* Updates a mutually exclusive IP range in the pod.
|
||||
* @param cmd - The command specifying pod ID, current Start IP, current End IP, new Start IP, new End IP.
|
||||
* @throws com.cloud.exception.ConcurrentOperationException
|
||||
* @return Success
|
||||
* @throws com.cloud.exception.ConcurrentOperationException when this pod is already being accessed
|
||||
*/
|
||||
void updatePodIpRange(UpdatePodManagementNetworkIpRangeCmd cmd) throws ConcurrentOperationException;
|
||||
|
||||
|
|
@ -250,9 +220,6 @@ public interface ConfigurationService {
|
|||
|
||||
/**
|
||||
* Edits a pod in the database. Will not allow you to edit pods that are being used anywhere in the system.
|
||||
*
|
||||
* @param UpdatePodCmd
|
||||
* api command
|
||||
*/
|
||||
Pod editPod(UpdatePodCmd cmd);
|
||||
|
||||
|
|
@ -262,17 +229,12 @@ public interface ConfigurationService {
|
|||
* @param cmd
|
||||
* - the command containing podId
|
||||
* @return true or false
|
||||
* @throws ,
|
||||
*/
|
||||
boolean deletePod(DeletePodCmd cmd);
|
||||
|
||||
/**
|
||||
* Creates a new zone
|
||||
*
|
||||
* @param cmd
|
||||
* @return the zone if successful, null otherwise
|
||||
* @throws
|
||||
* @throws
|
||||
*/
|
||||
DataCenter createZone(CreateZoneCmd cmd);
|
||||
|
||||
|
|
@ -295,22 +257,7 @@ public interface ConfigurationService {
|
|||
* Adds a VLAN to the database, along with an IP address range. Can add three types of VLANs: (1) zone-wide VLANs on
|
||||
* the
|
||||
* virtual public network (2) pod-wide direct attached VLANs (3) account-specific direct attached VLANs
|
||||
*
|
||||
* @param userId
|
||||
* @param vlanType
|
||||
* - either "DomR" (VLAN for a virtual public network) or "DirectAttached" (VLAN for IPs that will be
|
||||
* directly
|
||||
* attached to UserVMs)
|
||||
* @param zoneId
|
||||
* @param accountId
|
||||
* @param podId
|
||||
* @param add
|
||||
* @param vlanId
|
||||
* @param gateway
|
||||
* @param startIP
|
||||
* @param endIP
|
||||
* @throws ResourceAllocationException TODO
|
||||
* @throws
|
||||
* @return The new Vlan object
|
||||
*/
|
||||
Vlan createVlanAndPublicIpRange(CreateVlanIpRangeCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException,
|
||||
|
|
@ -325,9 +272,6 @@ public interface ConfigurationService {
|
|||
/**
|
||||
* Marks the account with the default zone-id.
|
||||
*
|
||||
* @param accountName
|
||||
* @param domainId
|
||||
* @param defaultZoneId
|
||||
* @return The new account object
|
||||
*/
|
||||
Account markDefaultZone(String accountName, long domainId, long defaultZoneId);
|
||||
|
|
@ -349,14 +293,12 @@ public interface ConfigurationService {
|
|||
/**
|
||||
* Retrieve ID of domains for a network offering
|
||||
*
|
||||
* @param networkOfferingId
|
||||
*/
|
||||
List<Long> getNetworkOfferingDomains(Long networkOfferingId);
|
||||
|
||||
/**
|
||||
* Retrieve ID of domains for a network offering
|
||||
*
|
||||
* @param networkOfferingId
|
||||
*/
|
||||
List<Long> getNetworkOfferingZones(Long networkOfferingId);
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import org.apache.cloudstack.api.response.ClusterResponse;
|
|||
import org.apache.cloudstack.api.response.HostResponse;
|
||||
import org.apache.cloudstack.api.response.PodResponse;
|
||||
import org.apache.cloudstack.api.response.ZoneResponse;
|
||||
import org.apache.cloudstack.backup.BackupRepositoryService;
|
||||
import org.apache.cloudstack.config.Configuration;
|
||||
import org.apache.cloudstack.datacenter.DataCenterIpv4GuestSubnet;
|
||||
import org.apache.cloudstack.extension.Extension;
|
||||
|
|
@ -852,6 +853,10 @@ public class EventTypes {
|
|||
// Custom Action
|
||||
public static final String EVENT_CUSTOM_ACTION = "CUSTOM.ACTION";
|
||||
|
||||
// Backup Repository
|
||||
public static final String EVENT_BACKUP_REPOSITORY_ADD = "BACKUP.REPOSITORY.ADD";
|
||||
public static final String EVENT_BACKUP_REPOSITORY_UPDATE = "BACKUP.REPOSITORY.UPDATE";
|
||||
|
||||
static {
|
||||
|
||||
// TODO: need a way to force author adding event types to declare the entity details as well, with out braking
|
||||
|
|
@ -1385,6 +1390,10 @@ public class EventTypes {
|
|||
entityEventDetails.put(EVENT_EXTENSION_CUSTOM_ACTION_ADD, ExtensionCustomAction.class);
|
||||
entityEventDetails.put(EVENT_EXTENSION_CUSTOM_ACTION_UPDATE, ExtensionCustomAction.class);
|
||||
entityEventDetails.put(EVENT_EXTENSION_CUSTOM_ACTION_DELETE, ExtensionCustomAction.class);
|
||||
|
||||
// Backup Repository
|
||||
entityEventDetails.put(EVENT_BACKUP_REPOSITORY_ADD, BackupRepositoryService.class);
|
||||
entityEventDetails.put(EVENT_BACKUP_REPOSITORY_UPDATE, BackupRepositoryService.class);
|
||||
}
|
||||
|
||||
public static boolean isNetworkEvent(String eventType) {
|
||||
|
|
|
|||
|
|
@ -88,6 +88,8 @@ public interface KubernetesCluster extends ControlledEntity, com.cloud.utils.fsm
|
|||
s_fsm.addTransition(State.Stopping, Event.OperationFailed, State.Alert);
|
||||
|
||||
s_fsm.addTransition(State.Stopped, Event.StartRequested, State.Starting);
|
||||
s_fsm.addTransition(State.Stopped, Event.OperationSucceeded, State.Stopped);
|
||||
s_fsm.addTransition(State.Running, Event.OperationSucceeded, State.Running);
|
||||
|
||||
s_fsm.addTransition(State.Running, Event.FaultsDetected, State.Alert);
|
||||
|
||||
|
|
@ -170,4 +172,5 @@ public interface KubernetesCluster extends ControlledEntity, com.cloud.utils.fsm
|
|||
Long getEtcdNodeCount();
|
||||
Long getCniConfigId();
|
||||
String getCniConfigDetails();
|
||||
boolean isCsiEnabled();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,4 +41,6 @@ public interface PhysicalNetworkTrafficType extends InternalIdentity, Identity {
|
|||
String getHypervNetworkLabel();
|
||||
|
||||
String getOvm3NetworkLabel();
|
||||
|
||||
String getVlan();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ public interface RouterHealthCheckResult {
|
|||
|
||||
String getCheckType();
|
||||
|
||||
boolean getCheckResult();
|
||||
VirtualNetworkApplianceService.RouterHealthStatus getCheckResult();
|
||||
|
||||
Date getLastUpdateTime();
|
||||
|
||||
|
|
|
|||
|
|
@ -87,4 +87,8 @@ public interface VirtualNetworkApplianceService {
|
|||
Pair<Boolean, String> performRouterHealthChecks(long routerId);
|
||||
|
||||
<T extends VirtualRouter> void collectNetworkStatistics(T router, Nic nic);
|
||||
|
||||
enum RouterHealthStatus{
|
||||
SUCCESS, FAILED, WARNING, UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,6 +70,8 @@ public interface AutoScaleService {
|
|||
|
||||
Counter createCounter(CreateCounterCmd cmd);
|
||||
|
||||
Counter getCounter(long counterId);
|
||||
|
||||
boolean deleteCounter(long counterId) throws ResourceInUseException;
|
||||
|
||||
List<? extends Counter> listCounters(ListCountersCmd cmd);
|
||||
|
|
|
|||
|
|
@ -41,13 +41,23 @@ import com.cloud.utils.net.Ip;
|
|||
public interface LoadBalancingRulesService {
|
||||
/**
|
||||
* Create a load balancer rule from the given ipAddress/port to the given private port
|
||||
* @param xId an existing UUID for this rule (for instance a device generated one)
|
||||
* @param name
|
||||
* @param description
|
||||
* @param srcPortStart
|
||||
* @param srcPortEnd
|
||||
* @param defPortStart
|
||||
* @param defPortEnd
|
||||
* @param ipAddrId
|
||||
* @param protocol
|
||||
* @param algorithm
|
||||
* @param networkId
|
||||
* @param lbOwnerId
|
||||
* @param openFirewall
|
||||
* TODO
|
||||
* @param forDisplay TODO
|
||||
* @param cmd
|
||||
* the command specifying the ip address, public port, protocol, private port, and algorithm
|
||||
*
|
||||
* @param lbProtocol
|
||||
* @param forDisplay
|
||||
* @return the newly created LoadBalancerVO if successful, null otherwise
|
||||
* @throws NetworkRuleConflictException
|
||||
* @throws InsufficientAddressCapacityException
|
||||
*/
|
||||
LoadBalancer createPublicLoadBalancerRule(String xId, String name, String description, int srcPortStart, int srcPortEnd, int defPortStart, int defPortEnd,
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ public interface DiskOffering extends InfrastructureEntity, Identity, InternalId
|
|||
State getState();
|
||||
|
||||
enum DiskCacheMode {
|
||||
NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough");
|
||||
NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough"), HYPERVISOR_DEFAULT("hypervisor_default");
|
||||
|
||||
private final String _diskCacheMode;
|
||||
|
||||
|
|
@ -69,6 +69,8 @@ public interface DiskOffering extends InfrastructureEntity, Identity, InternalId
|
|||
|
||||
boolean isCustomized();
|
||||
|
||||
boolean isShared();
|
||||
|
||||
void setDiskSize(long diskSize);
|
||||
|
||||
long getDiskSize();
|
||||
|
|
@ -99,7 +101,6 @@ public interface DiskOffering extends InfrastructureEntity, Identity, InternalId
|
|||
|
||||
Long getBytesReadRateMaxLength();
|
||||
|
||||
|
||||
void setBytesWriteRate(Long bytesWriteRate);
|
||||
|
||||
Long getBytesWriteRate();
|
||||
|
|
@ -112,7 +113,6 @@ public interface DiskOffering extends InfrastructureEntity, Identity, InternalId
|
|||
|
||||
Long getBytesWriteRateMaxLength();
|
||||
|
||||
|
||||
void setIopsReadRate(Long iopsReadRate);
|
||||
|
||||
Long getIopsReadRate();
|
||||
|
|
@ -133,7 +133,6 @@ public interface DiskOffering extends InfrastructureEntity, Identity, InternalId
|
|||
|
||||
Long getIopsWriteRateMax();
|
||||
|
||||
|
||||
void setIopsWriteRateMaxLength(Long iopsWriteRateMaxLength);
|
||||
|
||||
Long getIopsWriteRateMaxLength();
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.cloud.user.UserData;
|
||||
import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd;
|
||||
import org.apache.cloudstack.api.command.admin.config.ListCfgGroupsByCmd;
|
||||
import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd;
|
||||
|
|
@ -72,6 +71,7 @@ import org.apache.cloudstack.api.command.user.vm.GetVMPasswordCmd;
|
|||
import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd;
|
||||
import org.apache.cloudstack.config.Configuration;
|
||||
import org.apache.cloudstack.config.ConfigurationGroup;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
|
||||
import com.cloud.alert.Alert;
|
||||
import com.cloud.capacity.Capacity;
|
||||
|
|
@ -91,6 +91,7 @@ import com.cloud.storage.GuestOSHypervisor;
|
|||
import com.cloud.storage.GuestOsCategory;
|
||||
import com.cloud.storage.StoragePool;
|
||||
import com.cloud.user.SSHKeyPair;
|
||||
import com.cloud.user.UserData;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.Ternary;
|
||||
import com.cloud.vm.InstanceGroup;
|
||||
|
|
@ -104,6 +105,14 @@ import com.cloud.vm.VirtualMachine.Type;
|
|||
public interface ManagementService {
|
||||
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
|
||||
*
|
||||
|
|
@ -509,4 +518,6 @@ public interface ManagementService {
|
|||
|
||||
boolean removeManagementServer(RemoveManagementServerCmd cmd);
|
||||
|
||||
void checkJsInterpretationAllowedIfNeededForParameterValue(String paramName, boolean paramValue);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ package com.cloud.server;
|
|||
|
||||
public interface ResourceManagerUtil {
|
||||
long getResourceId(String resourceId, ResourceTag.ResourceObjectType resourceType);
|
||||
long getResourceId(String resourceId, ResourceTag.ResourceObjectType resourceType, boolean checkAccess);
|
||||
String getUuid(String resourceId, ResourceTag.ResourceObjectType resourceType);
|
||||
ResourceTag.ResourceObjectType getResourceType(String resourceTypeStr);
|
||||
void checkResourceAccessible(Long accountId, Long domainId, String exceptionMessage);
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ public class Storage {
|
|||
public static enum TemplateType {
|
||||
ROUTING, // Router 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 */
|
||||
USER, /* User supplied template/iso */
|
||||
VNF, /* VNFs (virtual network functions) template */
|
||||
|
|
|
|||
|
|
@ -180,6 +180,8 @@ public interface VolumeApiService {
|
|||
*/
|
||||
boolean doesStoragePoolSupportDiskOfferingTags(StoragePool destPool, String diskOfferingTags);
|
||||
|
||||
boolean validateConditionsToReplaceDiskOfferingOfVolume(Volume volume, DiskOffering newDiskOffering, StoragePool destPool);
|
||||
|
||||
Volume destroyVolume(long volumeId, Account caller, boolean expunge, boolean forceExpunge);
|
||||
|
||||
void destroyVolume(long volumeId);
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ public interface SnapshotApiService {
|
|||
* the command that specifies the volume criteria
|
||||
* @return list of snapshot policies
|
||||
*/
|
||||
Pair<List<? extends SnapshotPolicy>, Integer> listPoliciesforVolume(ListSnapshotPoliciesCmd cmd);
|
||||
Pair<List<? extends SnapshotPolicy>, Integer> listSnapshotPolicies(ListSnapshotPoliciesCmd cmd);
|
||||
|
||||
boolean deleteSnapshotPolicies(DeleteSnapshotPoliciesCmd cmd);
|
||||
|
||||
|
|
|
|||
|
|
@ -16,11 +16,12 @@
|
|||
// under the License.
|
||||
package com.cloud.storage.snapshot;
|
||||
|
||||
import org.apache.cloudstack.acl.ControlledEntity;
|
||||
import org.apache.cloudstack.api.Displayable;
|
||||
import org.apache.cloudstack.api.Identity;
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
public interface SnapshotPolicy extends Identity, InternalIdentity, Displayable {
|
||||
public interface SnapshotPolicy extends ControlledEntity, Identity, InternalIdentity, Displayable {
|
||||
|
||||
long getVolumeId();
|
||||
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ import com.cloud.storage.StoragePool;
|
|||
import com.cloud.template.VirtualMachineTemplate;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.uservm.UserVm;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.exception.ExecutionException;
|
||||
|
||||
public interface UserVmService {
|
||||
|
|
@ -507,16 +508,41 @@ public interface UserVmService {
|
|||
|
||||
void collectVmNetworkStatistics (UserVm userVm);
|
||||
|
||||
UserVm importVM(final DataCenter zone, final Host host, final VirtualMachineTemplate template, final String instanceName, final String displayName, final Account owner, final String userData, final Account caller, final Boolean isDisplayVm, final String keyboard,
|
||||
/**
|
||||
* Import VM into CloudStack
|
||||
* @param zone importing zone
|
||||
* @param host importing host
|
||||
* @param template template for the imported VM
|
||||
* @param instanceNameInternal set to null to CloudStack to autogenerate from the next available VM ID on database
|
||||
* @param displayName display name for the imported VM
|
||||
* @param owner owner of the imported VM
|
||||
* @param userData user data for the imported VM
|
||||
* @param caller caller account
|
||||
* @param isDisplayVm true to display the imported VM
|
||||
* @param keyboard keyboard distribution for the imported VM
|
||||
* @param accountId account ID
|
||||
* @param userId user ID
|
||||
* @param serviceOffering service offering for the imported VM
|
||||
* @param sshPublicKey ssh key for the imported VM
|
||||
* @param hostName the name for the imported VM
|
||||
* @param hypervisorType hypervisor type for the imported VM
|
||||
* @param customParameters details for the imported VM
|
||||
* @param powerState power state of the imported VM
|
||||
* @param networkNicMap network to nic mapping
|
||||
* @return the imported VM
|
||||
* @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,
|
||||
final long accountId, final long userId, final ServiceOffering serviceOffering, final String sshPublicKey,
|
||||
final String hostName, final HypervisorType hypervisorType, final Map<String, String> customParameters,
|
||||
final VirtualMachine.PowerState powerState, final LinkedHashMap<String, List<NicProfile>> networkNicMap) throws InsufficientCapacityException;
|
||||
|
||||
/**
|
||||
* Unmanage a guest VM from CloudStack
|
||||
* @return true if the VM is successfully unmanaged, false if not.
|
||||
*
|
||||
* @return (true if successful, false if not, hostUuid) if the VM is successfully unmanaged.
|
||||
*/
|
||||
boolean unmanageUserVM(Long vmId);
|
||||
Pair<Boolean, String> unmanageUserVM(Long vmId, Long targetHostId);
|
||||
|
||||
UserVm allocateVMFromBackup(CreateVMFromBackupCmd cmd) throws InsufficientCapacityException, ResourceAllocationException, ResourceUnavailableException;
|
||||
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ public interface VirtualMachineProfile {
|
|||
public static final Param BootIntoSetup = new Param("enterHardwareSetup");
|
||||
public static final Param PreserveNics = new Param("PreserveNics");
|
||||
public static final Param ConsiderLastHost = new Param("ConsiderLastHost");
|
||||
public static final Param ReturnAfterVolumePrepare = new Param("ReturnAfterVolumePrepare");
|
||||
|
||||
private String name;
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ package com.cloud.vm.snapshot;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import com.cloud.utils.fsm.NoTransitionException;
|
||||
import org.apache.cloudstack.api.command.user.vmsnapshot.ListVMSnapshotCmd;
|
||||
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
|
|
@ -53,4 +54,6 @@ public interface VMSnapshotService {
|
|||
* @param id vm id
|
||||
*/
|
||||
boolean deleteVMSnapshotsFromDB(Long vmId, boolean unmanage);
|
||||
|
||||
void updateOperationFailed(VMSnapshot vmSnapshot) throws NoTransitionException;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -81,6 +81,34 @@ public abstract class AbstractGetUploadParamsCmd extends BaseCmd {
|
|||
return projectId;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public void setFormat(String format) {
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
public void setZoneId(Long zoneId) {
|
||||
this.zoneId = zoneId;
|
||||
}
|
||||
|
||||
public void setChecksum(String checksum) {
|
||||
this.checksum = checksum;
|
||||
}
|
||||
|
||||
public void setAccountName(String accountName) {
|
||||
this.accountName = accountName;
|
||||
}
|
||||
|
||||
public void setDomainId(Long domainId) {
|
||||
this.domainId = domainId;
|
||||
}
|
||||
|
||||
public void setProjectId(Long projectId) {
|
||||
this.projectId = projectId;
|
||||
}
|
||||
|
||||
public GetUploadParamsResponse createGetUploadParamsResponse(UUID id, URL postURL, String metadata, String timeout, String signature) {
|
||||
return new GetUploadParamsResponse(id, postURL, metadata, timeout, signature);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ public class ApiConstants {
|
|||
public static final String ACTIVATION_RULE = "activationrule";
|
||||
public static final String ACTIVITY = "activity";
|
||||
public static final String ADAPTER_TYPE = "adaptertype";
|
||||
public static final String ADDITONAL_CONFIG_ENABLED = "additionalconfigenabled";
|
||||
public static final String ADDRESS = "address";
|
||||
public static final String ALGORITHM = "algorithm";
|
||||
public static final String ALIAS = "alias";
|
||||
|
|
@ -63,6 +64,7 @@ public class ApiConstants {
|
|||
public static final String BACKUP_STORAGE_LIMIT = "backupstoragelimit";
|
||||
public static final String BACKUP_STORAGE_TOTAL = "backupstoragetotal";
|
||||
public static final String BACKUP_VM_OFFERING_REMOVED = "vmbackupofferingremoved";
|
||||
public static final String IS_BACKUP_VM_EXPUNGED = "isbackupvmexpunged";
|
||||
public static final String BACKUP_TOTAL = "backuptotal";
|
||||
public static final String BASE64_IMAGE = "base64image";
|
||||
public static final String BGP_PEERS = "bgppeers";
|
||||
|
|
@ -80,6 +82,7 @@ public class ApiConstants {
|
|||
public static final String BYTES_WRITE_RATE_MAX = "byteswriteratemax";
|
||||
public static final String BYTES_WRITE_RATE_MAX_LENGTH = "byteswriteratemaxlength";
|
||||
public static final String BYPASS_VLAN_OVERLAP_CHECK = "bypassvlanoverlapcheck";
|
||||
public static final String CALLER = "caller";
|
||||
public static final String CAPACITY = "capacity";
|
||||
public static final String CATEGORY = "category";
|
||||
public static final String CAN_REVERT = "canrevert";
|
||||
|
|
@ -132,6 +135,7 @@ public class ApiConstants {
|
|||
public static final String CNI_CONFIG_ID = "cniconfigurationid";
|
||||
public static final String CNI_CONFIG_DETAILS = "cniconfigdetails";
|
||||
public static final String CNI_CONFIG_NAME = "cniconfigname";
|
||||
public static final String CSI_ENABLED = "csienabled";
|
||||
public static final String COMPONENT = "component";
|
||||
public static final String CPU = "CPU";
|
||||
public static final String CPU_CORE_PER_SOCKET = "cpucorepersocket";
|
||||
|
|
@ -139,6 +143,7 @@ public class ApiConstants {
|
|||
public static final String CPU_SPEED = "cpuspeed";
|
||||
public static final String CPU_LOAD_AVERAGE = "cpuloadaverage";
|
||||
public static final String CREATED = "created";
|
||||
public static final String CROSS_ZONE_INSTANCE_CREATION = "crosszoneinstancecreation";
|
||||
public static final String CTX_ACCOUNT_ID = "ctxaccountid";
|
||||
public static final String CTX_DETAILS = "ctxDetails";
|
||||
public static final String CTX_USER_ID = "ctxuserid";
|
||||
|
|
@ -211,6 +216,7 @@ public class ApiConstants {
|
|||
public static final String DURATION = "duration";
|
||||
public static final String ELIGIBLE = "eligible";
|
||||
public static final String EMAIL = "email";
|
||||
public static final String ENABLE_CSI = "enablecsi";
|
||||
public static final String END_ASN = "endasn";
|
||||
public static final String END_DATE = "enddate";
|
||||
public static final String END_IP = "endip";
|
||||
|
|
@ -222,6 +228,7 @@ public class ApiConstants {
|
|||
public static final String EVENT_TYPE = "eventtype";
|
||||
public static final String EXPIRES = "expires";
|
||||
public static final String EXTRA_CONFIG = "extraconfig";
|
||||
public static final String EXTRA_PARAMS = "extraparams";
|
||||
public static final String EXTRA_DHCP_OPTION = "extradhcpoption";
|
||||
public static final String EXTRA_DHCP_OPTION_NAME = "extradhcpoptionname";
|
||||
public static final String EXTRA_DHCP_OPTION_CODE = "extradhcpoptioncode";
|
||||
|
|
@ -240,6 +247,8 @@ public class ApiConstants {
|
|||
public static final String FIRSTNAME = "firstname";
|
||||
public static final String FORCED = "forced";
|
||||
public static final String FORCED_DESTROY_LOCAL_STORAGE = "forcedestroylocalstorage";
|
||||
public static final String FORCE_CONVERT_TO_POOL = "forceconverttopool";
|
||||
|
||||
public static final String FORCE_DELETE_HOST = "forcedeletehost";
|
||||
public static final String FORCE_MS_TO_IMPORT_VM_FILES = "forcemstoimportvmfiles";
|
||||
public static final String FORCE_UPDATE_OS_TYPE = "forceupdateostype";
|
||||
|
|
@ -575,6 +584,7 @@ public class ApiConstants {
|
|||
public static final String SUITABLE_FOR_VM = "suitableforvirtualmachine";
|
||||
public static final String SUPPORTS_STORAGE_SNAPSHOT = "supportsstoragesnapshot";
|
||||
public static final String TARGET_IQN = "targetiqn";
|
||||
public static final String TASKS_FILTER = "tasksfilter";
|
||||
public static final String TEMPLATE_FILTER = "templatefilter";
|
||||
public static final String TEMPLATE_ID = "templateid";
|
||||
public static final String TEMPLATE_IDS = "templateids";
|
||||
|
|
@ -1154,6 +1164,7 @@ public class ApiConstants {
|
|||
public static final String OVM3_CLUSTER = "ovm3cluster";
|
||||
public static final String OVM3_VIP = "ovm3vip";
|
||||
public static final String CLEAN_UP_DETAILS = "cleanupdetails";
|
||||
public static final String CLEAN_UP_EXTERNAL_DETAILS = "cleanupexternaldetails";
|
||||
public static final String CLEAN_UP_PARAMETERS = "cleanupparameters";
|
||||
public static final String VIRTUAL_SIZE = "virtualsize";
|
||||
public static final String NETSCALER_CONTROLCENTER_ID = "netscalercontrolcenterid";
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
package org.apache.cloudstack.api.command.admin.autoscale;
|
||||
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
|
||||
import org.apache.cloudstack.api.APICommand;
|
||||
import org.apache.cloudstack.api.ApiCommandResourceType;
|
||||
|
|
@ -89,9 +90,6 @@ public class CreateCounterCmd extends BaseAsyncCreateCmd {
|
|||
if (ctr != null) {
|
||||
this.setEntityId(ctr.getId());
|
||||
this.setEntityUuid(ctr.getUuid());
|
||||
CounterResponse response = _responseGenerator.createCounterResponse(ctr);
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
} else {
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create Counter with name " + getName());
|
||||
}
|
||||
|
|
@ -99,6 +97,11 @@ public class CreateCounterCmd extends BaseAsyncCreateCmd {
|
|||
|
||||
@Override
|
||||
public void execute() {
|
||||
CallContext.current().setEventDetails("Counter ID: " + getEntityId());
|
||||
Counter ctr = _autoScaleService.getCounter(getEntityId());
|
||||
CounterResponse response = _responseGenerator.createCounterResponse(ctr);
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -72,6 +72,14 @@ public class UpdateHostCmd extends BaseCmd {
|
|||
@Parameter(name = ApiConstants.EXTERNAL_DETAILS, type = CommandType.MAP, description = "Details in key/value pairs using format externaldetails[i].keyname=keyvalue. Example: externaldetails[0].endpoint.url=urlvalue", since = "4.21.0")
|
||||
protected Map externalDetails;
|
||||
|
||||
@Parameter(name = ApiConstants.CLEAN_UP_EXTERNAL_DETAILS,
|
||||
type = CommandType.BOOLEAN,
|
||||
description = "Optional boolean field, which indicates if external details should be cleaned up or not " +
|
||||
"(If set to true, external details removed for this host, externaldetails field ignored; " +
|
||||
"if false or not set, no action)",
|
||||
since = "4.22.0")
|
||||
protected Boolean cleanupExternalDetails;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////////// Accessors ///////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -112,6 +120,10 @@ public class UpdateHostCmd extends BaseCmd {
|
|||
return convertExternalDetailsToMap(externalDetails);
|
||||
}
|
||||
|
||||
public boolean isCleanupExternalDetails() {
|
||||
return Boolean.TRUE.equals(cleanupExternalDetails);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////// API Implementation///////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ public class CreateDiskOfferingCmd extends BaseCmd {
|
|||
@Parameter(name = ApiConstants.CACHE_MODE,
|
||||
type = CommandType.STRING,
|
||||
required = false,
|
||||
description = "the cache mode to use for this disk offering. none, writeback or writethrough",
|
||||
description = "the cache mode to use for this disk offering. none, writeback, writethrough or hypervisor default. If the hypervisor default cache mode is used on other hypervisors than KVM, it will fall back to none cache mode",
|
||||
since = "4.14")
|
||||
private String cacheMode;
|
||||
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ public class CreateServiceOfferingCmd extends BaseCmd {
|
|||
@Parameter(name = ApiConstants.CACHE_MODE,
|
||||
type = CommandType.STRING,
|
||||
required = false,
|
||||
description = "the cache mode to use for this disk offering. none, writeback or writethrough",
|
||||
description = "the cache mode to use for this disk offering. none, writeback, writethrough or hypervisor default. If the hypervisor default cache mode is used on other hypervisors than KVM, it will fall back to none cache mode",
|
||||
since = "4.14")
|
||||
private String cacheMode;
|
||||
|
||||
|
|
|
|||
|
|
@ -101,6 +101,14 @@ public class UpdateServiceOfferingCmd extends BaseCmd {
|
|||
since = "4.21.0")
|
||||
private Map externalDetails;
|
||||
|
||||
@Parameter(name = ApiConstants.CLEAN_UP_EXTERNAL_DETAILS,
|
||||
type = CommandType.BOOLEAN,
|
||||
description = "Optional boolean field, which indicates if external details should be cleaned up or not " +
|
||||
"(If set to true, external details removed for this offering, externaldetails field ignored; " +
|
||||
"if false or not set, no action)",
|
||||
since = "4.22.0")
|
||||
protected Boolean cleanupExternalDetails;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////////// Accessors ///////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -205,6 +213,10 @@ public class UpdateServiceOfferingCmd extends BaseCmd {
|
|||
return convertExternalDetailsToMap(externalDetails);
|
||||
}
|
||||
|
||||
public boolean isCleanupExternalDetails() {
|
||||
return Boolean.TRUE.equals(cleanupExternalDetails);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////// API Implementation///////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -153,6 +153,8 @@ public class UpdateStoragePoolCmd extends BaseCmd {
|
|||
if (ObjectUtils.anyNotNull(name, capacityIops, capacityBytes, url, isTagARule, tags) ||
|
||||
MapUtils.isNotEmpty(details)) {
|
||||
result = _storageService.updateStoragePool(this);
|
||||
} else {
|
||||
result = _storageService.getStoragePool(getId());
|
||||
}
|
||||
|
||||
if (enabled != null) {
|
||||
|
|
|
|||
|
|
@ -26,14 +26,13 @@ import org.apache.cloudstack.api.BaseListCmd;
|
|||
import org.apache.cloudstack.api.Parameter;
|
||||
import org.apache.cloudstack.api.response.ListResponse;
|
||||
import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
|
||||
import org.apache.cloudstack.api.response.ProviderResponse;
|
||||
import org.apache.cloudstack.api.response.TrafficTypeResponse;
|
||||
|
||||
import com.cloud.network.PhysicalNetworkTrafficType;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.utils.Pair;
|
||||
|
||||
@APICommand(name = "listTrafficTypes", description = "Lists traffic types of a given physical network.", responseObject = ProviderResponse.class, since = "3.0.0",
|
||||
@APICommand(name = "listTrafficTypes", description = "Lists traffic types of a given physical network.", responseObject = TrafficTypeResponse.class, since = "3.0.0",
|
||||
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
|
||||
public class ListTrafficTypesCmd extends BaseListCmd {
|
||||
|
||||
|
|
|
|||
|
|
@ -159,6 +159,18 @@ public class ImportVmCmd extends ImportUnmanagedInstanceCmd {
|
|||
description = "(only for importing VMs from VMware to KVM) optional - if true, forces MS to export OVF from VMware to temporary storage, else uses KVM Host if ovftool is available, falls back to MS if not.")
|
||||
private Boolean forceMsToImportVmFiles;
|
||||
|
||||
@Parameter(name = ApiConstants.EXTRA_PARAMS,
|
||||
type = CommandType.STRING,
|
||||
since = "4.22",
|
||||
description = "(only for importing VMs from VMware to KVM) optional - extra parameters to be passed on the virt-v2v command, if allowed by the administrator")
|
||||
private String extraParams;
|
||||
|
||||
@Parameter(name = ApiConstants.FORCE_CONVERT_TO_POOL,
|
||||
type = CommandType.BOOLEAN,
|
||||
since = "4.22",
|
||||
description = "(only for importing VMs from VMware to KVM) optional - if true, forces virt-v2v conversions to write directly on the provided storage pool (avoid using temporary conversion pool).")
|
||||
private Boolean forceConvertToPool;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////////// Accessors ///////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -248,6 +260,14 @@ public class ImportVmCmd extends ImportUnmanagedInstanceCmd {
|
|||
return EventTypes.EVENT_VM_IMPORT;
|
||||
}
|
||||
|
||||
public String getExtraParams() {
|
||||
return extraParams;
|
||||
}
|
||||
|
||||
public boolean getForceConvertToPool() {
|
||||
return BooleanUtils.toBooleanDefaultIfNull(forceConvertToPool, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getEventDescription() {
|
||||
String vmName = getName();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,116 @@
|
|||
// 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.api.command.admin.vm;
|
||||
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.InsufficientCapacityException;
|
||||
import com.cloud.exception.NetworkRuleConflictException;
|
||||
import com.cloud.exception.ResourceAllocationException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.user.Account;
|
||||
import org.apache.cloudstack.acl.RoleType;
|
||||
import org.apache.cloudstack.api.APICommand;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.BaseListCmd;
|
||||
import org.apache.cloudstack.api.Parameter;
|
||||
import org.apache.cloudstack.api.ResponseObject;
|
||||
import org.apache.cloudstack.api.ServerApiException;
|
||||
import org.apache.cloudstack.api.response.AccountResponse;
|
||||
import org.apache.cloudstack.api.response.HostResponse;
|
||||
import org.apache.cloudstack.api.response.ImportVMTaskResponse;
|
||||
import org.apache.cloudstack.api.response.ListResponse;
|
||||
import org.apache.cloudstack.api.response.ZoneResponse;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.cloudstack.vm.ImportVmTasksManager;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@APICommand(name = "listImportVmTasks",
|
||||
description = "List running import virtual machine tasks from a unmanaged hosts into CloudStack",
|
||||
responseObject = ImportVMTaskResponse.class,
|
||||
responseView = ResponseObject.ResponseView.Full,
|
||||
requestHasSensitiveInfo = false,
|
||||
authorized = {RoleType.Admin},
|
||||
since = "4.22")
|
||||
public class ListImportVMTasksCmd extends BaseListCmd {
|
||||
|
||||
@Inject
|
||||
public ImportVmTasksManager importVmTasksManager;
|
||||
|
||||
@Parameter(name = ApiConstants.ZONE_ID,
|
||||
type = CommandType.UUID,
|
||||
entityType = ZoneResponse.class,
|
||||
required = true,
|
||||
description = "the zone ID")
|
||||
private Long zoneId;
|
||||
|
||||
@Parameter(name = ApiConstants.ACCOUNT_ID,
|
||||
type = CommandType.UUID,
|
||||
entityType = AccountResponse.class,
|
||||
description = "the ID of the Account")
|
||||
private Long accountId;
|
||||
|
||||
@Parameter(name = ApiConstants.VCENTER,
|
||||
type = CommandType.STRING,
|
||||
description = "The name/ip of vCenter. Make sure it is IP address or full qualified domain name for host running vCenter server.")
|
||||
private String vcenter;
|
||||
|
||||
@Parameter(name = ApiConstants.CONVERT_INSTANCE_HOST_ID,
|
||||
type = CommandType.UUID,
|
||||
entityType = HostResponse.class,
|
||||
description = "Conversion host of the importing task")
|
||||
private Long convertHostId;
|
||||
|
||||
@Parameter(name = ApiConstants.TASKS_FILTER, type = CommandType.STRING, description = "Filter tasks by state, valid options are: All, Running, Completed, Failed")
|
||||
private String tasksFilter;
|
||||
|
||||
public Long getZoneId() {
|
||||
return zoneId;
|
||||
}
|
||||
|
||||
public Long getAccountId() {
|
||||
return accountId;
|
||||
}
|
||||
|
||||
public String getVcenter() {
|
||||
return vcenter;
|
||||
}
|
||||
|
||||
public Long getConvertHostId() {
|
||||
return convertHostId;
|
||||
}
|
||||
|
||||
public String getTasksFilter() {
|
||||
return tasksFilter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
|
||||
ListResponse<ImportVMTaskResponse> response = importVmTasksManager.listImportVMTasks(this);
|
||||
response.setResponseName(getCommandName());
|
||||
setResponseObject(response);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getEntityOwnerId() {
|
||||
Account account = CallContext.current().getCallingAccount();
|
||||
if (account != null) {
|
||||
return account.getId();
|
||||
}
|
||||
return Account.ACCOUNT_ID_SYSTEM;
|
||||
}
|
||||
}
|
||||
|
|
@ -27,6 +27,7 @@ import com.cloud.exception.ResourceAllocationException;
|
|||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.uservm.UserVm;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.vm.VirtualMachine;
|
||||
import org.apache.cloudstack.acl.RoleType;
|
||||
import org.apache.cloudstack.api.APICommand;
|
||||
|
|
@ -36,10 +37,12 @@ import org.apache.cloudstack.api.ApiErrorCode;
|
|||
import org.apache.cloudstack.api.BaseAsyncCmd;
|
||||
import org.apache.cloudstack.api.Parameter;
|
||||
import org.apache.cloudstack.api.ServerApiException;
|
||||
import org.apache.cloudstack.api.response.HostResponse;
|
||||
import org.apache.cloudstack.api.response.UnmanageVMInstanceResponse;
|
||||
import org.apache.cloudstack.api.response.UserVmResponse;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.cloudstack.vm.UnmanagedVMsManager;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
|
|
@ -65,6 +68,20 @@ public class UnmanageVMInstanceCmd extends BaseAsyncCmd {
|
|||
description = "The ID of the virtual machine to unmanage")
|
||||
private Long vmId;
|
||||
|
||||
@Parameter(name = ApiConstants.HOST_ID, type = CommandType.UUID,
|
||||
entityType = HostResponse.class, required = false,
|
||||
description = "ID of the host which will be used for unmanaging the Instance. " +
|
||||
"Applicable only for KVM hypervisor and stopped Instances. Domain XML will be stored on this host.",
|
||||
since = "4.22.0")
|
||||
private Long hostId;
|
||||
|
||||
@Parameter(name = ApiConstants.FORCED,
|
||||
type = CommandType.BOOLEAN,
|
||||
required = false,
|
||||
description = "Force unmanaging Instance with config drive. Applicable only for KVM Hypervisor.",
|
||||
since = "4.22.0")
|
||||
private Boolean forced;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////////// Accessors ///////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -83,6 +100,18 @@ public class UnmanageVMInstanceCmd extends BaseAsyncCmd {
|
|||
return "unmanaging VM. VM ID = " + vmId;
|
||||
}
|
||||
|
||||
public Long getHostId() {
|
||||
return hostId;
|
||||
}
|
||||
|
||||
public void setHostId(Long hostId) {
|
||||
this.hostId = hostId;
|
||||
}
|
||||
|
||||
public Boolean isForced() {
|
||||
return BooleanUtils.isTrue(forced);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////// API Implementation///////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -93,9 +122,10 @@ public class UnmanageVMInstanceCmd extends BaseAsyncCmd {
|
|||
UnmanageVMInstanceResponse response = new UnmanageVMInstanceResponse();
|
||||
try {
|
||||
CallContext.current().setEventDetails("VM ID = " + vmId);
|
||||
boolean result = unmanagedVMsManager.unmanageVMInstance(vmId);
|
||||
response.setSuccess(result);
|
||||
if (result) {
|
||||
Pair<Boolean, String> result = unmanagedVMsManager.unmanageVMInstance(vmId, hostId, isForced());
|
||||
if (result.first()) {
|
||||
response.setSuccess(true);
|
||||
response.setHostId(result.second());
|
||||
response.setDetails("VM unmanaged successfully");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
|
@ -124,5 +154,4 @@ public class UnmanageVMInstanceCmd extends BaseAsyncCmd {
|
|||
public Long getApiResourceId() {
|
||||
return vmId;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import org.apache.cloudstack.acl.RoleType;
|
|||
import org.apache.cloudstack.api.APICommand;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.ApiErrorCode;
|
||||
import org.apache.cloudstack.api.BaseCmd;
|
||||
import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd;
|
||||
import org.apache.cloudstack.api.Parameter;
|
||||
import org.apache.cloudstack.api.ServerApiException;
|
||||
import org.apache.cloudstack.api.response.BackupScheduleResponse;
|
||||
|
|
@ -39,7 +39,6 @@ import com.cloud.exception.InsufficientCapacityException;
|
|||
import com.cloud.exception.NetworkRuleConflictException;
|
||||
import com.cloud.exception.ResourceAllocationException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
|
@ -48,10 +47,10 @@ import java.util.List;
|
|||
description = "List backup schedule of a VM",
|
||||
responseObject = BackupScheduleResponse.class, since = "4.14.0",
|
||||
authorized = {RoleType.Admin, RoleType.ResourceAdmin, RoleType.DomainAdmin, RoleType.User})
|
||||
public class ListBackupScheduleCmd extends BaseCmd {
|
||||
public class ListBackupScheduleCmd extends BaseListProjectAndAccountResourcesCmd {
|
||||
|
||||
@Inject
|
||||
private BackupManager backupManager;
|
||||
BackupManager backupManager;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
//////////////// API parameters /////////////////////
|
||||
|
|
@ -60,10 +59,16 @@ public class ListBackupScheduleCmd extends BaseCmd {
|
|||
@Parameter(name = ApiConstants.VIRTUAL_MACHINE_ID,
|
||||
type = CommandType.UUID,
|
||||
entityType = UserVmResponse.class,
|
||||
required = true,
|
||||
description = "ID of the VM")
|
||||
private Long vmId;
|
||||
|
||||
@Parameter(name = ApiConstants.ID,
|
||||
type = CommandType.UUID,
|
||||
entityType = BackupScheduleResponse.class,
|
||||
description = "the ID of the backup schedule",
|
||||
since = "4.22.0")
|
||||
private Long id;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////////// Accessors ///////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -72,6 +77,10 @@ public class ListBackupScheduleCmd extends BaseCmd {
|
|||
return vmId;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////// API Implementation///////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -79,19 +88,18 @@ public class ListBackupScheduleCmd extends BaseCmd {
|
|||
@Override
|
||||
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
|
||||
try{
|
||||
List<BackupSchedule> schedules = backupManager.listBackupSchedule(getVmId());
|
||||
List<BackupSchedule> schedules = backupManager.listBackupSchedules(this);
|
||||
ListResponse<BackupScheduleResponse> response = new ListResponse<>();
|
||||
List<BackupScheduleResponse> scheduleResponses = new ArrayList<>();
|
||||
|
||||
if (!CollectionUtils.isNullOrEmpty(schedules)) {
|
||||
for (BackupSchedule schedule : schedules) {
|
||||
scheduleResponses.add(_responseGenerator.createBackupScheduleResponse(schedule));
|
||||
}
|
||||
response.setResponses(scheduleResponses, schedules.size());
|
||||
response.setResponseName(getCommandName());
|
||||
setResponseObject(response);
|
||||
} else {
|
||||
throw new CloudRuntimeException("No backup schedule exists for the VM");
|
||||
}
|
||||
response.setResponses(scheduleResponses, schedules.size());
|
||||
response.setResponseName(getCommandName());
|
||||
setResponseObject(response);
|
||||
} catch (Exception e) {
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,12 +63,14 @@ public class AddBackupRepositoryCmd extends BaseCmd {
|
|||
type = CommandType.UUID,
|
||||
entityType = ZoneResponse.class,
|
||||
required = true,
|
||||
description = "ID of the zone where the backup repository is to be added")
|
||||
description = "ID of the zone where the backup repository is to be added for taking backups")
|
||||
private Long zoneId;
|
||||
|
||||
@Parameter(name = ApiConstants.CAPACITY_BYTES, type = CommandType.LONG, description = "capacity of this backup repository")
|
||||
private Long capacityBytes;
|
||||
|
||||
@Parameter(name = ApiConstants.CROSS_ZONE_INSTANCE_CREATION, type = CommandType.BOOLEAN, description = "backups on this repository can be used to create Instances on all Zones", since = "4.22.0")
|
||||
private Boolean crossZoneInstanceCreation;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////////// Accessors ///////////////////////
|
||||
|
|
@ -109,6 +111,10 @@ public class AddBackupRepositoryCmd extends BaseCmd {
|
|||
return capacityBytes;
|
||||
}
|
||||
|
||||
public Boolean crossZoneInstanceCreationEnabled() {
|
||||
return crossZoneInstanceCreation;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////////// Accessors ///////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -0,0 +1,116 @@
|
|||
// 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.api.command.user.backup.repository;
|
||||
|
||||
import org.apache.cloudstack.acl.RoleType;
|
||||
import org.apache.cloudstack.api.APICommand;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.ApiErrorCode;
|
||||
import org.apache.cloudstack.api.BaseCmd;
|
||||
import org.apache.cloudstack.api.Parameter;
|
||||
import org.apache.cloudstack.api.ServerApiException;
|
||||
import org.apache.cloudstack.api.response.BackupRepositoryResponse;
|
||||
import org.apache.cloudstack.backup.BackupRepository;
|
||||
import org.apache.cloudstack.backup.BackupRepositoryService;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@APICommand(name = "updateBackupRepository",
|
||||
description = "Update a backup repository",
|
||||
responseObject = BackupRepositoryResponse.class, since = "4.22.0",
|
||||
authorized = {RoleType.Admin})
|
||||
public class UpdateBackupRepositoryCmd extends BaseCmd {
|
||||
|
||||
@Inject
|
||||
private BackupRepositoryService backupRepositoryService;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
//////////////// API parameters /////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
||||
@Parameter(name = ApiConstants.ID, type = CommandType.UUID, required = true, entityType = BackupRepositoryResponse.class, description = "ID of the backup repository")
|
||||
private Long id;
|
||||
|
||||
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, description = "name of the backup repository")
|
||||
private String name;
|
||||
|
||||
@Parameter(name = ApiConstants.ADDRESS, type = CommandType.STRING, description = "address of the backup repository")
|
||||
private String address;
|
||||
|
||||
@Parameter(name = ApiConstants.MOUNT_OPTIONS, type = CommandType.STRING, description = "shared storage mount options")
|
||||
private String mountOptions;
|
||||
|
||||
@Parameter(name = ApiConstants.CROSS_ZONE_INSTANCE_CREATION, type = CommandType.BOOLEAN, description = "backups in this repository can be used to create Instances on all Zones")
|
||||
private Boolean crossZoneInstanceCreation;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////////// Accessors ///////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
||||
public BackupRepositoryService getBackupRepositoryService() {
|
||||
return backupRepositoryService;
|
||||
}
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getAddress() {
|
||||
return address;
|
||||
}
|
||||
|
||||
public String getMountOptions() {
|
||||
return mountOptions == null ? "" : mountOptions;
|
||||
}
|
||||
|
||||
public Boolean crossZoneInstanceCreationEnabled() {
|
||||
return crossZoneInstanceCreation;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////////// Accessors ///////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
try {
|
||||
BackupRepository result = backupRepositoryService.updateBackupRepository(this);
|
||||
if (result != null) {
|
||||
BackupRepositoryResponse response = _responseGenerator.createBackupRepositoryResponse(result);
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
} else {
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update the backup repository");
|
||||
}
|
||||
} catch (Exception ex4) {
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex4.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getEntityOwnerId() {
|
||||
return CallContext.current().getCallingAccount().getId();
|
||||
}
|
||||
}
|
||||
|
|
@ -75,6 +75,7 @@ public class ListCapabilitiesCmd extends BaseCmd {
|
|||
response.setInstanceLeaseEnabled((Boolean) capabilities.get(ApiConstants.INSTANCE_LEASE_ENABLED));
|
||||
response.setExtensionsPath((String)capabilities.get(ApiConstants.EXTENSIONS_PATH));
|
||||
response.setDynamicScalingEnabled((Boolean) capabilities.get(ApiConstants.DYNAMIC_SCALING_ENABLED));
|
||||
response.setAdditionalConfigEnabled((Boolean) capabilities.get(ApiConstants.ADDITONAL_CONFIG_ENABLED));
|
||||
response.setObjectName("capability");
|
||||
response.setResponseName(getCommandName());
|
||||
this.setResponseObject(response);
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ import org.apache.cloudstack.consoleproxy.ConsoleAccessManager;
|
|||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.cloudstack.utils.consoleproxy.ConsoleAccessUtils;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.Map;
|
||||
|
|
@ -86,6 +87,10 @@ public class CreateConsoleEndpointCmd extends BaseCmd {
|
|||
}
|
||||
|
||||
private ConsoleEndpointWebsocketResponse createWebsocketResponse(ConsoleEndpoint endpoint) {
|
||||
if (ObjectUtils.allNull(endpoint.getWebsocketHost(), endpoint.getWebsocketPort(), endpoint.getWebsocketPath(),
|
||||
endpoint.getWebsocketToken(), endpoint.getWebsocketExtra())) {
|
||||
return null;
|
||||
}
|
||||
ConsoleEndpointWebsocketResponse wsResponse = new ConsoleEndpointWebsocketResponse();
|
||||
wsResponse.setHost(endpoint.getWebsocketHost());
|
||||
wsResponse.setPort(endpoint.getWebsocketPort());
|
||||
|
|
|
|||
|
|
@ -104,6 +104,29 @@ public class GetUploadParamsForIsoCmd extends AbstractGetUploadParamsCmd {
|
|||
return osTypeId;
|
||||
}
|
||||
|
||||
public void setBootable(Boolean bootable) {
|
||||
this.bootable = bootable;
|
||||
}
|
||||
|
||||
public void setDisplayText(String displayText) {
|
||||
this.displayText = displayText;
|
||||
}
|
||||
|
||||
public void setFeatured(Boolean featured) {
|
||||
this.featured = featured;
|
||||
}
|
||||
|
||||
public void setPublicIso(Boolean publicIso) {
|
||||
this.publicIso = publicIso;
|
||||
}
|
||||
|
||||
public void setExtractable(Boolean extractable) {
|
||||
this.extractable = extractable;
|
||||
}
|
||||
|
||||
public void setOsTypeId(Long osTypeId) {
|
||||
this.osTypeId = osTypeId;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////// API Implementation///////////////////
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ public class UpdateLBHealthCheckPolicyCmd extends BaseAsyncCustomIdCmd{
|
|||
|
||||
@Override
|
||||
public String getEventDescription() {
|
||||
return "Update load balancer health check policy ID= " + id;
|
||||
return "Update load balancer health check policy ID = " + id;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ public class UpdateLBStickinessPolicyCmd extends BaseAsyncCustomIdCmd{
|
|||
|
||||
@Override
|
||||
public String getEventDescription() {
|
||||
return "Update load balancer stickiness policy ID= " + id;
|
||||
return "Update load balancer stickiness policy ID = " + id;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -53,6 +53,9 @@ public class ListNetworksCmd extends BaseListRetrieveOnlyResourceCountCmd implem
|
|||
@Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = NetworkResponse.class, description = "list networks by ID")
|
||||
private Long id;
|
||||
|
||||
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, description = "list networks by name", since = "4.22.0")
|
||||
private String name;
|
||||
|
||||
@Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, description = "the zone ID of the network")
|
||||
private Long zoneId;
|
||||
|
||||
|
|
@ -125,6 +128,10 @@ public class ListNetworksCmd extends BaseListRetrieveOnlyResourceCountCmd implem
|
|||
return id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public Long getZoneId() {
|
||||
return zoneId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import org.apache.cloudstack.acl.RoleType;
|
|||
|
||||
import org.apache.cloudstack.api.APICommand;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.BaseListCmd;
|
||||
import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd;
|
||||
import org.apache.cloudstack.api.Parameter;
|
||||
import org.apache.cloudstack.api.response.ListResponse;
|
||||
import org.apache.cloudstack.api.response.SnapshotPolicyResponse;
|
||||
|
|
@ -34,7 +34,7 @@ import com.cloud.utils.Pair;
|
|||
|
||||
@APICommand(name = "listSnapshotPolicies", description = "Lists snapshot policies.", responseObject = SnapshotPolicyResponse.class,
|
||||
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
|
||||
public class ListSnapshotPoliciesCmd extends BaseListCmd {
|
||||
public class ListSnapshotPoliciesCmd extends BaseListProjectAndAccountResourcesCmd {
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -69,13 +69,14 @@ public class ListSnapshotPoliciesCmd extends BaseListCmd {
|
|||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////// API Implementation///////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
Pair<List<? extends SnapshotPolicy>, Integer> result = _snapshotService.listPoliciesforVolume(this);
|
||||
Pair<List<? extends SnapshotPolicy>, Integer> result = _snapshotService.listSnapshotPolicies(this);
|
||||
ListResponse<SnapshotPolicyResponse> response = new ListResponse<SnapshotPolicyResponse>();
|
||||
List<SnapshotPolicyResponse> policyResponses = new ArrayList<SnapshotPolicyResponse>();
|
||||
for (SnapshotPolicy policy : result.first()) {
|
||||
|
|
|
|||
|
|
@ -104,6 +104,11 @@ public class GetUploadParamsForTemplateCmd extends AbstractGetUploadParamsCmd {
|
|||
description = "if true, the templates would be available for deploying CKS clusters", since = "4.21.0")
|
||||
protected Boolean forCks;
|
||||
|
||||
@Parameter(name = ApiConstants.TEMPLATE_TYPE, type = CommandType.STRING,
|
||||
description = "the type of the template. Valid options are: USER/VNF (for all users) and SYSTEM/ROUTING/BUILTIN (for admins only).",
|
||||
since = "4.22.0")
|
||||
private String templateType;
|
||||
|
||||
public String getDisplayText() {
|
||||
return StringUtils.isBlank(displayText) ? getName() : displayText;
|
||||
}
|
||||
|
|
@ -181,6 +186,10 @@ public class GetUploadParamsForTemplateCmd extends AbstractGetUploadParamsCmd {
|
|||
return CPU.CPUArch.fromType(arch);
|
||||
}
|
||||
|
||||
public String getTemplateType() {
|
||||
return templateType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() throws ServerApiException {
|
||||
validateRequest();
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ import org.apache.cloudstack.api.response.ProjectResponse;
|
|||
import org.apache.cloudstack.api.response.VpnUsersResponse;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
|
||||
import com.cloud.domain.Domain;
|
||||
import com.cloud.event.EventTypes;
|
||||
import com.cloud.network.VpnUser;
|
||||
import com.cloud.user.Account;
|
||||
|
|
@ -110,7 +109,6 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd {
|
|||
@Override
|
||||
public void execute() {
|
||||
VpnUser vpnUser = _entityMgr.findById(VpnUser.class, getEntityId());
|
||||
Account account = _entityMgr.findById(Account.class, vpnUser.getAccountId());
|
||||
try {
|
||||
if (!_ravService.applyVpnUsers(vpnUser.getAccountId(), userName)) {
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add vpn user");
|
||||
|
|
@ -118,24 +116,10 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd {
|
|||
} catch (Exception ex) {
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage());
|
||||
}
|
||||
|
||||
VpnUsersResponse vpnResponse = new VpnUsersResponse();
|
||||
vpnResponse.setId(vpnUser.getUuid());
|
||||
vpnResponse.setUserName(vpnUser.getUsername());
|
||||
vpnResponse.setAccountName(account.getAccountName());
|
||||
// re-retrieve the vpnuser, as the call to `applyVpnUsers` might have changed the state
|
||||
vpnUser = _entityMgr.findById(VpnUser.class, getEntityId());
|
||||
vpnResponse.setState(vpnUser.getState().toString());
|
||||
|
||||
Domain domain = _entityMgr.findById(Domain.class, account.getDomainId());
|
||||
if (domain != null) {
|
||||
vpnResponse.setDomainId(domain.getUuid());
|
||||
vpnResponse.setDomainName(domain.getName());
|
||||
vpnResponse.setDomainPath(domain.getPath());
|
||||
}
|
||||
|
||||
VpnUsersResponse vpnResponse = _responseGenerator.createVpnUserResponse(vpnUser);
|
||||
vpnResponse.setResponseName(getCommandName());
|
||||
vpnResponse.setObjectName("vpnuser");
|
||||
setResponseObject(vpnResponse);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ public class UpdateVpnConnectionCmd extends BaseAsyncCustomIdCmd {
|
|||
|
||||
@Override
|
||||
public String getEventDescription() {
|
||||
return "Updating site-to-site VPN connection id= " + id;
|
||||
return "Updating site-to-site VPN connection ID = " + id;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ public class UpdateVpnGatewayCmd extends BaseAsyncCustomIdCmd {
|
|||
|
||||
@Override
|
||||
public String getEventDescription() {
|
||||
return "Update site-to-site VPN gateway id= " + id;
|
||||
return "Update site-to-site VPN gateway ID = " + id;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -569,7 +569,7 @@ public class AccountResponse extends BaseResponse implements ResourceLimitAndCou
|
|||
|
||||
@Override
|
||||
public void setVpcLimit(String vpcLimit) {
|
||||
this.vpcLimit = networkLimit;
|
||||
this.vpcLimit = vpcLimit;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -61,6 +61,10 @@ public class BackupOfferingResponse extends BaseResponse {
|
|||
@Param(description = "zone name")
|
||||
private String zoneName;
|
||||
|
||||
@SerializedName(ApiConstants.CROSS_ZONE_INSTANCE_CREATION)
|
||||
@Param(description = "the backups with this offering can be used to create Instances on all Zones", since = "4.22.0")
|
||||
private Boolean crossZoneInstanceCreation;
|
||||
|
||||
@SerializedName(ApiConstants.CREATED)
|
||||
@Param(description = "the date this backup offering was created")
|
||||
private Date created;
|
||||
|
|
@ -97,6 +101,10 @@ public class BackupOfferingResponse extends BaseResponse {
|
|||
this.zoneName = zoneName;
|
||||
}
|
||||
|
||||
public void setCrossZoneInstanceCreation(Boolean crossZoneInstanceCreation) {
|
||||
this.crossZoneInstanceCreation = crossZoneInstanceCreation;
|
||||
}
|
||||
|
||||
public void setCreated(Date created) {
|
||||
this.created = created;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,6 +61,10 @@ public class BackupRepositoryResponse extends BaseResponse {
|
|||
@Param(description = "capacity of the backup repository")
|
||||
private Long capacityBytes;
|
||||
|
||||
@SerializedName(ApiConstants.CROSS_ZONE_INSTANCE_CREATION)
|
||||
@Param(description = "the backups in this repository can be used to create Instances on all Zones")
|
||||
private Boolean crossZoneInstanceCreation;
|
||||
|
||||
@SerializedName("created")
|
||||
@Param(description = "the date and time the backup repository was added")
|
||||
private Date created;
|
||||
|
|
@ -132,6 +136,14 @@ public class BackupRepositoryResponse extends BaseResponse {
|
|||
this.capacityBytes = capacityBytes;
|
||||
}
|
||||
|
||||
public Boolean getCrossZoneInstanceCreation() {
|
||||
return crossZoneInstanceCreation;
|
||||
}
|
||||
|
||||
public void setCrossZoneInstanceCreation(Boolean crossZoneInstanceCreation) {
|
||||
this.crossZoneInstanceCreation = crossZoneInstanceCreation;
|
||||
}
|
||||
|
||||
public Date getCreated() {
|
||||
return created;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -123,6 +123,10 @@ public class BackupResponse extends BaseResponse {
|
|||
@Param(description = "The backup offering corresponding to this backup was removed from the VM", since = "4.21.0")
|
||||
private Boolean vmOfferingRemoved;
|
||||
|
||||
@SerializedName(ApiConstants.IS_BACKUP_VM_EXPUNGED)
|
||||
@Param(description = "Indicates whether the VM from which the backup was taken is expunged or not", since = "4.22.0")
|
||||
private Boolean isVmExpunged;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
|
@ -306,4 +310,8 @@ public class BackupResponse extends BaseResponse {
|
|||
public void setVmOfferingRemoved(Boolean vmOfferingRemoved) {
|
||||
this.vmOfferingRemoved = vmOfferingRemoved;
|
||||
}
|
||||
|
||||
public void setVmExpunged(Boolean isVmExpunged) {
|
||||
this.isVmExpunged = isVmExpunged;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -149,6 +149,10 @@ public class CapabilitiesResponse extends BaseResponse {
|
|||
@Param(description = "true if dynamically scaling for instances is enabled", since = "4.21.0")
|
||||
private Boolean dynamicScalingEnabled;
|
||||
|
||||
@SerializedName(ApiConstants.ADDITONAL_CONFIG_ENABLED)
|
||||
@Param(description = "true if additional configurations or extraconfig can be passed to Instances", since = "4.20.2")
|
||||
private Boolean additionalConfigEnabled;
|
||||
|
||||
public void setSecurityGroupsEnabled(boolean securityGroupsEnabled) {
|
||||
this.securityGroupsEnabled = securityGroupsEnabled;
|
||||
}
|
||||
|
|
@ -272,4 +276,8 @@ public class CapabilitiesResponse extends BaseResponse {
|
|||
public void setDynamicScalingEnabled(Boolean dynamicScalingEnabled) {
|
||||
this.dynamicScalingEnabled = dynamicScalingEnabled;
|
||||
}
|
||||
|
||||
public void setAdditionalConfigEnabled(Boolean additionalConfigEnabled) {
|
||||
this.additionalConfigEnabled = additionalConfigEnabled;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,6 +62,10 @@ public class GetUploadParamsResponse extends BaseResponse {
|
|||
setObjectName("getuploadparams");
|
||||
}
|
||||
|
||||
public UUID getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(UUID id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,257 @@
|
|||
//
|
||||
// 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.api.response;
|
||||
|
||||
import com.cloud.serializer.Param;
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.BaseResponse;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class ImportVMTaskResponse extends BaseResponse {
|
||||
|
||||
@SerializedName(ApiConstants.ID)
|
||||
@Param(description = "the ID of importing task")
|
||||
private String id;
|
||||
|
||||
@SerializedName(ApiConstants.ZONE_ID)
|
||||
@Param(description = "the Zone ID")
|
||||
private String zoneId;
|
||||
|
||||
@SerializedName(ApiConstants.ZONE_NAME)
|
||||
@Param(description = "the Zone name")
|
||||
private String zoneName;
|
||||
|
||||
@SerializedName(ApiConstants.ACCOUNT)
|
||||
@Param(description = "the account name")
|
||||
private String accountName;
|
||||
|
||||
@SerializedName(ApiConstants.ACCOUNT_ID)
|
||||
@Param(description = "the ID of account")
|
||||
private String accountId;
|
||||
|
||||
@SerializedName(ApiConstants.VIRTUAL_MACHINE_ID)
|
||||
@Param(description = "the ID of the imported VM (after task is completed)")
|
||||
private String virtualMachineId;
|
||||
|
||||
@SerializedName(ApiConstants.DISPLAY_NAME)
|
||||
@Param(description = "the display name of the importing VM")
|
||||
private String displayName;
|
||||
|
||||
@SerializedName(ApiConstants.STATE)
|
||||
@Param(description = "the state of the importing VM task")
|
||||
private String state;
|
||||
|
||||
@SerializedName(ApiConstants.VCENTER)
|
||||
@Param(description = "the vcenter name of the importing VM task")
|
||||
private String vcenter;
|
||||
|
||||
@SerializedName(ApiConstants.DATACENTER_NAME)
|
||||
@Param(description = "the datacenter name of the importing VM task")
|
||||
private String datacenterName;
|
||||
|
||||
@SerializedName("sourcevmname")
|
||||
@Param(description = "the source VM name")
|
||||
private String sourceVMName;
|
||||
|
||||
@SerializedName("step")
|
||||
@Param(description = "the current step on the importing VM task")
|
||||
private String step;
|
||||
|
||||
@SerializedName("stepduration")
|
||||
@Param(description = "the duration of the current step")
|
||||
private String stepDuration;
|
||||
|
||||
@SerializedName(ApiConstants.DURATION)
|
||||
@Param(description = "the total task duration")
|
||||
private String duration;
|
||||
|
||||
@SerializedName(ApiConstants.DESCRIPTION)
|
||||
@Param(description = "the current step description on the importing VM task")
|
||||
private String description;
|
||||
|
||||
@SerializedName(ApiConstants.CONVERT_INSTANCE_HOST_ID)
|
||||
@Param(description = "the ID of the host on which the instance is being converted")
|
||||
private String convertInstanceHostId;
|
||||
|
||||
@SerializedName("convertinstancehostname")
|
||||
@Param(description = "the name of the host on which the instance is being converted")
|
||||
private String convertInstanceHostName;
|
||||
|
||||
@SerializedName(ApiConstants.CREATED)
|
||||
@Param(description = "the create date of the importing task")
|
||||
private Date created;
|
||||
|
||||
@SerializedName(ApiConstants.LAST_UPDATED)
|
||||
@Param(description = "the last updated date of the importing task")
|
||||
private Date lastUpdated;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getZoneId() {
|
||||
return zoneId;
|
||||
}
|
||||
|
||||
public void setZoneId(String zoneId) {
|
||||
this.zoneId = zoneId;
|
||||
}
|
||||
|
||||
public String getZoneName() {
|
||||
return zoneName;
|
||||
}
|
||||
|
||||
public void setZoneName(String zoneName) {
|
||||
this.zoneName = zoneName;
|
||||
}
|
||||
|
||||
public String getAccountName() {
|
||||
return accountName;
|
||||
}
|
||||
|
||||
public void setAccountName(String accountName) {
|
||||
this.accountName = accountName;
|
||||
}
|
||||
|
||||
public String getAccountId() {
|
||||
return accountId;
|
||||
}
|
||||
|
||||
public void setAccountId(String accountId) {
|
||||
this.accountId = accountId;
|
||||
}
|
||||
|
||||
public String getVirtualMachineId() {
|
||||
return virtualMachineId;
|
||||
}
|
||||
|
||||
public void setVirtualMachineId(String virtualMachineId) {
|
||||
this.virtualMachineId = virtualMachineId;
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
return displayName;
|
||||
}
|
||||
|
||||
public void setDisplayName(String displayName) {
|
||||
this.displayName = displayName;
|
||||
}
|
||||
|
||||
public String getVcenter() {
|
||||
return vcenter;
|
||||
}
|
||||
|
||||
public void setVcenter(String vcenter) {
|
||||
this.vcenter = vcenter;
|
||||
}
|
||||
|
||||
public String getDatacenterName() {
|
||||
return datacenterName;
|
||||
}
|
||||
|
||||
public void setDatacenterName(String datacenterName) {
|
||||
this.datacenterName = datacenterName;
|
||||
}
|
||||
|
||||
public String getSourceVMName() {
|
||||
return sourceVMName;
|
||||
}
|
||||
|
||||
public void setSourceVMName(String sourceVMName) {
|
||||
this.sourceVMName = sourceVMName;
|
||||
}
|
||||
|
||||
public String getStep() {
|
||||
return step;
|
||||
}
|
||||
|
||||
public void setStep(String step) {
|
||||
this.step = step;
|
||||
}
|
||||
|
||||
public String getStepDuration() {
|
||||
return stepDuration;
|
||||
}
|
||||
|
||||
public void setStepDuration(String stepDuration) {
|
||||
this.stepDuration = stepDuration;
|
||||
}
|
||||
|
||||
public String getDuration() {
|
||||
return duration;
|
||||
}
|
||||
|
||||
public void setDuration(String duration) {
|
||||
this.duration = duration;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getConvertInstanceHostId() {
|
||||
return convertInstanceHostId;
|
||||
}
|
||||
|
||||
public void setConvertInstanceHostId(String convertInstanceHostId) {
|
||||
this.convertInstanceHostId = convertInstanceHostId;
|
||||
}
|
||||
|
||||
public String getConvertInstanceHostName() {
|
||||
return convertInstanceHostName;
|
||||
}
|
||||
|
||||
public void setConvertInstanceHostName(String convertInstanceHostName) {
|
||||
this.convertInstanceHostName = convertInstanceHostName;
|
||||
}
|
||||
|
||||
public Date getCreated() {
|
||||
return created;
|
||||
}
|
||||
|
||||
public void setCreated(Date created) {
|
||||
this.created = created;
|
||||
}
|
||||
|
||||
public Date getLastUpdated() {
|
||||
return lastUpdated;
|
||||
}
|
||||
|
||||
public void setLastUpdated(Date lastUpdated) {
|
||||
this.lastUpdated = lastUpdated;
|
||||
}
|
||||
|
||||
public String getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
public void setState(String state) {
|
||||
this.state = state;
|
||||
}
|
||||
}
|
||||
|
|
@ -19,6 +19,7 @@ package org.apache.cloudstack.api.response;
|
|||
|
||||
import java.util.Date;
|
||||
|
||||
import com.cloud.network.VirtualNetworkApplianceService.RouterHealthStatus;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.BaseResponse;
|
||||
|
||||
|
|
@ -35,9 +36,13 @@ public class RouterHealthCheckResultResponse extends BaseResponse {
|
|||
private String checkType;
|
||||
|
||||
@SerializedName(ApiConstants.SUCCESS)
|
||||
@Param(description = "result of the health check")
|
||||
@Param(description = "result of the health check if available")
|
||||
private boolean result;
|
||||
|
||||
@SerializedName(ApiConstants.STATUS)
|
||||
@Param(description = "the result of the health check in enum form: {SUCCESS, FAILURE, WARNING, UNKNOWN}")
|
||||
private RouterHealthStatus state;
|
||||
|
||||
@SerializedName(ApiConstants.LAST_UPDATED)
|
||||
@Param(description = "the date this VPC was created")
|
||||
private Date lastUpdated;
|
||||
|
|
@ -54,10 +59,14 @@ public class RouterHealthCheckResultResponse extends BaseResponse {
|
|||
return checkType;
|
||||
}
|
||||
|
||||
public boolean getResult() {
|
||||
public Boolean getResult() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public RouterHealthStatus getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
public Date getLastUpdated() {
|
||||
return lastUpdated;
|
||||
}
|
||||
|
|
@ -74,10 +83,14 @@ public class RouterHealthCheckResultResponse extends BaseResponse {
|
|||
this.checkType = checkType;
|
||||
}
|
||||
|
||||
public void setResult(boolean result) {
|
||||
public void setResult(Boolean result) {
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
public void setState(RouterHealthStatus state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public void setLastUpdated(Date lastUpdated) {
|
||||
this.lastUpdated = lastUpdated;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ public class ServiceOfferingResponse extends BaseResponseWithAnnotations {
|
|||
private Boolean isCustomized;
|
||||
|
||||
@SerializedName("cacheMode")
|
||||
@Param(description = "the cache mode to use for this disk offering. none, writeback or writethrough", since = "4.14")
|
||||
@Param(description = "the cache mode to use for this disk offering. none, writeback, writethrough or hypervisor default", since = "4.14")
|
||||
private String cacheMode;
|
||||
|
||||
@SerializedName("vspherestoragepolicy")
|
||||
|
|
|
|||
|
|
@ -37,6 +37,10 @@ public class SnapshotPolicyResponse extends BaseResponseWithTagInformation {
|
|||
@Param(description = "the ID of the disk volume")
|
||||
private String volumeId;
|
||||
|
||||
@SerializedName("volumename")
|
||||
@Param(description = "the name of the disk volume")
|
||||
private String volumeName;
|
||||
|
||||
@SerializedName("schedule")
|
||||
@Param(description = "time the snapshot is scheduled to be taken.")
|
||||
private String schedule;
|
||||
|
|
@ -87,6 +91,10 @@ public class SnapshotPolicyResponse extends BaseResponseWithTagInformation {
|
|||
this.volumeId = volumeId;
|
||||
}
|
||||
|
||||
public void setVolumeName(String volumeName) {
|
||||
this.volumeName = volumeName;
|
||||
}
|
||||
|
||||
public String getSchedule() {
|
||||
return schedule;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,19 +77,24 @@ public class StoragePoolResponse extends BaseResponseWithAnnotations {
|
|||
@Param(description = "the name of the cluster for the storage pool")
|
||||
private String clusterName;
|
||||
|
||||
@SerializedName(ApiConstants.CAPACITY_BYTES)
|
||||
@Param(description = "bytes CloudStack can provision from this storage pool", since = "4.22.0")
|
||||
private Long capacityBytes;
|
||||
|
||||
@Deprecated(since = "4.22.0")
|
||||
@SerializedName("disksizetotal")
|
||||
@Param(description = "the total disk size of the storage pool")
|
||||
private Long diskSizeTotal;
|
||||
|
||||
@SerializedName("disksizeallocated")
|
||||
@Param(description = "the host's currently allocated disk size")
|
||||
@Param(description = "the pool's currently allocated disk size")
|
||||
private Long diskSizeAllocated;
|
||||
|
||||
@SerializedName("disksizeused")
|
||||
@Param(description = "the host's currently used disk size")
|
||||
@Param(description = "the pool's currently used disk size")
|
||||
private Long diskSizeUsed;
|
||||
|
||||
@SerializedName("capacityiops")
|
||||
@SerializedName(ApiConstants.CAPACITY_IOPS)
|
||||
@Param(description = "IOPS CloudStack can provision from this storage pool")
|
||||
private Long capacityIops;
|
||||
|
||||
|
|
@ -288,6 +293,14 @@ public class StoragePoolResponse extends BaseResponseWithAnnotations {
|
|||
this.clusterName = clusterName;
|
||||
}
|
||||
|
||||
public Long getCapacityBytes() {
|
||||
return capacityBytes;
|
||||
}
|
||||
|
||||
public void setCapacityBytes(Long capacityBytes) {
|
||||
this.capacityBytes = capacityBytes;
|
||||
}
|
||||
|
||||
public Long getDiskSizeTotal() {
|
||||
return diskSizeTotal;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,6 +56,14 @@ public class TrafficTypeResponse extends BaseResponse {
|
|||
@Param(description = "The network name label of the physical device dedicated to this traffic on a HyperV host")
|
||||
private String hypervNetworkLabel;
|
||||
|
||||
@SerializedName(ApiConstants.VLAN)
|
||||
@Param(description = "The VLAN id to be used for Management traffic by VMware host")
|
||||
private String vlan;
|
||||
|
||||
@SerializedName(ApiConstants.ISOLATION_METHODS)
|
||||
@Param(description = "isolation methods for the physical network traffic")
|
||||
private String isolationMethods;
|
||||
|
||||
@SerializedName(ApiConstants.OVM3_NETWORK_LABEL)
|
||||
@Param(description = "The network name of the physical device dedicated to this traffic on an OVM3 host")
|
||||
private String ovm3NetworkLabel;
|
||||
|
|
@ -128,4 +136,20 @@ public class TrafficTypeResponse extends BaseResponse {
|
|||
public void setOvm3Label(String ovm3Label) {
|
||||
this.ovm3NetworkLabel = ovm3Label;
|
||||
}
|
||||
|
||||
public String getIsolationMethods() {
|
||||
return isolationMethods;
|
||||
}
|
||||
|
||||
public void setIsolationMethods(String isolationMethods) {
|
||||
this.isolationMethods = isolationMethods;
|
||||
}
|
||||
|
||||
public String getVlan() {
|
||||
return vlan;
|
||||
}
|
||||
|
||||
public void setVlan(String vlan) {
|
||||
this.vlan = vlan;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,10 @@ public class UnmanageVMInstanceResponse extends BaseResponse {
|
|||
@Param(description = "details of the unmanage VM operation")
|
||||
private String details;
|
||||
|
||||
@SerializedName(ApiConstants.HOST_ID)
|
||||
@Param(description = "The ID of the host used for unmanaged Instance")
|
||||
private String hostId;
|
||||
|
||||
public UnmanageVMInstanceResponse() {
|
||||
}
|
||||
|
||||
|
|
@ -55,4 +59,12 @@ public class UnmanageVMInstanceResponse extends BaseResponse {
|
|||
public void setDetails(String details) {
|
||||
this.details = details;
|
||||
}
|
||||
|
||||
public String getHostId() {
|
||||
return hostId;
|
||||
}
|
||||
|
||||
public void setHostId(String hostId) {
|
||||
this.hostId = hostId;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,27 +16,10 @@
|
|||
// under the License.
|
||||
package org.apache.cloudstack.api.response;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.BaseResponse;
|
||||
import org.apache.cloudstack.api.EntityReference;
|
||||
import org.apache.cloudstack.jobs.JobInfo;
|
||||
|
||||
import com.cloud.serializer.Param;
|
||||
|
||||
@EntityReference(value = JobInfo.class)
|
||||
@SuppressWarnings("unused")
|
||||
public class UpgradeRouterTemplateResponse extends BaseResponse {
|
||||
@SerializedName(ApiConstants.JOB_ID)
|
||||
@Param(description = "the id of AsyncJob")
|
||||
private String asyncJobId;
|
||||
|
||||
public String getAsyncJobId() {
|
||||
return asyncJobId;
|
||||
}
|
||||
|
||||
public void setAsyncJobId(String asyncJobId) {
|
||||
this.asyncJobId = asyncJobId;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ import com.google.gson.annotations.SerializedName;
|
|||
|
||||
@SuppressWarnings("unused")
|
||||
@EntityReference(value = {VirtualMachine.class, UserVm.class, VirtualRouter.class})
|
||||
public class UserVmResponse extends BaseResponseWithTagInformation implements ControlledEntityResponse, SetResourceIconResponse {
|
||||
public class UserVmResponse extends BaseResponseWithTagInformation implements ControlledViewEntityResponse, SetResourceIconResponse {
|
||||
@SerializedName(ApiConstants.ID)
|
||||
@Param(description = "the ID of the virtual machine")
|
||||
private String id;
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import org.apache.cloudstack.api.command.user.backup.CreateBackupCmd;
|
|||
import org.apache.cloudstack.api.command.user.backup.CreateBackupScheduleCmd;
|
||||
import org.apache.cloudstack.api.command.user.backup.DeleteBackupScheduleCmd;
|
||||
import org.apache.cloudstack.api.command.user.backup.ListBackupOfferingsCmd;
|
||||
import org.apache.cloudstack.api.command.user.backup.ListBackupScheduleCmd;
|
||||
import org.apache.cloudstack.api.command.user.backup.ListBackupsCmd;
|
||||
import org.apache.cloudstack.api.response.BackupResponse;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
|
|
@ -55,7 +56,7 @@ public interface BackupManager extends BackupService, Configurable, PluggableSer
|
|||
ConfigKey<String> BackupProviderPlugin = new ConfigKey<>("Advanced", String.class,
|
||||
"backup.framework.provider.plugin",
|
||||
"dummy",
|
||||
"The backup and recovery provider plugin.", true, ConfigKey.Scope.Zone, BackupFrameworkEnabled.key());
|
||||
"The backup and recovery provider plugin. Valid plugin values: dummy, veeam, networker and nas", true, ConfigKey.Scope.Zone, BackupFrameworkEnabled.key());
|
||||
|
||||
ConfigKey<Long> BackupSyncPollingInterval = new ConfigKey<>("Advanced", Long.class,
|
||||
"backup.framework.sync.interval",
|
||||
|
|
@ -174,7 +175,7 @@ public interface BackupManager extends BackupService, Configurable, PluggableSer
|
|||
* @param vmId
|
||||
* @return
|
||||
*/
|
||||
List<BackupSchedule> listBackupSchedule(Long vmId);
|
||||
List<BackupSchedule> listBackupSchedules(ListBackupScheduleCmd cmd);
|
||||
|
||||
/**
|
||||
* Deletes VM backup schedule for a VM
|
||||
|
|
@ -205,6 +206,8 @@ public interface BackupManager extends BackupService, Configurable, PluggableSer
|
|||
|
||||
Boolean canCreateInstanceFromBackup(Long backupId);
|
||||
|
||||
Boolean canCreateInstanceFromBackupAcrossZones(Long backupId);
|
||||
|
||||
/**
|
||||
* Restore a backup to a new Instance
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@ import com.cloud.vm.VirtualMachine;
|
|||
|
||||
public interface BackupProvider {
|
||||
|
||||
Boolean crossZoneInstanceCreationEnabled(BackupOffering backupOffering);
|
||||
|
||||
/**
|
||||
* Returns the unique name of the provider
|
||||
* @return returns provider name
|
||||
|
|
@ -85,7 +87,7 @@ public interface BackupProvider {
|
|||
*/
|
||||
boolean deleteBackup(Backup backup, boolean forced);
|
||||
|
||||
boolean restoreBackupToVM(VirtualMachine vm, Backup backup, String hostIp, String dataStoreUuid);
|
||||
Pair<Boolean, String> restoreBackupToVM(VirtualMachine vm, Backup backup, String hostIp, String dataStoreUuid);
|
||||
|
||||
/**
|
||||
* Restore VM from backup
|
||||
|
|
|
|||
|
|
@ -28,9 +28,12 @@ public interface BackupRepository extends InternalIdentity, Identity {
|
|||
String getType();
|
||||
String getAddress();
|
||||
String getMountOptions();
|
||||
void setMountOptions(String mountOptions);
|
||||
void setUsedBytes(Long usedBytes);
|
||||
Long getCapacityBytes();
|
||||
Long getUsedBytes();
|
||||
void setCapacityBytes(Long capacityBytes);
|
||||
Boolean crossZoneInstanceCreationEnabled();
|
||||
void setCrossZoneInstanceCreation(Boolean crossZoneInstanceCreation);
|
||||
Date getCreated();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,11 +23,13 @@ import com.cloud.utils.Pair;
|
|||
import org.apache.cloudstack.api.command.user.backup.repository.AddBackupRepositoryCmd;
|
||||
import org.apache.cloudstack.api.command.user.backup.repository.DeleteBackupRepositoryCmd;
|
||||
import org.apache.cloudstack.api.command.user.backup.repository.ListBackupRepositoriesCmd;
|
||||
import org.apache.cloudstack.api.command.user.backup.repository.UpdateBackupRepositoryCmd;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface BackupRepositoryService {
|
||||
BackupRepository addBackupRepository(AddBackupRepositoryCmd cmd);
|
||||
BackupRepository updateBackupRepository(UpdateBackupRepositoryCmd cmd);
|
||||
boolean deleteBackupRepository(DeleteBackupRepositoryCmd cmd);
|
||||
Pair<List<BackupRepository>, Integer> listBackupRepositories(ListBackupRepositoriesCmd cmd);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,11 +19,12 @@ package org.apache.cloudstack.backup;
|
|||
|
||||
import java.util.Date;
|
||||
|
||||
import org.apache.cloudstack.acl.ControlledEntity;
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
import com.cloud.utils.DateUtil;
|
||||
|
||||
public interface BackupSchedule extends InternalIdentity {
|
||||
public interface BackupSchedule extends ControlledEntity, InternalIdentity {
|
||||
Long getVmId();
|
||||
DateUtil.IntervalType getScheduleType();
|
||||
String getSchedule();
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@ import org.apache.cloudstack.framework.config.Configurable;
|
|||
|
||||
import com.cloud.utils.component.Manager;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public interface UserDataManager extends Manager, Configurable {
|
||||
String VM_USERDATA_MAX_LENGTH_STRING = "vm.userdata.max.length";
|
||||
ConfigKey<Integer> VM_USERDATA_MAX_LENGTH = new ConfigKey<>("Advanced", Integer.class, VM_USERDATA_MAX_LENGTH_STRING, "32768",
|
||||
|
|
@ -29,4 +31,14 @@ public interface UserDataManager extends Manager, Configurable {
|
|||
|
||||
String concatenateUserData(String userdata1, String userdata2, String userdataProvider);
|
||||
String validateUserData(String userData, BaseCmd.HTTPMethod httpmethod);
|
||||
|
||||
/**
|
||||
* This method validates the user data uuid for system VMs and returns the user data
|
||||
* after compression and base64 encoding for the system VM to consume.
|
||||
*
|
||||
* @param userDataUuid
|
||||
* @return a String containing the user data after compression and base64 encoding
|
||||
* @throws IOException
|
||||
*/
|
||||
String validateAndGetUserDataForSystemVM(String userDataUuid) throws IOException;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
*/
|
||||
package org.apache.cloudstack.vm;
|
||||
|
||||
import org.apache.cloudstack.api.Identity;
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
public interface ImportVmTask extends Identity, InternalIdentity {
|
||||
enum Step {
|
||||
Prepare, CloningInstance, ConvertingInstance, Importing, Completed
|
||||
}
|
||||
|
||||
enum TaskState {
|
||||
Running, Completed, Failed;
|
||||
|
||||
public static TaskState getValue(String state) {
|
||||
for (TaskState s : TaskState.values()) {
|
||||
if (s.name().equalsIgnoreCase(state)) {
|
||||
return s;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException("Invalid task state: " + state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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.vm;
|
||||
|
||||
import com.cloud.dc.DataCenter;
|
||||
import com.cloud.host.Host;
|
||||
import com.cloud.user.Account;
|
||||
import org.apache.cloudstack.api.command.admin.vm.ListImportVMTasksCmd;
|
||||
import org.apache.cloudstack.api.response.ImportVMTaskResponse;
|
||||
import org.apache.cloudstack.api.response.ListResponse;
|
||||
|
||||
public interface ImportVmTasksManager {
|
||||
|
||||
ListResponse<ImportVMTaskResponse> listImportVMTasks(ListImportVMTasksCmd cmd);
|
||||
|
||||
ImportVmTask createImportVMTaskRecord(DataCenter zone, Account owner, long userId, String displayName,
|
||||
String vcenter, String datacenterName, String sourceVMName,
|
||||
Host convertHost, Host importHost);
|
||||
|
||||
void updateImportVMTaskStep(ImportVmTask importVMTaskVO, DataCenter zone, Account owner, Host convertHost,
|
||||
Host importHost, Long vmId, ImportVmTask.Step step);
|
||||
|
||||
void updateImportVMTaskErrorState(ImportVmTask importVMTaskVO, ImportVmTask.TaskState state, String errorMsg);
|
||||
}
|
||||
|
|
@ -17,11 +17,14 @@
|
|||
|
||||
package org.apache.cloudstack.vm;
|
||||
|
||||
import com.cloud.utils.Pair;
|
||||
|
||||
public interface UnmanageVMService {
|
||||
|
||||
/**
|
||||
* Unmanage a guest VM from CloudStack
|
||||
* @return true if the VM is successfully unmanaged, false if not.
|
||||
*
|
||||
* @return (true if successful, false if not, hostUuid) if the VM is successfully unmanaged.
|
||||
*/
|
||||
boolean unmanageVMInstance(long vmId);
|
||||
Pair<Boolean, String> unmanageVMInstance(long vmId, Long paramHostId, boolean isForced);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,98 @@
|
|||
// 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.api.command.user.backup;
|
||||
|
||||
import com.cloud.exception.InsufficientCapacityException;
|
||||
import com.cloud.exception.NetworkRuleConflictException;
|
||||
import com.cloud.exception.ResourceAllocationException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.user.Account;
|
||||
import org.apache.cloudstack.api.ResponseGenerator;
|
||||
import org.apache.cloudstack.api.response.BackupScheduleResponse;
|
||||
import org.apache.cloudstack.api.response.ListResponse;
|
||||
import org.apache.cloudstack.backup.BackupManager;
|
||||
import org.apache.cloudstack.backup.BackupSchedule;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class ListBackupScheduleCmdTest {
|
||||
|
||||
@Mock
|
||||
private BackupManager backupManager;
|
||||
|
||||
@Mock
|
||||
private ResponseGenerator responseGenerator;
|
||||
|
||||
private ListBackupScheduleCmd cmd;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
cmd = new ListBackupScheduleCmd();
|
||||
cmd.backupManager = backupManager;
|
||||
cmd._responseGenerator = responseGenerator;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExecuteWithSchedules() throws ResourceUnavailableException, InsufficientCapacityException, ResourceAllocationException, NetworkRuleConflictException {
|
||||
BackupSchedule schedule = Mockito.mock(BackupSchedule.class);
|
||||
BackupScheduleResponse scheduleResponse = Mockito.mock(BackupScheduleResponse.class);
|
||||
List<BackupSchedule> schedules = new ArrayList<>();
|
||||
schedules.add(schedule);
|
||||
|
||||
Mockito.when(backupManager.listBackupSchedules(cmd)).thenReturn(schedules);
|
||||
Mockito.when(responseGenerator.createBackupScheduleResponse(schedule)).thenReturn(scheduleResponse);
|
||||
|
||||
Account mockAccount = Mockito.mock(Account.class);
|
||||
CallContext callContext = Mockito.mock(CallContext.class);
|
||||
try (org.mockito.MockedStatic<CallContext> mocked = Mockito.mockStatic(CallContext.class)) {
|
||||
cmd.execute();
|
||||
}
|
||||
|
||||
ListResponse<?> response = (ListResponse<?>) cmd.getResponseObject();
|
||||
Assert.assertNotNull(response);
|
||||
Assert.assertEquals(1, response.getResponses().size());
|
||||
Assert.assertEquals(scheduleResponse, response.getResponses().get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExecuteWithNoSchedules() {
|
||||
Mockito.when(backupManager.listBackupSchedules(cmd)).thenReturn(new ArrayList<>());
|
||||
CallContext callContext = Mockito.mock(CallContext.class);
|
||||
|
||||
try (org.mockito.MockedStatic<CallContext> mocked = Mockito.mockStatic(CallContext.class)) {
|
||||
mocked.when(CallContext::current).thenReturn(callContext);
|
||||
cmd.execute();
|
||||
} catch (ResourceUnavailableException | InsufficientCapacityException | ResourceAllocationException |
|
||||
NetworkRuleConflictException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
ListResponse<?> response = (ListResponse<?>) cmd.getResponseObject();
|
||||
Assert.assertNotNull(response);
|
||||
Assert.assertEquals(0, response.getResponses().size());
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue