diff --git a/geant/gap_ansible/roles/iptrunk_checks/tasks/check_optical_levels.yaml b/geant/gap_ansible/roles/iptrunk_checks/tasks/check_optical_levels.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d338efa4717b50fb34d19411273a2364a8523367
--- /dev/null
+++ b/geant/gap_ansible/roles/iptrunk_checks/tasks/check_optical_levels.yaml
@@ -0,0 +1,47 @@
+---
+###############################################################################################################
+# The playbook does the following:
+#
+#
+# - Runs the command 'show interfaces diagnostics optics {{ interface }} | no-more' and gets the json output
+# - From json output it retrieves the apporpriate metrics for optical levels
+# - Saves the metrics in relevant variable names
+###############################################################################################################
+
+- name: Get Junos attributes for optical levels of interface "{{ item }}"
+  when: local_side.iptrunk_side_node.vendor == "juniper"
+  block:
+    - name: Run Juniper Optical info
+      junipernetworks.junos.junos_command:
+        commands: "show interfaces diagnostics optics {{ item }} | no-more"
+        # display: json
+      register: optical_status
+
+    - name: Show optical levels on Juniper interface "{{ item }}"
+      ansible.builtin.debug:
+        msg: "{{ optical_status }}"
+
+- name: Get Nokia optical levels on port "{{ item }}"
+  when: local_side.iptrunk_side_node.vendor == "nokia"
+  block:
+    - name: Prepare the connector var
+      ansible.builtin.set_fact:
+        connector: "{{ item | regex_search('[1-9]/[1-9]/c[1-9]+') }}"
+
+    - name: Run Nokia show command
+      ansible.netcommon.netconf_rpc:
+        rpc: action
+        xmlns: "urn:ietf:params:xml:ns:yang:1"
+        content: |
+            <global-operations xmlns="urn:nokia.com:sros:ns:yang:sr:oper-global">
+              <md-cli-raw-command>
+                <md-cli-input-line>show port {{ connector }} optical</md-cli-input-line>
+              </md-cli-raw-command>
+            </global-operations>
+        display: json
+      register: output
+
+    - name: Show optical levels on Nokia port "{{ item }}"
+      ansible.builtin.debug:
+        # msg: "{{ output }}"
+        msg: "{{out.output['rpc-reply']['nokiaoper:results']['nokiaoper:md-cli-output-block'].split('\n')}}"
diff --git a/geant/gap_ansible/roles/iptrunk_checks/tasks/main.yml b/geant/gap_ansible/roles/iptrunk_checks/tasks/main.yml
index f5da18ba9958c35a3c204a28b13bd3e3c772cc36..cdc6108fd05d3c81467a54f86f1f123ae35e73c5 100644
--- a/geant/gap_ansible/roles/iptrunk_checks/tasks/main.yml
+++ b/geant/gap_ansible/roles/iptrunk_checks/tasks/main.yml
@@ -20,6 +20,12 @@
   vars:
     query: "iptrunk.iptrunk_sides[?iptrunk_side_node.router_fqdn == '{{ inventory_hostname }}'] | [0]"
 
+- name: Load remote info
+  ansible.builtin.set_fact:
+    remote_side: "{{ wfo_trunk_json | community.general.json_query(query) }}"
+  vars:
+    query: "iptrunk.iptrunk_sides[?iptrunk_side_node.router_fqdn != '{{ inventory_hostname }}'] | [0]"
+
 - name: Set ansible_host to terminal server when router is offline
   ansible.builtin.set_fact:
     ansible_host: "{{ wfo_trunk.iptrunk.iptrunk_sides[0].iptrunk_side_node.router_site.site_ts_address }}"
@@ -39,3 +45,8 @@
 - name: Check ping
   ansible.builtin.include_tasks: check_trunk_interface.yaml
   when: check == "ping"
+
+- name: Check optical levels
+  ansible.builtin.include_tasks: check_optical_levels.yaml
+  when: check == "optical"
+  loop: "{{ local_side.iptrunk_side_ae_members }}"
diff --git a/geant/gap_ansible/roles/iptrunk_checks/vars/main.yml b/geant/gap_ansible/roles/iptrunk_checks/vars/main.yml
index 3b5859461aad26f49d859f79fc7924a94ae32fa6..1e93aab6f44d00df761d3dedf9b9b4bc7c13d576 100644
--- a/geant/gap_ansible/roles/iptrunk_checks/vars/main.yml
+++ b/geant/gap_ansible/roles/iptrunk_checks/vars/main.yml
@@ -5,6 +5,8 @@
 checks:
   - isis
   - ping
+  - lacp
+  - optical
 
 wfo_trunk: "{{ wfo_ip_trunk_json }}"
 
@@ -19,7 +21,7 @@ trunks:
       common:
         description: "{{ wfo_trunk.iptrunk.iptrunk_description }}"
         speed: "{{ wfo_trunk.iptrunk.iptrunk_speed }}"
-        is_leased_line: false ## Fix it to use iptrunk_type
+        is_leased_line: false ## FIX: it to use iptrunk_type
         isis_metric: "{{ wfo_trunk.iptrunk.iptrunk_isis_metric }}"
         minimum_links: "{{ wfo_trunk.iptrunk.iptrunk_minimum_links }}"
       nodeA: