Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dashboards/grafana/identity/apis.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ options:
tooltip: {mode: "single", sort: "none"}
targets:
- refId: "A"
target: "sortByName(groupByNodes(removeEmptySeries(stats.timers.openstack.api.$environment.$zone.identity.*.*.*.mean, 0.01), 'sum', 8, 7, 9), true)"
target: "sortByName(groupByNodes(removeEmptySeries(stats.timers.openstack.api.$environment.$zone.identity.*.*.mean, 0.01), 'sum', 8, 7, 9), true)"
title: "API calls duration"
type: "timeseries"
2 changes: 1 addition & 1 deletion dashboards/grafana/identity/longest_api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ options:
tooltip: {"mode": "single", "sort": "none"}
targets:
- refId: "A"
target: "maximumAbove(groupByNodes(removeEmptySeries(stats.timers.openstack.api.$environment.$zone.identity.*.*.*.upper), 'sum', 8, 7, 9), 1000)"
target: "maximumAbove(groupByNodes(removeEmptySeries(stats.timers.openstack.api.$environment.$zone.identity.*.*.upper), 'sum', 8, 7, 9), 1000)"
title: "Highest API calls duration"
type: "timeseries"
3 changes: 2 additions & 1 deletion inventory/production/group_vars/all.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
# flavor
#test_flavor: s3.medium.2
test_flavor: "SCS-2V:2:20"
test_image: "Ubuntu 22.04"

# cloud_name:
test_keypair_name: api_monitoring_test
Expand Down
11 changes: 11 additions & 0 deletions playbooks/files/get_server_metadata.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/usr/bin/env python3

import openstack
import sys

conn = openstack.connect()

server = conn.compute.find_server(sys.argv[1])

if server:
metadata = server.get_metadata(conn.compute)
8 changes: 8 additions & 0 deletions playbooks/files/list_keypairs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/env python3

import openstack


conn = openstack.connect()

list(conn.compute.keypairs())
7 changes: 7 additions & 0 deletions playbooks/files/list_routers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/usr/bin/env python3

import openstack

conn = openstack.connect()

list(conn.network.routers())
8 changes: 8 additions & 0 deletions playbooks/files/list_security_groups.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/env python3

import openstack

conn = openstack.connect()

list(conn.network.security_groups())
list(conn.network.security_group_rules())
233 changes: 233 additions & 0 deletions playbooks/scenario2_simple_ecs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,233 @@
---

- name: Scenario 2 - basic compute functionality
hosts: localhost
vars:
prefix: scenario2-
tasks:
- set_fact:
prefix: "{{ (prefix + ( lookup('env', 'TASK_EXECUTOR_JOB_ID') | default(99999999 | random | to_uuid | hash('md5'), true) ) ) }}"

- set_fact:
test_server_fqdn: "{{ (prefix + '.host') }}"
test_security_group_name: "{{ (prefix + '-sg') }}"
test_keypair_name: "{{ (prefix + '-kp') }}"
test_network_name: "{{ ( prefix + '-net') }}"
# test_image: Standard_Fedora_35_latest

- name: Query specific flavor
openstack.cloud.compute_flavor_info:
name: "{{ test_flavor }}"
register: flavor_result

# using s2.medium.2 as fallback in case the flavor from inv is not available in the env
- set_fact:
test_flavor: s2.medium.2
when: flavor_result.openstack_flavors | length==0

- debug:
msg: "Using prefix {{ prefix }}"

- name: List Keypairs
script: list_keypairs.py
args:
executable: python3
tags: 'service=compute'

- name: Ensure .ssh exists
file:
path: "~/.ssh"
state: directory

- block:

- name: Create Keypair
include_role:
name: keypair
vars:
keypair_name: "{{ test_keypair_name }}"
state: "present"

- name: List Networks
openstack.cloud.networks_info:

- name: List Flavors
openstack.cloud.compute_flavor_info:

- name: List Subnets
openstack.cloud.subnets_info:

- name: List Routers
script: list_routers.py
args:
executable: python3
tags: 'service=network'

- name: Create VPC (Router + Net + Subnet)
include_role:
name: vpc
vars:
network_name: "{{ test_network_name }}"
state: "present"

- name: List SecurityGroups with Rules
script: list_security_groups.py
args:
executable: python3
tags: 'service=compute'

- name: Create SecurityGroup
openstack.cloud.security_group:
name: "{{ test_security_group_name }}"
description: Test Security group created by APImon

- name: Create SecurityGroupRule
openstack.cloud.security_group_rule:
security_group: "{{ test_security_group_name }}"
protocol: tcp
port_range_min: 22
port_range_max: 22
remote_ip_prefix: 0.0.0.0/0

- name: List Images
openstack.cloud.image_info:

- name: List Servers
openstack.cloud.server_info:

############
- name: Create Server in default AZ
openstack.cloud.server:
auto_ip: false
name: "{{ test_server_fqdn }}"
image: "{{ test_image }}"
flavor: "{{ test_flavor }}"
key_name: "{{ test_keypair_name }}"
network: "{{ test_network_name }}"
security_groups: "{{ test_security_group_name }}"
tags:
- "metric=create_server"
- "az=default"
register: server

- name: get server id
set_fact:
server_id: "{{ server.id }}"

- name: Attach FIP
openstack.cloud.floating_ip:
server: "{{ server_id }}"
tags:
- "metric=create_server"
- "az=default"

- name: get server info
openstack.cloud.server_info:
server: "{{ server_id }}"
register: server
tags:
- "metric=create_server"
- "az=default"

- set_fact:
server_ip: "{{ server['openstack_servers'][0]['public_v4'] }}"
tags:
- "metric=create_server"
- "az=default"

- name: find servers by name
openstack.cloud.server_info:
server: "{{ test_server_fqdn }}"
register: servers
tags:
- "metric=create_server"
- "az=default"

- name: Debug server info
debug:
var: servers

# Wait for the server to really start and become accessible
- name: Wait for SSH port to become active
wait_for:
port: 22
host: "{{ server_ip }}"
timeout: 600
tags: ["az=default", "service=compute", "metric=create_server"]

- name: Try connecting
retries: 10
delay: 1
command: "ssh -o 'UserKnownHostsFile=/dev/null' -o 'StrictHostKeyChecking=no' {{ test_user }}@{{ server_ip }} -i ~/.ssh/{{ test_keypair_name }}.pem"
tags: ["az=default", "service=compute", "metric=create_server"]

############
- name: Get Server metadata
script: "get_server_metadata.py {{ server_id }}"
args:
executable: python3
tags: 'service=compute'

- name: Modify metadata
openstack.cloud.server_metadata:
server: "{{ server_id }}"
state: present
meta:
meta_k1: v1
meta_k2: v2

- name: Delete metadata
openstack.cloud.server_metadata:
server: "{{ server_id }}"
state: absent
meta:
meta_k1:
meta_k2:

#- name: Set Tags on the Server
# opentelekomcloud.cloud.tag:
# server: "{{ server_id }}"
# state: present
# tags:
# - tag1
# - tag2
# mode: set

- name: Delete SecurityGroupRule
openstack.cloud.security_group_rule:
state: "absent"
security_group: "{{ test_security_group_name }}"
protocol: tcp
port_range_min: 2208
port_range_max: 2209
remote_ip_prefix: 0.0.0.0/0

always:
- block:
- name: Delete server
openstack.cloud.server:
state: absent
name: "{{ server_id | default(test_server_fqdn) }}"
delete_fip: True
tags: ["metric=delete_server"]

- name: Delete SecurityGroup
openstack.cloud.security_group:
state: "absent"
name: "{{ test_security_group_name }}"

- name: Delete VPC
include_role:
name: vpc
vars:
state: absent
network_name: "{{ test_network_name }}"

- name: Delete Keypair
include_role:
name: keypair
vars:
keypair_name: "{{ test_keypair_name }}"
force_delete_key: true
state: "absent"
ignore_errors: true
10 changes: 10 additions & 0 deletions roles/keypair/defaults/main.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
prefix: test- # This should be overridden in inventory

keypair_name: "{{ (prefix + 'KeyPair') }}"
keypair_private_key_dest: "{{ ('~/.ssh/' + keypair_name + '.pem') }}"

# set this to force key deletion
force_delete_key: false

state: present
42 changes: 42 additions & 0 deletions roles/keypair/tasks/main.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
# Management of the keypair
- block:
- name: Create KeyPair
openstack.cloud.keypair:
state: present
name: "{{ keypair_name }}"
register: keypair_output

- name: Ensure directory is present
ansible.builtin.file:
path: "{{ keypair_private_key_dest | dirname }}"
state: "directory"
when:
- keypair_output.changed

- name: Save private key
copy:
dest: "{{ keypair_private_key_dest }}"
content: "{{ keypair_output['key']['private_key'] }}"
mode: 0600
when:
- keypair_output is defined and keypair_output['key']['private_key'] is defined
- keypair_output.changed

- set_fact:
ssh_keys: "{{ ssh_keys|default({}) | combine({keypair_name: keypair_output['key']['public_key']}) }}"
when: state != 'absent'

- block:
- name: Delete KeyPair
openstack.cloud.keypair:
state: absent
name: "{{ keypair_name }}"

- name: delete private key
file:
path: "{{ keypair_private_key_dest }}"
state: absent
when: force_delete_key|bool

when: state == 'absent'
5 changes: 5 additions & 0 deletions roles/server_create_delete/defaults/main.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
ssh_user_name: "linux"
ssh_key_pub: ""
coreos: False
metric_suffix: ""
Loading