Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add role to deploy cASO #205

Merged
merged 1 commit into from
Mar 31, 2022
Merged
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
3 changes: 3 additions & 0 deletions ansible/group_vars/all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,8 @@ barbican_api_listen_port: "{{ barbican_api_port }}"

blazar_api_port: "1234"

caso_tcp_output_port: "24224"

ceph_rgw_internal_fqdn: "{{ kolla_internal_fqdn }}"
ceph_rgw_external_fqdn: "{{ kolla_external_fqdn }}"
ceph_rgw_port: "6780"
Expand Down Expand Up @@ -608,6 +610,7 @@ enable_haproxy_memcached: "no"
enable_aodh: "no"
enable_barbican: "no"
enable_blazar: "no"
enable_caso: "no"
enable_ceilometer: "no"
enable_ceilometer_ipmi: "no"
enable_cells: "no"
Expand Down
4 changes: 4 additions & 0 deletions ansible/inventory/all-in-one
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ localhost ansible_connection=local
[deployment]
localhost ansible_connection=local

# Caso
[caso:children]
monitoring

# You can explicitly specify which hosts run each project by updating the
# groups in the sections below. Common services are grouped together.

Expand Down
4 changes: 4 additions & 0 deletions ansible/inventory/multinode
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ monitoring
[tls-backend:children]
control

# Caso
[caso:children]
monitoring

# You can explicitly specify which hosts run each project by updating the
# groups in the sections below. Common services are grouped together.

Expand Down
48 changes: 48 additions & 0 deletions ansible/roles/caso/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
caso_services:
caso:
container_name: caso
group: caso
enabled: true
image: "{{ caso_image_full }}"
volumes:
- "{{ node_config_directory }}/caso/:{{ container_config_directory }}/"
- "/etc/localtime:/etc/localtime:ro"
- "caso_spool:/var/lib/caso"
- "caso_ssm_outgoing:/var/spool/apel/outgoing/openstack"
- "kolla_logs:/var/log/kolla/"
dimensions: "{{ caso_dimensions }}"

####################
# caso
####################
caso_site_name: "kolla_caso"
caso_logging_debug: "{{ openstack_logging_debug }}"
caso_log_dir: "/var/log/kolla/caso"
caso_cron_table: "10 * * * *"
caso_messengers:
- caso.messenger.logstash.LogstashMessenger

####################
# OpenStack
####################
caso_openstack_auth: "{{ openstack_auth }}"
caso_keystone_user: "caso"
caso_projects: []
caso_ks_users_tmpl: >
{%- for project in caso_projects -%}
- project: "{{ project }}"
user: "{{ caso_keystone_user }}"
password: "{{ caso_keystone_password }}"
role: "admin"
{% endfor %}
caso_ks_users: "{{ caso_ks_users_tmpl | from_yaml if caso_projects else [] }}"

####################
# Docker
####################
caso_install_type: "{{ kolla_install_type }}"
caso_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ caso_install_type }}-caso"
caso_tag: "{{ openstack_tag }}"
caso_image_full: "{{ caso_image }}:{{ caso_tag }}"
caso_dimensions: "{{ default_container_dimensions }}"
24 changes: 24 additions & 0 deletions ansible/roles/caso/handlers/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
- name: Restart caso container
vars:
service_name: "caso"
service: "{{ caso_services[service_name] }}"
config_json: "{{ caso_config_jsons.results|selectattr('item.key', 'equalto', service_name)|first }}"
caso_container: "{{ check_caso_containers.results|selectattr('item.key', 'equalto', service_name)|first }}"
become: true
kolla_docker:
action: "recreate_or_restart_container"
common_options: "{{ docker_common_options }}"
name: "{{ service.container_name }}"
image: "{{ service.image }}"
volumes: "{{ service.volumes }}"
dimensions: "{{ service.dimensions }}"
when:
- kolla_action != "config"
- inventory_hostname in groups[service.group]
- service.enabled | bool
- config_json.changed | bool
or caso_conf.changed | bool
or caso_vom_conf.changed | bool
or caso_crontab.changed | bool
or caso_container.changed | bool
1 change: 1 addition & 0 deletions ansible/roles/caso/tasks/check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
---
90 changes: 90 additions & 0 deletions ansible/roles/caso/tasks/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
---
- name: Ensuring config directories exist
file:
path: "{{ node_config_directory }}/{{ item.key }}"
state: "directory"
owner: "{{ config_owner_user }}"
group: "{{ config_owner_group }}"
mode: "0770"
become: true
when:
- inventory_hostname in groups[item.value.group]
- item.value.enabled | bool
with_dict: "{{ caso_services }}"

- name: Copying over config.json files for services
template:
src: "{{ item.key }}.json.j2"
dest: "{{ node_config_directory }}/{{ item.key }}/config.json"
mode: "0660"
become: true
register: caso_config_jsons
when:
- inventory_hostname in groups[item.value.group]
- item.value.enabled | bool
with_dict: "{{ caso_services }}"
notify:
- Restart caso container

- name: Copying over caso config
merge_configs:
sources:
- "{{ role_path }}/templates/caso.conf.j2"
- "{{ node_custom_config }}//caso/caso.conf"
- "{{ node_custom_config }}/{{ item.key }}/{{ inventory_hostname }}/caso.conf"
dest: "{{ node_config_directory }}/{{ item.key }}/caso.conf"
mode: "0660"
become: true
register: caso_conf
when:
- inventory_hostname in groups[item.value.group]
- item.value.enabled | bool
with_dict: "{{ caso_services }}"
notify:
- Restart caso container

- name: Copying over caso crontab
template:
src: "{{ role_path }}/templates/caso.crontab.j2"
dest: "{{ node_config_directory }}/{{ item.key }}/caso.crontab"
mode: "0660"
become: true
register: caso_crontab
when:
- inventory_hostname in groups[item.value.group]
- item.value.enabled | bool
with_dict: "{{ caso_services }}"
notify:
- Restart caso container

- name: Copying over caso voms file
template:
src: "{{ role_path }}/templates/voms.json.j2"
dest: "{{ node_config_directory }}/{{ item.key }}/voms.json"
mode: "0660"
become: true
register: caso_vom_conf
when:
- inventory_hostname in groups[item.value.group]
- item.value.enabled | bool
with_dict: "{{ caso_services }}"
notify:
- Restart caso container

- name: Check caso containers
become: true
kolla_docker:
action: "compare_container"
common_options: "{{ docker_common_options }}"
name: "{{ item.value.container_name }}"
image: "{{ item.value.image }}"
volumes: "{{ item.value.volumes }}"
dimensions: "{{ item.value.dimensions }}"
register: check_caso_containers
when:
- kolla_action != "config"
- inventory_hostname in groups[item.value.group]
- item.value.enabled | bool
with_dict: "{{ caso_services }}"
notify:
- Restart caso container
12 changes: 12 additions & 0 deletions ansible/roles/caso/tasks/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
- include_tasks: register.yml
when: inventory_hostname in groups['caso']

- include_tasks: config.yml
when: inventory_hostname in groups['caso']

- name: Flush handlers
meta: flush_handlers

- include_tasks: check.yml
when: inventory_hostname in groups['caso']
2 changes: 2 additions & 0 deletions ansible/roles/caso/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
---
- include_tasks: "{{ kolla_action }}.yml"
1 change: 1 addition & 0 deletions ansible/roles/caso/tasks/precheck.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
---
11 changes: 11 additions & 0 deletions ansible/roles/caso/tasks/pull.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
- name: Pulling caso images
become: true
kolla_docker:
action: "pull_image"
common_options: "{{ docker_common_options }}"
image: "{{ item.value.image }}"
when:
- inventory_hostname in groups[item.value.group]
- item.value.enabled | bool
with_dict: "{{ caso_services }}"
2 changes: 2 additions & 0 deletions ansible/roles/caso/tasks/reconfigure.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
---
- include_tasks: deploy.yml
7 changes: 7 additions & 0 deletions ansible/roles/caso/tasks/register.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
- import_role:
name: service-ks-register
vars:
service_ks_register_auth: "{{ caso_openstack_auth }}"
service_ks_register_users: "{{ caso_ks_users }}"
tags: always
5 changes: 5 additions & 0 deletions ansible/roles/caso/tasks/upgrade.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
- include_tasks: config.yml

- name: Flush handlers
meta: flush_handlers
23 changes: 23 additions & 0 deletions ansible/roles/caso/templates/caso.conf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
[DEFAULT]
messengers = {{ caso_messengers|join(', ') }}
site_name = {{ caso_site_name }}
projects = {{ caso_projects|join(', ') }}
debug = {{ caso_logging_debug }}
log_file = caso.log
log_dir = {{ caso_log_dir }}
log_rotation_type = none
spooldir = /var/lib/caso

[keystone_auth]
auth_type = password
auth_url = {{ admin_protocol }}://{{ kolla_internal_fqdn }}:{{ keystone_admin_port }}
project_domain_id = {{ default_project_domain_id }}
username = {{ caso_keystone_user }}
user_domain_id = {{ default_user_domain_id }}
password = {{ caso_keystone_password }}

[logstash]
port = {{ caso_tcp_output_port }}

[ssm]
output_path = /var/spool/apel/outgoing/openstack
1 change: 1 addition & 0 deletions ansible/roles/caso/templates/caso.crontab.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{{ caso_cron_table }} caso-extract --config-file /etc/caso/caso.conf
41 changes: 41 additions & 0 deletions ansible/roles/caso/templates/caso.json.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{% set cron_cmd = 'cron -f' if kolla_base_distro in ['ubuntu', 'debian'] else 'crond -s -n' %}
{
"command": "{{ cron_cmd }}",
"config_files": [
{
"source": "{{ container_config_directory }}/caso.crontab",
"dest": "/var/spool/cron/caso",
"owner": "caso",
"perm": "0600"
},
{
"source": "{{ container_config_directory }}/caso.conf",
"dest": "/etc/caso/caso.conf",
"owner": "caso",
"perm": "0600"
},
{
"source": "{{ container_config_directory }}/voms.json",
"dest": "/etc/caso/voms.json",
"owner": "caso",
"perm": "0600"
}
],
"permissions": [
{
"path": "/var/log/kolla/caso",
"owner": "caso:caso",
"recurse": true
},
{
"path": "/var/spool/apel/outgoing/openstack",
"owner": "caso:caso",
"recurse": true
},
{
"path": "/var/lib/caso",
"owner": "caso:caso",
"recurse": true
}
]
}
9 changes: 9 additions & 0 deletions ansible/roles/caso/templates/voms.json.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"VO FQAN": {
"projects": ["local tenant 1", "local tenant 2"]
},
"VO NAME": {
"projects": ["local tenant 3"]
}
}

3 changes: 3 additions & 0 deletions ansible/roles/common/tasks/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@
default_input_files:
- name: "conf/input/00-global.conf.j2"
enabled: true
- name: "conf/input/99-caso.conf.j2"
enabled: true
- name: "conf/input/01-syslog.conf.j2"
enabled: true
- name: "conf/input/02-mariadb.conf.j2"
Expand Down Expand Up @@ -185,6 +187,7 @@
- { name: "barbican", enabled: "{{ enable_barbican | bool }}" }
- { name: "blazar", enabled: "{{ enable_blazar | bool }}" }
- { name: "ceilometer", enabled: "{{ enable_ceilometer | bool }}" }
- { name: "caso", enabled: "{{ enable_caso | bool }}" }
- { name: "chrony", enabled: "{{ enable_chrony | bool }}" }
- { name: "cinder", enabled: "{{ enable_cinder | bool }}" }
- { name: "cloudkitty", enabled: "{{ enable_cloudkitty | bool }}" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,12 @@
</record>
</filter>
{% endif %}

{% if enable_caso | bool and inventory_hostname in groups['caso'] %}
<filter apel.events>
@type parser
format json
key_name Payload
reserve_data true
</filter>
{% endif %}
8 changes: 8 additions & 0 deletions ansible/roles/common/templates/conf/input/99-caso.conf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<source>
@type tcp
tag apel.events
port {{ caso_tcp_output_port }}
bind 127.0.0.1
format /^(?<Payload>.*)$/
emit_unmatched_lines true
</source>
14 changes: 14 additions & 0 deletions ansible/roles/common/templates/conf/output/01-es.conf.j2
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
{% if enable_caso | bool and inventory_hostname in groups['caso'] %}
<match apel.events>
@type copy
<store>
@type elasticsearch
host { elasticsearch_address }}
port {{ elasticsearch_port }}
logstash_format true
logstash_prefix apel
flush_interval 15s
</store>
</match>
{% endif %}

<match *.**>
@type copy
<store>
Expand Down
3 changes: 3 additions & 0 deletions ansible/roles/common/templates/cron-logrotate-caso.conf.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"/var/log/kolla/caso/*.log"
{
}
Loading