summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-testcloud.spec1254
-rw-r--r--sources1
3 files changed, 1256 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..c1d7421 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/testcloud-0.8.2.tar.gz
diff --git a/python-testcloud.spec b/python-testcloud.spec
new file mode 100644
index 0000000..79251c7
--- /dev/null
+++ b/python-testcloud.spec
@@ -0,0 +1,1254 @@
+%global _empty_manifest_terminate_build 0
+Name: python-testcloud
+Version: 0.8.2
+Release: 1
+Summary: A tool to download and boot cloud images locally, with an easy to use API.
+License: GPLv2+
+URL: https://pagure.io/testcloud
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/93/1b/5eb5eaee9442fffef8f0699527c98ca16fc0f04f5a9c36551083f4271cc7/testcloud-0.8.2.tar.gz
+BuildArch: noarch
+
+Requires: python3-Jinja2
+Requires: python3-libvirt-python
+Requires: python3-requests
+
+%description
+# testcloud
+
+**testcloud** is a small helper script to download and boot cloud/coreos images
+locally. Testcloud supports wide range of distributions, namely Fedora, Fedora CoreOS,
+CentOS, CentOS Stream, Red Hat Enterprise Linux, Debian and Ubuntu.
+
+**testcloud** can run either in system mode or in constrained user session mode,
+which is usefull for running it eg. in unprivileged containers.
+
+## Installation
+
+The following procedure should only be used to install **testcloud** on
+a production system. For developing purposes, you need a different kind
+of installation which is described in the **Testcloud Development**
+section below.
+
+To use **testcloud** on a production system:
+
+1. Install the **testcloud**.
+
+ ```
+ $ sudo dnf install testcloud
+ ```
+
+2. Add yourself to the `testcloud group`.
+
+ ```
+ $ sudo usermod -a -G testcloud $USER
+ ```
+
+3. Restart your user session to update the group privileges, or use
+ `su -` to get a login shell for that particular user where the group
+ settings will be updated.
+
+ ```
+ $ su -i $USER
+ ```
+
+4. Now, you are ready to use **testcloud**.
+
+## Using testcloud
+
+### Creating a new instance
+
+To create a new instance, you will need to provide distribution and version you wish to use or the url of some cloud
+image in the *qcow2* format. If you do not have an image location of
+your own, you can use the image from the **Fedora Cloud** download pages
+(<https://alt.fedoraproject.org/cloud/>).
+
+To create a new instance with the cloud image, run:
+
+```
+$ testcloud instance create <url for qcow2 image> or <distro:version>
+```
+
+Some examples how to create an instance with distribution:version shortcut:
+
+```
+# Latest Fedora Release
+$ testcloud instance create fedora:latest
+```
+
+or, you can skip latest, which is the default value for version:
+```
+# Latest Fedora Release
+$ testcloud instance create fedora
+```
+
+```
+# Fedora Rawhide (latest Nightly Compose)
+$ testcloud instance create fedora:rawhide
+```
+
+```
+# CentOS Stream 8
+$ testcloud instance create centos-stream:8
+```
+
+```
+# Ubuntu Hirsute (21.04)
+$ testcloud instance create ubuntu:hirsute
+```
+
+```
+# Debian 11
+$ testcloud instance create debian:11
+```
+
+Supported distributions with shortcuts are: Fedora, CentOS, CentOS Stream, Ubuntu and Debian. For other distributions, you can provide link to basically any qcow2 image which has the cloud-init package included.
+
+Testcloud supports also Vagrant .box files, in a limited manner and currently only for CentOS.
+
+**testcloud** will download the *qcow2* image and save it in the
+`/var/lib/testcloud/backingstores/<qcow2-filename>`. It will use this
+image a backing store for the newly created instance in
+`/var/tmp/instances/<instance-name>`. When the image has been already
+downloaded, **testcloud** will use the previously download image to
+create the instance.
+
+To create a new instance with the coreos image, run:
+
+```
+$ testcloud instance create fedora-coreos:<stream> or <url for qcow2 image>
+
+```
+
+You will be able to see the instance using the `list` command.
+
+```
+$ testcloud instance list
+```
+
+Alternatively, the instances can also be viewed and manipulated using
+the **virt-manager** tool.
+
+### Starting, stopping, and removing an instance
+
+Instances can be started and stopped using the `instance` interface of
+the **testcloud**, too:
+
+1. List all instances to see the correct name of the instance:
+
+ ```
+ $ testcloud instance list
+ ```
+
+2. Start the instance:
+
+ ```
+ $ testcloud instance start <instance-name>
+ ```
+
+3. Stop the instance:
+
+ ```
+ $ testcloud instance stop <instance-name>
+ ```
+
+4. Remove the instance:
+
+ ```
+ $ testcloud instance remove <instance-name>
+ ```
+
+Removing the instance only succeeds when the appropriate instance has
+been **stopped** before. However, you can use the `-f` option to force
+removing the instance.
+
+### Other instance operations
+
+1. Reboot the instance:
+
+ ```
+ $ testcloud instance reboot <instance-name>
+ ```
+
+2. Remove non-existing libvirt VMs from testcloud:
+
+ ```
+ $ testcloud instance clean
+ ```
+
+### Logging into the instance
+
+When the cloud/coreos instance is created, **testcloud** will return its IP address
+that you can use to access the running instance via `ssh`. The default *login
+name* is `cloud-user` and the *password* is `passw0rd`. Testcloud will output info how you can connect to any of the Supported Distributions.
+
+```
+ssh cloud-user@<instance-IP>
+```
+
+The IP address of an instance is also shown when you list the instance
+using the `testcloud instance list` command. You can also control the
+instance using the **virt-manager** , **GNOME Boxes** or any other tool to manage libvirt VMs.
+
+### Available options to create an instance
+
+There are several options (all optional) that can be used to create a
+new instance using **testcloud**.
+
+-c, \--connection QEMU_URI
+
+: You can specify uri to qemu you wish to use. For limited environments, you might wish to use *qemu:///session*. Remote connections other than *qemu:///session* and *qemu:///system* (like qemu+ssh,...) are known to be problematic.
+
+\--ram RAM
+
+: To set the amount of RAM that will be available to the virtual
+ machine (in MiB).
+
+\--vcpus VCPUS
+
+: To set the amount of VCPUS that will be available to the virtual
+ machine.
+
+\--no-graphic
+
+: This turns off the graphical display of the virtual machine.
+
+\--vnc
+
+: To open a VNC connection at the `:1` display of the instance.
+
+-n, \--name NAME
+
+: To specify a custom name for you instance.
+
+\--timeout TIMEOUT
+
+: A time (in seconds) to wait for boot to complete. Setting to 0
+ (default) will disable this functionality.
+
+\--disksize DISKSIZE
+
+: To set the disk size of the virtual machine (in GiB)
+
+There are several additional options that can be used to create a
+new Coreos instance using **testcloud**.
+
+\--bu_file BU_FILE
+
+: To provide a bu_file you want to use
+
+\--ign_file IGN_FILE
+
+: To provide an ign_file you want to use
+
+\--ssh_path
+
+: To provide ssh pubkey path
+
+### Configuration
+
+The default configuration should work for many people but those defaults
+can be overridden through the use of a `settings.py` file containing the
+values to use when overriding default settings. The example file in
+`conf/settings-example.py` shows the possible configuration values which
+can be changed.
+
+Note that in order for those new values to be picked up, the filename
+must be `settings.py` and that file must live in one of the following
+locations:
+
+* `conf/settings.py` in the git checkout
+* `~/.config/testcloud/settings.py`
+* `/etc/testcloud/settings.py`
+
+For example, if you wanted to set up an ssh accessible root account that
+uses an ssh key as the authentification method, you could provide the
+following to the `~/.config/testcloud/settings.py`:
+
+```yaml
+USER_DATA = """#cloud-config
+users:
+ - default
+ - name: root
+ password: %s
+ chpasswd: { expire: False }
+ ssh-authorized-keys:
+ - <my ssh pub key>
+"""
+```
+
+## Testcloud Development
+
+To develop **testcloud**, you need to perform a more complicated process
+to install all its dependencies, download the source code and perform a
+set-up.
+
+To install **testcloud** for development purposes:
+
+### Prerequisites
+
+1. Install the dependencies for **testcloud**.
+
+ ```
+ $ sudo dnf install libvirt python3-libvirt libguestfs libguestfs-tools python3-requests python3-jinja2
+ ```
+
+2. Start **libvirtd**.
+
+ ```
+ $ sudo systemctl start libvirtd
+ ```
+
+3. Add the `testcloud` group to the system.
+
+ ```
+ $ sudo groupadd testcloud
+ ```
+
+4. Add a user into the `testcloud` group.
+
+ ```
+ $ sudo usermod -a -G testcloud $USER
+ ```
+
+5. Log out of the system and log in again to update the group
+ information on your user or use a login shell on a different
+ terminal.
+
+ ```
+ $ su - $USER
+ ```
+
+### Installation
+
+1. Clone the **testcloud** repository.
+
+ ```
+ $ git clone https://pagure.io/testcloud.git
+ ```
+
+2. Create the application directories.
+
+ ```
+ $ sudo mkdir -p -m 775 /var/lib/testcloud
+ ```
+
+ ```
+ $ sudo mkdir -p -m 775 /var/lib/testcloud/instances
+ ```
+
+ ```
+ $ sudo mkdir -p -m 775 /var/lib/testcloud/backingstores
+ ```
+
+3. Change ownership on these directories to enable their use with
+ **testcloud**.
+
+ ```
+ $ sudo chown qemu:testcloud /var/lib/testcloud
+ ```
+
+ ```
+ $ sudo chown qemu:testcloud /var/lib/testcloud/instances
+ ```
+
+ ```
+ $ sudo chown qemu:testcloud /var/lib/testcloud/backingstores
+ ```
+
+4. Copy the `.rules` file to the **polkit** rules.
+
+ ```
+ $ sudo cp conf/99-testcloud-nonroot-libvirt-access.rules /etc/polkit-1/rules.d/
+ ```
+
+### Running testcloud
+
+1. Navigate to your **testcloud** git repository.
+
+ ```
+ $ cd testcloud
+ ```
+
+2. Execute the `run_testcloud.py` script to run the **testcloud**. You
+ can use any options as with the regular installation, for example:
+
+ ```
+ $ ./run_testcloud.py instance create ...
+ ```
+
+3. Alternatively, you can use **pip** to install **testcloud** onto the
+ system and then use it like it has been installed normally.
+
+ ```
+ $ pip3 install -e . --user
+ ```
+
+### Testing
+
+There is a small testsuite you can run with:
+
+```
+tox
+```
+
+This is a good place to contribute if you\'re looking to help out.
+
+### Issue Tracking and Roadmap
+
+Our project tracker is on the Fedora QA-devel
+[Pagure](https://pagure.io/testcloud//) instance.
+
+### Credit
+
+Thanks to [Oddshocks](https://github.com/oddshocks) for the koji
+downloader code :)
+
+### License
+
+This code is licensed GPLv2+. See the LICENSE file for details.
+
+
+%package -n python3-testcloud
+Summary: A tool to download and boot cloud images locally, with an easy to use API.
+Provides: python-testcloud
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-testcloud
+# testcloud
+
+**testcloud** is a small helper script to download and boot cloud/coreos images
+locally. Testcloud supports wide range of distributions, namely Fedora, Fedora CoreOS,
+CentOS, CentOS Stream, Red Hat Enterprise Linux, Debian and Ubuntu.
+
+**testcloud** can run either in system mode or in constrained user session mode,
+which is usefull for running it eg. in unprivileged containers.
+
+## Installation
+
+The following procedure should only be used to install **testcloud** on
+a production system. For developing purposes, you need a different kind
+of installation which is described in the **Testcloud Development**
+section below.
+
+To use **testcloud** on a production system:
+
+1. Install the **testcloud**.
+
+ ```
+ $ sudo dnf install testcloud
+ ```
+
+2. Add yourself to the `testcloud group`.
+
+ ```
+ $ sudo usermod -a -G testcloud $USER
+ ```
+
+3. Restart your user session to update the group privileges, or use
+ `su -` to get a login shell for that particular user where the group
+ settings will be updated.
+
+ ```
+ $ su -i $USER
+ ```
+
+4. Now, you are ready to use **testcloud**.
+
+## Using testcloud
+
+### Creating a new instance
+
+To create a new instance, you will need to provide distribution and version you wish to use or the url of some cloud
+image in the *qcow2* format. If you do not have an image location of
+your own, you can use the image from the **Fedora Cloud** download pages
+(<https://alt.fedoraproject.org/cloud/>).
+
+To create a new instance with the cloud image, run:
+
+```
+$ testcloud instance create <url for qcow2 image> or <distro:version>
+```
+
+Some examples how to create an instance with distribution:version shortcut:
+
+```
+# Latest Fedora Release
+$ testcloud instance create fedora:latest
+```
+
+or, you can skip latest, which is the default value for version:
+```
+# Latest Fedora Release
+$ testcloud instance create fedora
+```
+
+```
+# Fedora Rawhide (latest Nightly Compose)
+$ testcloud instance create fedora:rawhide
+```
+
+```
+# CentOS Stream 8
+$ testcloud instance create centos-stream:8
+```
+
+```
+# Ubuntu Hirsute (21.04)
+$ testcloud instance create ubuntu:hirsute
+```
+
+```
+# Debian 11
+$ testcloud instance create debian:11
+```
+
+Supported distributions with shortcuts are: Fedora, CentOS, CentOS Stream, Ubuntu and Debian. For other distributions, you can provide link to basically any qcow2 image which has the cloud-init package included.
+
+Testcloud supports also Vagrant .box files, in a limited manner and currently only for CentOS.
+
+**testcloud** will download the *qcow2* image and save it in the
+`/var/lib/testcloud/backingstores/<qcow2-filename>`. It will use this
+image a backing store for the newly created instance in
+`/var/tmp/instances/<instance-name>`. When the image has been already
+downloaded, **testcloud** will use the previously download image to
+create the instance.
+
+To create a new instance with the coreos image, run:
+
+```
+$ testcloud instance create fedora-coreos:<stream> or <url for qcow2 image>
+
+```
+
+You will be able to see the instance using the `list` command.
+
+```
+$ testcloud instance list
+```
+
+Alternatively, the instances can also be viewed and manipulated using
+the **virt-manager** tool.
+
+### Starting, stopping, and removing an instance
+
+Instances can be started and stopped using the `instance` interface of
+the **testcloud**, too:
+
+1. List all instances to see the correct name of the instance:
+
+ ```
+ $ testcloud instance list
+ ```
+
+2. Start the instance:
+
+ ```
+ $ testcloud instance start <instance-name>
+ ```
+
+3. Stop the instance:
+
+ ```
+ $ testcloud instance stop <instance-name>
+ ```
+
+4. Remove the instance:
+
+ ```
+ $ testcloud instance remove <instance-name>
+ ```
+
+Removing the instance only succeeds when the appropriate instance has
+been **stopped** before. However, you can use the `-f` option to force
+removing the instance.
+
+### Other instance operations
+
+1. Reboot the instance:
+
+ ```
+ $ testcloud instance reboot <instance-name>
+ ```
+
+2. Remove non-existing libvirt VMs from testcloud:
+
+ ```
+ $ testcloud instance clean
+ ```
+
+### Logging into the instance
+
+When the cloud/coreos instance is created, **testcloud** will return its IP address
+that you can use to access the running instance via `ssh`. The default *login
+name* is `cloud-user` and the *password* is `passw0rd`. Testcloud will output info how you can connect to any of the Supported Distributions.
+
+```
+ssh cloud-user@<instance-IP>
+```
+
+The IP address of an instance is also shown when you list the instance
+using the `testcloud instance list` command. You can also control the
+instance using the **virt-manager** , **GNOME Boxes** or any other tool to manage libvirt VMs.
+
+### Available options to create an instance
+
+There are several options (all optional) that can be used to create a
+new instance using **testcloud**.
+
+-c, \--connection QEMU_URI
+
+: You can specify uri to qemu you wish to use. For limited environments, you might wish to use *qemu:///session*. Remote connections other than *qemu:///session* and *qemu:///system* (like qemu+ssh,...) are known to be problematic.
+
+\--ram RAM
+
+: To set the amount of RAM that will be available to the virtual
+ machine (in MiB).
+
+\--vcpus VCPUS
+
+: To set the amount of VCPUS that will be available to the virtual
+ machine.
+
+\--no-graphic
+
+: This turns off the graphical display of the virtual machine.
+
+\--vnc
+
+: To open a VNC connection at the `:1` display of the instance.
+
+-n, \--name NAME
+
+: To specify a custom name for you instance.
+
+\--timeout TIMEOUT
+
+: A time (in seconds) to wait for boot to complete. Setting to 0
+ (default) will disable this functionality.
+
+\--disksize DISKSIZE
+
+: To set the disk size of the virtual machine (in GiB)
+
+There are several additional options that can be used to create a
+new Coreos instance using **testcloud**.
+
+\--bu_file BU_FILE
+
+: To provide a bu_file you want to use
+
+\--ign_file IGN_FILE
+
+: To provide an ign_file you want to use
+
+\--ssh_path
+
+: To provide ssh pubkey path
+
+### Configuration
+
+The default configuration should work for many people but those defaults
+can be overridden through the use of a `settings.py` file containing the
+values to use when overriding default settings. The example file in
+`conf/settings-example.py` shows the possible configuration values which
+can be changed.
+
+Note that in order for those new values to be picked up, the filename
+must be `settings.py` and that file must live in one of the following
+locations:
+
+* `conf/settings.py` in the git checkout
+* `~/.config/testcloud/settings.py`
+* `/etc/testcloud/settings.py`
+
+For example, if you wanted to set up an ssh accessible root account that
+uses an ssh key as the authentification method, you could provide the
+following to the `~/.config/testcloud/settings.py`:
+
+```yaml
+USER_DATA = """#cloud-config
+users:
+ - default
+ - name: root
+ password: %s
+ chpasswd: { expire: False }
+ ssh-authorized-keys:
+ - <my ssh pub key>
+"""
+```
+
+## Testcloud Development
+
+To develop **testcloud**, you need to perform a more complicated process
+to install all its dependencies, download the source code and perform a
+set-up.
+
+To install **testcloud** for development purposes:
+
+### Prerequisites
+
+1. Install the dependencies for **testcloud**.
+
+ ```
+ $ sudo dnf install libvirt python3-libvirt libguestfs libguestfs-tools python3-requests python3-jinja2
+ ```
+
+2. Start **libvirtd**.
+
+ ```
+ $ sudo systemctl start libvirtd
+ ```
+
+3. Add the `testcloud` group to the system.
+
+ ```
+ $ sudo groupadd testcloud
+ ```
+
+4. Add a user into the `testcloud` group.
+
+ ```
+ $ sudo usermod -a -G testcloud $USER
+ ```
+
+5. Log out of the system and log in again to update the group
+ information on your user or use a login shell on a different
+ terminal.
+
+ ```
+ $ su - $USER
+ ```
+
+### Installation
+
+1. Clone the **testcloud** repository.
+
+ ```
+ $ git clone https://pagure.io/testcloud.git
+ ```
+
+2. Create the application directories.
+
+ ```
+ $ sudo mkdir -p -m 775 /var/lib/testcloud
+ ```
+
+ ```
+ $ sudo mkdir -p -m 775 /var/lib/testcloud/instances
+ ```
+
+ ```
+ $ sudo mkdir -p -m 775 /var/lib/testcloud/backingstores
+ ```
+
+3. Change ownership on these directories to enable their use with
+ **testcloud**.
+
+ ```
+ $ sudo chown qemu:testcloud /var/lib/testcloud
+ ```
+
+ ```
+ $ sudo chown qemu:testcloud /var/lib/testcloud/instances
+ ```
+
+ ```
+ $ sudo chown qemu:testcloud /var/lib/testcloud/backingstores
+ ```
+
+4. Copy the `.rules` file to the **polkit** rules.
+
+ ```
+ $ sudo cp conf/99-testcloud-nonroot-libvirt-access.rules /etc/polkit-1/rules.d/
+ ```
+
+### Running testcloud
+
+1. Navigate to your **testcloud** git repository.
+
+ ```
+ $ cd testcloud
+ ```
+
+2. Execute the `run_testcloud.py` script to run the **testcloud**. You
+ can use any options as with the regular installation, for example:
+
+ ```
+ $ ./run_testcloud.py instance create ...
+ ```
+
+3. Alternatively, you can use **pip** to install **testcloud** onto the
+ system and then use it like it has been installed normally.
+
+ ```
+ $ pip3 install -e . --user
+ ```
+
+### Testing
+
+There is a small testsuite you can run with:
+
+```
+tox
+```
+
+This is a good place to contribute if you\'re looking to help out.
+
+### Issue Tracking and Roadmap
+
+Our project tracker is on the Fedora QA-devel
+[Pagure](https://pagure.io/testcloud//) instance.
+
+### Credit
+
+Thanks to [Oddshocks](https://github.com/oddshocks) for the koji
+downloader code :)
+
+### License
+
+This code is licensed GPLv2+. See the LICENSE file for details.
+
+
+%package help
+Summary: Development documents and examples for testcloud
+Provides: python3-testcloud-doc
+%description help
+# testcloud
+
+**testcloud** is a small helper script to download and boot cloud/coreos images
+locally. Testcloud supports wide range of distributions, namely Fedora, Fedora CoreOS,
+CentOS, CentOS Stream, Red Hat Enterprise Linux, Debian and Ubuntu.
+
+**testcloud** can run either in system mode or in constrained user session mode,
+which is usefull for running it eg. in unprivileged containers.
+
+## Installation
+
+The following procedure should only be used to install **testcloud** on
+a production system. For developing purposes, you need a different kind
+of installation which is described in the **Testcloud Development**
+section below.
+
+To use **testcloud** on a production system:
+
+1. Install the **testcloud**.
+
+ ```
+ $ sudo dnf install testcloud
+ ```
+
+2. Add yourself to the `testcloud group`.
+
+ ```
+ $ sudo usermod -a -G testcloud $USER
+ ```
+
+3. Restart your user session to update the group privileges, or use
+ `su -` to get a login shell for that particular user where the group
+ settings will be updated.
+
+ ```
+ $ su -i $USER
+ ```
+
+4. Now, you are ready to use **testcloud**.
+
+## Using testcloud
+
+### Creating a new instance
+
+To create a new instance, you will need to provide distribution and version you wish to use or the url of some cloud
+image in the *qcow2* format. If you do not have an image location of
+your own, you can use the image from the **Fedora Cloud** download pages
+(<https://alt.fedoraproject.org/cloud/>).
+
+To create a new instance with the cloud image, run:
+
+```
+$ testcloud instance create <url for qcow2 image> or <distro:version>
+```
+
+Some examples how to create an instance with distribution:version shortcut:
+
+```
+# Latest Fedora Release
+$ testcloud instance create fedora:latest
+```
+
+or, you can skip latest, which is the default value for version:
+```
+# Latest Fedora Release
+$ testcloud instance create fedora
+```
+
+```
+# Fedora Rawhide (latest Nightly Compose)
+$ testcloud instance create fedora:rawhide
+```
+
+```
+# CentOS Stream 8
+$ testcloud instance create centos-stream:8
+```
+
+```
+# Ubuntu Hirsute (21.04)
+$ testcloud instance create ubuntu:hirsute
+```
+
+```
+# Debian 11
+$ testcloud instance create debian:11
+```
+
+Supported distributions with shortcuts are: Fedora, CentOS, CentOS Stream, Ubuntu and Debian. For other distributions, you can provide link to basically any qcow2 image which has the cloud-init package included.
+
+Testcloud supports also Vagrant .box files, in a limited manner and currently only for CentOS.
+
+**testcloud** will download the *qcow2* image and save it in the
+`/var/lib/testcloud/backingstores/<qcow2-filename>`. It will use this
+image a backing store for the newly created instance in
+`/var/tmp/instances/<instance-name>`. When the image has been already
+downloaded, **testcloud** will use the previously download image to
+create the instance.
+
+To create a new instance with the coreos image, run:
+
+```
+$ testcloud instance create fedora-coreos:<stream> or <url for qcow2 image>
+
+```
+
+You will be able to see the instance using the `list` command.
+
+```
+$ testcloud instance list
+```
+
+Alternatively, the instances can also be viewed and manipulated using
+the **virt-manager** tool.
+
+### Starting, stopping, and removing an instance
+
+Instances can be started and stopped using the `instance` interface of
+the **testcloud**, too:
+
+1. List all instances to see the correct name of the instance:
+
+ ```
+ $ testcloud instance list
+ ```
+
+2. Start the instance:
+
+ ```
+ $ testcloud instance start <instance-name>
+ ```
+
+3. Stop the instance:
+
+ ```
+ $ testcloud instance stop <instance-name>
+ ```
+
+4. Remove the instance:
+
+ ```
+ $ testcloud instance remove <instance-name>
+ ```
+
+Removing the instance only succeeds when the appropriate instance has
+been **stopped** before. However, you can use the `-f` option to force
+removing the instance.
+
+### Other instance operations
+
+1. Reboot the instance:
+
+ ```
+ $ testcloud instance reboot <instance-name>
+ ```
+
+2. Remove non-existing libvirt VMs from testcloud:
+
+ ```
+ $ testcloud instance clean
+ ```
+
+### Logging into the instance
+
+When the cloud/coreos instance is created, **testcloud** will return its IP address
+that you can use to access the running instance via `ssh`. The default *login
+name* is `cloud-user` and the *password* is `passw0rd`. Testcloud will output info how you can connect to any of the Supported Distributions.
+
+```
+ssh cloud-user@<instance-IP>
+```
+
+The IP address of an instance is also shown when you list the instance
+using the `testcloud instance list` command. You can also control the
+instance using the **virt-manager** , **GNOME Boxes** or any other tool to manage libvirt VMs.
+
+### Available options to create an instance
+
+There are several options (all optional) that can be used to create a
+new instance using **testcloud**.
+
+-c, \--connection QEMU_URI
+
+: You can specify uri to qemu you wish to use. For limited environments, you might wish to use *qemu:///session*. Remote connections other than *qemu:///session* and *qemu:///system* (like qemu+ssh,...) are known to be problematic.
+
+\--ram RAM
+
+: To set the amount of RAM that will be available to the virtual
+ machine (in MiB).
+
+\--vcpus VCPUS
+
+: To set the amount of VCPUS that will be available to the virtual
+ machine.
+
+\--no-graphic
+
+: This turns off the graphical display of the virtual machine.
+
+\--vnc
+
+: To open a VNC connection at the `:1` display of the instance.
+
+-n, \--name NAME
+
+: To specify a custom name for you instance.
+
+\--timeout TIMEOUT
+
+: A time (in seconds) to wait for boot to complete. Setting to 0
+ (default) will disable this functionality.
+
+\--disksize DISKSIZE
+
+: To set the disk size of the virtual machine (in GiB)
+
+There are several additional options that can be used to create a
+new Coreos instance using **testcloud**.
+
+\--bu_file BU_FILE
+
+: To provide a bu_file you want to use
+
+\--ign_file IGN_FILE
+
+: To provide an ign_file you want to use
+
+\--ssh_path
+
+: To provide ssh pubkey path
+
+### Configuration
+
+The default configuration should work for many people but those defaults
+can be overridden through the use of a `settings.py` file containing the
+values to use when overriding default settings. The example file in
+`conf/settings-example.py` shows the possible configuration values which
+can be changed.
+
+Note that in order for those new values to be picked up, the filename
+must be `settings.py` and that file must live in one of the following
+locations:
+
+* `conf/settings.py` in the git checkout
+* `~/.config/testcloud/settings.py`
+* `/etc/testcloud/settings.py`
+
+For example, if you wanted to set up an ssh accessible root account that
+uses an ssh key as the authentification method, you could provide the
+following to the `~/.config/testcloud/settings.py`:
+
+```yaml
+USER_DATA = """#cloud-config
+users:
+ - default
+ - name: root
+ password: %s
+ chpasswd: { expire: False }
+ ssh-authorized-keys:
+ - <my ssh pub key>
+"""
+```
+
+## Testcloud Development
+
+To develop **testcloud**, you need to perform a more complicated process
+to install all its dependencies, download the source code and perform a
+set-up.
+
+To install **testcloud** for development purposes:
+
+### Prerequisites
+
+1. Install the dependencies for **testcloud**.
+
+ ```
+ $ sudo dnf install libvirt python3-libvirt libguestfs libguestfs-tools python3-requests python3-jinja2
+ ```
+
+2. Start **libvirtd**.
+
+ ```
+ $ sudo systemctl start libvirtd
+ ```
+
+3. Add the `testcloud` group to the system.
+
+ ```
+ $ sudo groupadd testcloud
+ ```
+
+4. Add a user into the `testcloud` group.
+
+ ```
+ $ sudo usermod -a -G testcloud $USER
+ ```
+
+5. Log out of the system and log in again to update the group
+ information on your user or use a login shell on a different
+ terminal.
+
+ ```
+ $ su - $USER
+ ```
+
+### Installation
+
+1. Clone the **testcloud** repository.
+
+ ```
+ $ git clone https://pagure.io/testcloud.git
+ ```
+
+2. Create the application directories.
+
+ ```
+ $ sudo mkdir -p -m 775 /var/lib/testcloud
+ ```
+
+ ```
+ $ sudo mkdir -p -m 775 /var/lib/testcloud/instances
+ ```
+
+ ```
+ $ sudo mkdir -p -m 775 /var/lib/testcloud/backingstores
+ ```
+
+3. Change ownership on these directories to enable their use with
+ **testcloud**.
+
+ ```
+ $ sudo chown qemu:testcloud /var/lib/testcloud
+ ```
+
+ ```
+ $ sudo chown qemu:testcloud /var/lib/testcloud/instances
+ ```
+
+ ```
+ $ sudo chown qemu:testcloud /var/lib/testcloud/backingstores
+ ```
+
+4. Copy the `.rules` file to the **polkit** rules.
+
+ ```
+ $ sudo cp conf/99-testcloud-nonroot-libvirt-access.rules /etc/polkit-1/rules.d/
+ ```
+
+### Running testcloud
+
+1. Navigate to your **testcloud** git repository.
+
+ ```
+ $ cd testcloud
+ ```
+
+2. Execute the `run_testcloud.py` script to run the **testcloud**. You
+ can use any options as with the regular installation, for example:
+
+ ```
+ $ ./run_testcloud.py instance create ...
+ ```
+
+3. Alternatively, you can use **pip** to install **testcloud** onto the
+ system and then use it like it has been installed normally.
+
+ ```
+ $ pip3 install -e . --user
+ ```
+
+### Testing
+
+There is a small testsuite you can run with:
+
+```
+tox
+```
+
+This is a good place to contribute if you\'re looking to help out.
+
+### Issue Tracking and Roadmap
+
+Our project tracker is on the Fedora QA-devel
+[Pagure](https://pagure.io/testcloud//) instance.
+
+### Credit
+
+Thanks to [Oddshocks](https://github.com/oddshocks) for the koji
+downloader code :)
+
+### License
+
+This code is licensed GPLv2+. See the LICENSE file for details.
+
+
+%prep
+%autosetup -n testcloud-0.8.2
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-testcloud -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Thu Mar 09 2023 Python_Bot <Python_Bot@openeuler.org> - 0.8.2-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..bdb941c
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+ee7090980f3d6e80140ff4243a1ae745 testcloud-0.8.2.tar.gz