{#- Package ru/lopcomm/libinstance provides instance code for handling Lopcomm ORAN Radio Units. #} {%- macro buildout_ru(ru_ref, cell) %} {#- indicate whether RU is listening for netconf #} {{ promise('%s-netconf-socket' % ru_ref) }} promise = check_socket_listening config-host = ${vtap.{{cell._tap}}:gateway} config-port = 830 {#- monitor state of netconf connection + keep on touching RU watchdog #} [{{ru_ref}}-supervision-template] recipe = slapos.recipe.template:jinja2 extensions = jinja2.ext.do _logbase = ${directory:var}/log/{{ru_ref}}-supervision log-output = ${:_logbase}.log supervision-reply-json-log-output = ${:_logbase}-reply.json.log is_netconf_connected = ${directory:etc}/{{ru_ref}}.is_netconf_connected context = section directory directory section vtap vtap.{{ cell._tap }} key slapparameter_dict slap-configuration:configuration key log_file :log-output key supervision_reply_json_log_file :supervision-reply-json-log-output raw testing {{ slapparameter_dict.get("testing", False) }} raw python_path {{ buildout_directory}}/bin/pythonwitheggs raw buildout_directory_path {{ buildout_directory }} key is_netconf_connected :is_netconf_connected import netaddr netaddr mode = 0775 url = {{ ru_lopcomm_supervision_template }} output = ${directory:bin}/{{ru_ref}}-supervision.py {{ part('%s-supervision-service' % ru_ref) }} recipe = slapos.cookbook:wrapper command-line = ${ {{- ru_ref}}-supervision-template:output} wrapper-path = ${directory:service}/{{ru_ref}}-supervision mode = 0775 hash-files = ${:command-line} {{ promise('%s-netconf-connection' % ru_ref) }} promise = check_command_execute config-command = [ -f ${ {{-ru_ref}}-supervision-template:is_netconf_connected} ] {#- push firmware to RU #} [{{ru_ref}}-software-template] recipe = slapos.recipe.template:jinja2 extensions = jinja2.ext.do _logbase = ${directory:var}/log/{{ru_ref}}-software log-output = ${:_logbase}.log software-reply-json-log-output = ${:_logbase}-reply.json.log remote-file-path = sftp://${user-info:pw-name}@[${slap-configuration:ipv6-random}]:${sshd-port:port}{{ru_lopcomm_firmware_path}} is_firmware_updated = ${directory:etc}/{{ru_ref}}.is_firmware_updated context = section directory directory section vtap vtap.{{ cell._tap }} key slapparameter_dict slap-configuration:configuration key log_file :log-output key software_reply_json_log_file :software-reply-json-log-output key remote_file_path :remote-file-path raw testing {{ slapparameter_dict.get("testing", False) }} raw python_path {{ buildout_directory}}/bin/pythonwitheggs raw buildout_directory_path {{ buildout_directory }} key is_firmware_updated :is_firmware_updated raw firmware_name {{ru_lopcomm_firmware_filename}} import netaddr netaddr mode = 0775 url = {{ ru_lopcomm_software_template }} output = ${directory:script}/{{ru_ref}}-software.py {{ promise('%s-firmware' % ru_ref) }} promise = check_command_execute config-command = [ -f ${ {{-ru_ref}}-software-template:is_firmware_updated} ] {#- push config to RU #} {% if slapparameter_dict.get("cu_config_link", None) %} [cu-config-dl] recipe = slapos.recipe.build:download url = {{ slapparameter_dict.get("cu_config_link") }} version = {{ slapparameter_dict.get("cu_config_version") }} offline = false {% endif %} [{{ru_ref}}-cu-config] <= config-base {% if slapparameter_dict.get("cu_config_link", None) %} url = ${cu-config-dl:target} {% else %} url = {{ ru_lopcomm_cu_config_template }} {% endif %} output = ${directory:etc}/{{ru_ref}}-cu_config.xml [{{ru_ref}}-config-template] recipe = slapos.recipe.template:jinja2 extensions = jinja2.ext.do log-output = ${directory:var}/log/{{ru_ref}}-config.log context = section directory directory section vtap vtap.{{ cell._tap }} key log_file :log-output raw testing {{ slapparameter_dict.get("testing", False) }} raw python_path {{ buildout_directory}}/bin/pythonwitheggs raw buildout_directory_path {{ buildout_directory }} raw CreateProcessingEle_template {{ ru_lopcomm_CreateProcessingEle_template }} key cu_config_template {{ru_ref}}-cu-config:output import netaddr netaddr mode = 0775 url = {{ ru_lopcomm_config_template }} output = ${directory:script}/{{ru_ref}}-config.py {{ promise('%s-config-log' % ru_ref) }} promise = check_lopcomm_config_log config-config-log = ${ {{- ru_ref}}-config-template:log-output} {#- handle notifications from RU #} [{{ru_ref}}-stats-template] recipe = slapos.recipe.template:jinja2 extensions = jinja2.ext.do _logbase = ${directory:var}/log/{{ru_ref}} log-output = ${:_logbase}-stats.log json-log-output = ${:_logbase}-stats.json.log cfg-json-log-output = ${:_logbase}-config.json.log supervision-json-log-output = ${:_logbase}-supervision.json.log ncsession-json-log-output = ${:_logbase}-ncsession.json.log software-json-log-output = ${:_logbase}-software.json.log context = section directory directory section vtap vtap.{{ cell._tap }} key slapparameter_dict slap-configuration:configuration key log_file :log-output key json_log_file :json-log-output key cfg_json_log_file :cfg-json-log-output key supervision_json_log_file :supervision-json-log-output key ncsession_json_log_file :ncsession-json-log-output key software_json_log_file :software-json-log-output raw testing {{ slapparameter_dict.get("testing", False) }} raw python_path {{ buildout_directory}}/bin/pythonwitheggs raw buildout_directory_path {{ buildout_directory }} import netaddr netaddr mode = 0775 url = {{ ru_lopcomm_stats_template }} output = ${directory:bin}/{{ru_ref}}-stats.py {{ part('%s-stats-service' % ru_ref) }} recipe = slapos.cookbook:wrapper command-line = ${ {{- ru_ref}}-stats-template:output} wrapper-path = ${directory:service}/{{ru_ref}}-stats mode = 0775 hash-files = ${:command-line} {{ promise('%s-vswr' % ru_ref) }} promise = check_lopcomm_vswr config-netconf-log = ${ {{- ru_ref}}-stats-template:json-log-output} {{ promise('%s-rssi' % ru_ref) }} promise = check_lopcomm_rssi config-netconf-log = ${ {{- ru_ref}}-stats-template:json-log-output} {{ promise('%s-pa-current' % ru_ref) }} promise = check_lopcomm_pa_current config-netconf-log = ${ {{- ru_ref}}-stats-template:json-log-output} {{ promise('%s-pa-output-power' % ru_ref) }} promise = check_lopcomm_pa_output_power config-netconf-log = ${ {{- ru_ref}}-stats-template:json-log-output} {{ promise('%s-sync' % ru_ref) }} promise = check_lopcomm_sync config-netconf-log = ${ {{- ru_ref}}-stats-template:json-log-output} {{ promise('%s-lof' % ru_ref) }} promise = check_lopcomm_lof config-netconf-log = ${ {{- ru_ref}}-stats-template:json-log-output} {{ promise('%s-stats-log' % ru_ref) }} promise = check_lopcomm_stats_log config-stats-log = ${ {{- ru_ref}}-stats-template:log-output} {{ promise('%s-cpri-lock' % ru_ref) }} promise = check_cpri_lock config-sdr_dev = {{ slapparameter_dict.get('sdr_number', 0) }} config-sfp_port = {{ cell.cpri_port_number }} config-amarisoft-rf-info-log = ${amarisoft-rf-info-template:log-output} {#- reset RU periodically #} {%- if slapparameter_dict.get("cron_schedule") %} [{{ru_ref}}-reset-info-template] recipe = slapos.recipe.template:jinja2 extensions = jinja2.ext.do _logbase = ${directory:var}/log/{{ru_ref}}-reset-info log-output = ${:_logbase}.log json-log-output = ${:_logbase}.json.log context = section vtap vtap.{{ cell._tap }} key log_file :log-output key json_log_file :json-log-output raw stats_period {{ slapparameter_dict.get("enb_stats_fetch_period", 60) }} raw testing {{ slapparameter_dict.get("testing", False) }} raw python_path {{ buildout_directory}}/bin/pythonwitheggs import netaddr netaddr mode = 0775 url = {{ ru_lopcomm_reset_info_template }} output = ${directory:bin}/{{ru_ref}}-reset-info.py [{{ru_ref}}-reset-template] recipe = slapos.recipe.template:jinja2 extensions = jinja2.ext.do _logbase = ${directory:var}/log/{{ru_ref}}-reset log-output = ${:_logbase}.log json-log-output = ${:_logbase}.json.log context = section vtap vtap.{{ cell._tap }} key log_file :log-output raw python_path {{ buildout_directory}}/bin/pythonwitheggs raw buildout_directory_path {{ buildout_directory }} import netaddr netaddr mode = 0775 url = {{ ru_lopcomm_reset_template }} output = ${directory:etc}/{{ru_ref}}-reset.py {{ part('%s-reset-cron' % ru_ref) }} recipe = slapos.cookbook:cron.d cron-entries = ${cron:cron-entries} name = {{ru_ref}}-reset frequency = {{ slapparameter_dict.get("cron_schedule", "") }} command = {{ buildout_directory}}/bin/pythonwitheggs ${ {{- ru_ref}}-reset-template:output} {{ part('%s-reset-info-service' % ru_ref) }} recipe = slapos.cookbook:wrapper command-line = ${ {{- ru_ref}}-reset-info-template:output} wrapper-path = ${directory:service}/{{ru_ref}}-reset-info mode = 0775 hash-files = ${:command-line} {%- endif %} {%- endmacro %}