-
Notifications
You must be signed in to change notification settings - Fork 32
Deployer pipeline
The deployer pipeline provides an easy way to deploy multiple hosts simultaneously.
JENKINS REFERENCE
: Wazuh-jenkins repository branch
DEPLOYMENT_CONFIGURATION
: YAML multiline string with the list of instances to deploy
DESTROY_INSTANCES
: Enable automatical instances destruction after an 8 hours interval.
DEBUG
: Enable debug mode
The deployment configuration is made up of one or more deployment blocks. These will describe the number, operating system, resources, and groups of instances.
The basic structure for a deployment is shown below:
- service: <SERVICE>
instances:
- <OS1>
- <OS2>
resources:
- cpu: <CPU1>
memory: <MEMORY1>
- cpu: <CPU2>
memory: <MEMORY2>
architecture: <ARCHITECTURE>
groups: ['GROUP1', 'GROUP2']
The service
label specifies the type of instance to be launched. The supported services are:
Amazon EC2 provides a wide selection of instance types optimized to fit different use cases. Instance types comprise varying combinations of CPU, memory, storage, and networking capacity and give you the flexibility to choose the appropriate mix of resources for your applications. Each instance type includes one or more instance sizes, allowing you to scale your resources to the requirements of your target workload.
Note: For more information about EC2, visit the AWS official documentation
An Amazon ECS container instance is an Amazon EC2 instance that is running the Amazon ECS container agent and has been registered into an Amazon ECS cluster. When you run tasks with Amazon ECS using the EC2 launch type or an Auto Scaling group capacity provider, your tasks are placed on your active container instances.
Note: For more information about ECS, visit the AWS official documentation
Vagrant is an open-source software product for building and maintaining portable virtual software development environments; e.g., for VirtualBox, KVM, Hyper-V, Docker containers, VMware, and AWS. It tries to simplify the software configuration management of virtualization in order to increase development productivity.
Note: For more information about vagrant, visit the vagrant official documentation)
The architecture
label indicates the architecture that will be used by an instance to be deployed. Defaults to amd64
- Valid values:
amd64
,arm64v8
The instances
label indicates the operating system to be deployed in the AWS instance. Operating systems supported by service:
NOTE: Systems that support
arm64v8
architecture are marked.
EC2
-
amazonlinux_2 for Amazon Linux 2
-
centos_8 for Centos 8
-
centos_7 for Centos 7 - Supports arm64v8 architecture
-
debian_10 for Debian 10
-
ubuntu_22 for Ubuntu 22 - Supports arm64v8 architecture
-
windows_server_2016 for Windows Server 2016
-
windows_server_2022 for Windows Server 2022
-
windows_11 for Windows 11
ECS
-
amazonlinux_2 for Amazon Linux 2
-
centos_7 for Centos 7
-
centos_8 for Centos 8
-
reddhat_8 for Redhat 8
-
ubuntu_22 for Ubuntu 22
-
debian_10 for Debian 10
-
debian_11 for Debian 11
Vagrant
-
macos_1015 for Macos
-
macos_13 for Macos Ventura - ONLY arm64v8 architecture
-
macos_1400 for Macos Sonoma - ONLY arm64v8 architecture
-
solaris_10 for Solaris 10
-
solaris_11 for Solaris 11
Note: The
os
label is built with the OS name underscore (_
) OS version.
When the os
label does not specify the version number, each instance has its own OS by default.
Default OS
-
amazonlinux for Amazon Linux 2
-
centos for Centos 8
-
debian for Debian 10
-
ubuntu for Ubuntu 22
-
windows for Windows Server 2016
-
reddhat for Redhat 8
-
macos for Macos
-
solaris for Solaris 11
Example deployment configuration with different instances
- service: EC2
instances:
- ubuntu
- ubuntu_22
- amazonlinux
- windows
- windows_server_2022
- debian
The resources
label indicates the resources, cpu
and memory
, of the instance to be launched. Both fields are mandatory in the resources
block.
Note: In case any of the resources do not match the available list of resources per instance, the instance with the upper closer resources will be launched.
If the number
label is greater than 1 and instances
and resources
labels are equal to 1, all the instances will be deployed with the same resources.
Note: If the number of
resources
does not match with the number ofinstances
, an exception will be thrown.
Available resources are service dependent:
EC2
Instance Type | CPU | Memory |
---|---|---|
T2_MICRO | 1 | 1024 |
T3_MEDIUM | 2 | 4096 |
C5_LARGE | 2 | 8192 |
C5_XLARGE | 4 | 16384 |
C5_2XLARGE | 8 | 32768 |
Note: Default resources are
cpu
: 1 andmemory
: 1024.
ECS
CPU | Memory |
---|---|
1 | 1024 |
1 | 2048 |
1 | 3072 |
2 | 4096 |
2 | 16384 |
4 | 4096 |
4 | 16384 |
Note: Default resources are
cpu
: 2 andmemory
: 1024.
Vagrant
CPU | Memory |
---|---|
2 | 6144 |
Note: Currently multiple resources are not supported for vagrant instances. The real supported resources are 2 CPU and 6144MB of memory for macOS and 2 CPU and 2048MB of memory for Solaris
Example deployment configuration with resources
- service: EC2
instances:
- ubuntu
- amazonlinux
resources:
- cpu: 1
memory: 1024
- cpu: 3
memory: 2048
The group tag is used to group instances in the deployment inventory.
The instances will be automatically added to the defaults groups:
- OS Based groups:
linux
windows
macos
solaris
- Service based groups:
ecs
ec2
vagrant
In addition to these groups, all instances of a configuration block will be added to each of the groups.
Example deployment configuration with groups
- service: EC2
instances:
- ubuntu
groups: ['group1', 'testing', 'manager']
The deployer pipeline produces two artifacts: Connection information and deployment inventory
Ansible inventory is created using specified groups and default service and OS groups.
Example
ec2:
hosts:
PoC_environment_launcher_VR_485_20220524120930_centos_0_0:
ansible_host: 172.31.12.49
ansible_user: qa
ansible_connection: ssh
vars:
service: ec2
linux:
hosts:
PoC_environment_launcher_VR_485_20220524120930_centos_0_0:
ansible_host: 172.31.12.49
ansible_user: qa
ansible_connection: ssh
vars:
os: linux
all:
vars:
ansible_ssh_common_args: -o StrictHostKeyChecking=no
Connection information is generated depending on the service and OS of the instance.
If it is an EC2
Windows instance, to access the machine it is recommended to download the Remmina client.
Remmina is a remote desktop client for POSIX-based computer operating systems (https://remmina.org/).
In addition, it is necessary to install the RDP plugin. See an example here.
The configuration required for the connection is as follows:
- Protocol: RDP
- Server: <IP ADDRESS>
- Username: <DEFAULT USER>
- Password: wazuhqa
- Resolution: Custom(1280x960)
- Depth of colour: True color(24 ppp)
If it is an EC2
OR ecs
Linux instance, to access the machine it needs the following command:
ssh -i <LINUX_PRIVATE_KEY> <DEFAULT USER>@<IP ADDRESS>
For a vagrant
deployment to access the machine it needs the following command:
ssh vagrant@<IP ADDRESS> -p <PORT>
password: vagrant
-
Name:
<PIPELINE_NAME><JOB_NUMBER>_<TIMESTAMP>_<OS>_<BLOCK_INDEX>_<INSTANCE_INDEX>
AMI | System |
---|---|
ami-07efb5be4a4f36912 | Amazon Linux 2 |
ami-035d6ac4014f95a1f | Centos 8 |
ami-070ed7bf83e673bea | Debian 10 |
ami-05f84c8ee1f23b186 | Ubuntu 22 |
ami-0ef2463f7ca02ccea | Windows Server 2016 |
ami-09a0b558ea45c57f2 | Windows Server 2022 |
Dependencies
python 3.10
pip 21.3.1
-
ip
->iproute2
-
ifconfig
->net-tools
- editors:
vim, nano
-
sudo
,visudo
git
Connection information
- User: QA
- Password: wazuhqa
ECR | System |
---|---|
qa/amazonlinux | Amazon Linux 2 |
qa/centos | Centos 8 |
qa/redhat | RedHat 8 |
qa/ubuntu | Ubuntu 22 |
qa/debian | Debian 10 |
Dependencies
python 3.10
pip 21.3.1
-
ip
->iproute2
-
ifconfig
->net-tools
- editors:
vim, nano
-
sudo
,visudo
git
Connection information
- User: QA
- Password: wazuhqa
- service: EC2
instances:
- ubuntu
The inventory.yaml
that it gets is the following:
ec2:
hosts:
PoC_environment_launcher_VR_543_20220525163513_ubuntu_0_0:
ansible_host: 172.31.3.82
ansible_user: qa
ansible_connection: ssh
vars:
service: ec2
linux:
hosts:
PoC_environment_launcher_VR_543_20220525163513_ubuntu_0_0:
ansible_host: 172.31.3.82
ansible_user: qa
ansible_connection: ssh
vars:
os: linux
all:
vars:
ansible_ssh_common_args: -o StrictHostKeyChecking=no
- service: ECS
instances:
- amazonlinux_2
The inventory.yaml
that it gets is the following:
ecs:
hosts:
PoC_environment_launcher_VR_530_20220525142517_amazonlinux_2_0_0:
ansible_host: 172.31.35.220
ansible_user: qa
ansible_connection: ssh
vars:
service: ecs
linux:
hosts:
PoC_environment_launcher_VR_530_20220525142517_amazonlinux_2_0_0:
ansible_host: 172.31.35.220
ansible_user: qa
ansible_connection: ssh
vars:
os: linux
all:
vars:
ansible_ssh_common_args: -o StrictHostKeyChecking=no
- service: vagrant
instances:
- solaris_10
The inventory.yaml
that it gets is the following:
vagrant:
hosts:
PoC_environment_launcher_VR_523_20220525140739_solaris_10_0_0:
ansible_host: 10.10.0.251
ansible_port: 13300
ansible_password: vagrant
ansible_user: vagrant
vars: {}
solaris:
hosts:
PoC_environment_launcher_VR_523_20220525140739_solaris_10_0_0:
ansible_host: 10.10.0.251
ansible_port: 13300
ansible_password: vagrant
ansible_user: vagrant
vars: {}
all:
vars:
ansible_ssh_common_args: -o StrictHostKeyChecking=no
For the following DEPLOYMENT_FILE_CONTENT
field:
- service: EC2
instances:
- ubuntu
groups: ['managers']
The inventory.yaml
that it gets is the following:
managers:
hosts:
PoC_environment_launcher_VR_547_20220525164852_ubuntu_0_0:
ansible_host: 172.31.14.63
ansible_user: qa
ansible_connection: ssh
ec2:
hosts:
PoC_environment_launcher_VR_547_20220525164852_ubuntu_0_0:
ansible_host: 172.31.14.63
ansible_user: qa
ansible_connection: ssh
vars:
service: ec2
linux:
hosts:
PoC_environment_launcher_VR_547_20220525164852_ubuntu_0_0:
ansible_host: 172.31.14.63
ansible_user: qa
ansible_connection: ssh
vars:
os: linux
all:
vars:
ansible_ssh_common_args: -o StrictHostKeyChecking=no
- service: EC2
instances:
- centos
resources:
- cpu: 1
memory: 1024
The inventory.yaml
that it gets is the following:
ec2:
hosts:
PoC_environment_launcher_VR_485_20220524120930_centos_0_0:
ansible_host: 172.31.12.49
ansible_user: qa
ansible_connection: ssh
vars:
service: ec2
linux:
hosts:
PoC_environment_launcher_VR_485_20220524120930_centos_0_0:
ansible_host: 172.31.12.49
ansible_user: qa
ansible_connection: ssh
vars:
os: linux
all:
vars:
ansible_ssh_common_args: -o StrictHostKeyChecking=no
- service: ECS
instances:
- ubuntu
- ubuntu
resources:
- cpu: 1
memory: 1024
- cpu: 2
memory: 1024
The inventory.yaml
that it gets is the following:
ecs:
hosts:
PoC_environment_launcher_VR_488_20220524121834_ubuntu_0_0:
ansible_host: 172.31.76.105
ansible_user: qa
ansible_connection: ssh
PoC_environment_launcher_VR_488_20220524121834_ubuntu_0_1:
ansible_host: 172.31.41.210
ansible_user: qa
ansible_connection: ssh
vars:
service: ecs
linux:
hosts:
PoC_environment_launcher_VR_488_20220524121834_ubuntu_0_0:
ansible_host: 172.31.76.105
ansible_user: qa
ansible_connection: ssh
PoC_environment_launcher_VR_488_20220524121834_ubuntu_0_1:
ansible_host: 172.31.41.210
ansible_user: qa
ansible_connection: ssh
vars:
os: linux
all:
vars:
ansible_ssh_common_args: -o StrictHostKeyChecking=no
- service: ECS
instances:
- amazonlinux
- service: EC2
instances:
- centos
The inventory.yaml
that it gets is the following:
ecs:
hosts:
PoC_environment_launcher_VR_490_20220524121906_amazonlinux_0_0:
ansible_host: 172.31.44.231
ansible_user: qa
ansible_connection: ssh
vars:
service: ecs
linux:
hosts:
PoC_environment_launcher_VR_490_20220524121906_amazonlinux_0_0:
ansible_host: 172.31.44.231
ansible_user: qa
ansible_connection: ssh
PoC_environment_launcher_VR_490_20220524121906_centos_1_0:
ansible_host: 172.31.4.67
ansible_user: qa
ansible_connection: ssh
vars:
os: linux
ec2:
hosts:
PoC_environment_launcher_VR_490_20220524121906_centos_1_0:
ansible_host: 172.31.4.67
ansible_user: qa
ansible_connection: ssh
vars:
service: ec2
all:
vars:
ansible_ssh_common_args: -o StrictHostKeyChecking=no
- service: ECS
instances:
- amazonlinux
resources:
- cpu: 2
memory: 3000
groups: ['agent']
- service: ECS
instances:
- ubuntu
groups: ['manager', 'group-1']
- service: EC2
instances:
- centos
groups: ['wazuh-dashboard', 'wazuh-indexer']
- service: EC2
instances:
- amazonlinux
groups: ['wazuh-indexer', 'group-3']
- service: vagrant
instances:
- macos
groups: ['agent']
The inventory.yaml
that it gets is the following:
agent:
hosts:
PoC_environment_launcher_VR_483_20220524115358_amazonlinux_0_0:
ansible_host: 172.31.85.111
ansible_user: qa
ansible_connection: ssh
PoC_environment_launcher_VR_483_20220524115358_amazonlinux_0_1:
ansible_host: 172.31.26.24
ansible_user: qa
ansible_connection: ssh
PoC_environment_launcher_VR_483_20220524115358_macos_4_0:
ansible_host: 10.10.0.251
ansible_port: 64183
ansible_password: vagrant
ansible_user: vagrant
vars: {}
ecs:
hosts:
PoC_environment_launcher_VR_483_20220524115358_amazonlinux_0_0:
ansible_host: 172.31.85.111
ansible_user: qa
ansible_connection: ssh
PoC_environment_launcher_VR_483_20220524115358_amazonlinux_0_1:
ansible_host: 172.31.26.24
ansible_user: qa
ansible_connection: ssh
PoC_environment_launcher_VR_483_20220524115358_ubuntu_1_0:
ansible_host: 172.31.51.152
ansible_user: qa
ansible_connection: ssh
vars:
service: ecs
linux:
hosts:
PoC_environment_launcher_VR_483_20220524115358_amazonlinux_0_0:
ansible_host: 172.31.85.111
ansible_user: qa
ansible_connection: ssh
PoC_environment_launcher_VR_483_20220524115358_amazonlinux_0_1:
ansible_host: 172.31.26.24
ansible_user: qa
ansible_connection: ssh
PoC_environment_launcher_VR_483_20220524115358_ubuntu_1_0:
ansible_host: 172.31.51.152
ansible_user: qa
ansible_connection: ssh
PoC_environment_launcher_VR_483_20220524115358_centos_2_0:
ansible_host: 172.31.8.232
ansible_user: qa
ansible_connection: ssh
PoC_environment_launcher_VR_483_20220524115358_amazonlinux_3_0:
ansible_host: 172.31.9.224
ansible_user: qa
ansible_connection: ssh
vars:
os: linux
manager:
hosts:
PoC_environment_launcher_VR_483_20220524115358_ubuntu_1_0:
ansible_host: 172.31.51.152
ansible_user: qa
ansible_connection: ssh
group-1:
hosts:
PoC_environment_launcher_VR_483_20220524115358_ubuntu_1_0:
ansible_host: 172.31.51.152
ansible_user: qa
ansible_connection: ssh
wazuh-dashboard:
hosts:
PoC_environment_launcher_VR_483_20220524115358_centos_2_0:
ansible_host: 172.31.8.232
ansible_user: qa
ansible_connection: ssh
wazuh-indexer:
hosts:
PoC_environment_launcher_VR_483_20220524115358_centos_2_0:
ansible_host: 172.31.8.232
ansible_user: qa
ansible_connection: ssh
PoC_environment_launcher_VR_483_20220524115358_amazonlinux_3_0:
ansible_host: 172.31.9.224
ansible_user: qa
ansible_connection: ssh
vars: {}
ec2:
hosts:
PoC_environment_launcher_VR_483_20220524115358_centos_2_0:
ansible_host: 172.31.8.232
ansible_user: qa
ansible_connection: ssh
PoC_environment_launcher_VR_483_20220524115358_amazonlinux_3_0:
ansible_host: 172.31.9.224
ansible_user: qa
ansible_connection: ssh
vars:
service: ec2
group-3:
hosts:
PoC_environment_launcher_VR_483_20220524115358_amazonlinux_3_0:
ansible_host: 172.31.9.224
ansible_user: qa
ansible_connection: ssh
vagrant:
hosts:
PoC_environment_launcher_VR_483_20220524115358_macos_4_0:
ansible_host: 10.10.0.251
ansible_port: 64183
ansible_password: vagrant
ansible_user: vagrant
vars: {}
macos:
hosts:
PoC_environment_launcher_VR_483_20220524115358_macos_4_0:
ansible_host: 10.10.0.251
ansible_port: 64183
ansible_password: vagrant
ansible_user: vagrant
vars: {}
all:
vars:
ansible_ssh_common_args: -o StrictHostKeyChecking=no
The below table shows the labels allowed for the deployment structure discussed above, along with the data type and example values for these labels:
Name | Type | Requirement | Description | Example case |
---|---|---|---|---|
service | String | Mandatory | Type of instance to be launched. | service: EC2, ECS, or vagrant |
instances | String list | Mandatory | Operating system to be deployed in the AWS instance. | instances: - ubuntu_22 - centos_8 |
resources | Map | Optional | Specify the resources (cpu and memory), of the instance to be deployed. | resources: [cpu: 2, memory: 4096] |
cpu | int | Optional | Number of cpu to be deployed. | cpu: 1, 2, or ... |
memory | int | Optional | Number of memory to be deployed. | memory: 1024, 2048, or ... |
groups | String list | Optional | List of groups to be created in the inventory file | groups: ['agent', ...] |