This site is in read only mode. Please continue to browse, but replying, likes, and other actions are disabled for now.

⚠️ We've moved!

Hi there!

To reduce project dependency on 3rd party paid services the StackStorm TSC has decided to move the Q/A from this forum to Github Discussions. This will make user experience better integrated with the native Github flow, as well as the questions closer to the community where they can provide answers.

Use 🔗 Github Discussions to ask your questions.

How to remove http:// from an FQDN when called from Slack ChatOps

When invoking an ChatOps action-alias from Slack with a hostname parameter (and/or FQDN), Slack will automatically prepend https:// or http:// in front of the hostname.

This can cause issues when passing this hostname parameter to things like napalm or ansible where a hostname/FQDN is expected (and NOT a url).

To work around this we need to remove the preceding http[s]:// from the hostname/FQDN parmeter.

Here’s an example action-alias file:

---
name: "storage_info"
action_ref: "encore.storage_info"
pack: "encore"
description: "Retrieves storage info from a VM"
formats:
    - "storage info {{ server }}"
ack:
    format: "Roger that boss, mission is a go!"

And the corresponding action file:

---
description: "Retrieves storage info from a VM"
enabled: true
entry_point: workflows/storage_info.yaml
name: storage_info
pack: encore
parameters:
  server:
    type: string
    description: "Server to retrieve info from"
    required: true
  skip_notify:
    default:
      - "lvm_info"
      - "scsi_info"
runner_type: "mistral-v2"

To get this to work “right” we are able to modify the action metadata file, creating a new parameter that will contain the “cleaned”/“stripped” hostname/FQDN. This “clean” variable can then be used by our action/workflow without the http[s]:// in the front of it.

Here is the new action metadata file:

---
description: "Retrieves storage info from a VM"
enabled: true
entry_point: workflows/storage_info.yaml
name: storage_info
pack: encore
parameters:
  server:
    type: string
    description: "Server to retrieve info from"
    required: true
  server_clean:
    type: string
    immutable: true
    required: true
    default: "{{ server | regex_replace('[A-z]*://', '') }}"
  skip_notify:
    default:
      - "lvm_info"
      - "scsi_info"
runner_type: "mistral-v2"

Alternatively, assuming you’re using the original action metadata file,you can strip out this information using the same regex_replace technique within a workflow:

version: '2.0'

encore.storage_info:
  type: direct
  input:
    - server
    - run: null

  output:
    run: "{{ _.run }}"

  tasks:
    ipa_cache_clear:
      # Slack/ChatOps converts hostname.domain.tld into a URL: http://hostname.domain.tld
      # we need to reverse this and convert the URL back into a FQDN
      action: ansible.playbook
      input:
        playbook: /etc/ansible/playbooks/storage_info.yaml
        inventory_file: "{{ regex_replace(_.server, '[A-z]+://', '') }},"
      publish:
        run: "{{ task('ipa_cache_clear').result }}"
1 Like