David Oneill
David Oneill

Reputation: 13065

Get the server URL in a script

How do I get the server URL in a script?

I can get the project @job.project@ and id @job.id@, but I would like to get the URL.

we have different instances for dev vs prod, and I want to include a link to the job in the output that is logged in a different system without needing to update the script when it rolls out.

Upvotes: 2

Views: 499

Answers (3)

gaddman
gaddman

Reputation: 69

Sometime since the original request (Rundeck 4.?) this was implemented — use @job.serverUrl@.

Upvotes: 1

David Oneill
David Oneill

Reputation: 13065

Another way to do this: set it as a "password" in the key storage.

Set up a key that contains that server's URL. In each job, set up an option that is type 'secure'. When you select secure, it will activate a selector to choose which key to use from key storage (see this). If you set the option as "required" and "hidden" it won't show up on the job run page, but will be available in the script/command.

Here is an example job:

<joblist>
  <job>
    <context>
      <options preserveOrder='true'>
        <option name='ServerURL' required='true' secure='true' storagePath='keys/pso/server_url' valueExposed='true'>
          <hidden>true</hidden>
        </option>
      </options>
    </context>
    <defaultTab>output</defaultTab>
    <description>Domonstrate using getting a variable from a key</description>
    <dispatch>
      <excludePrecedence>true</excludePrecedence>
      <keepgoing>false</keepgoing>
      <rankOrder>ascending</rankOrder>
      <successOnEmptyNodeFilter>false</successOnEmptyNodeFilter>
      <threadcount>1</threadcount>
    </dispatch>
    <executionEnabled>true</executionEnabled>
    <group>Testing stuff</group>
    <id>51b63a65-91f5-43ba-aeb9-8d640fc7a98f</id>
    <loglevel>INFO</loglevel>
    <name>Test job</name>
    <nodeFilterEditable>false</nodeFilterEditable>
    <nodefilters>
      <filter>.*</filter>
    </nodefilters>
    <nodesSelectedByDefault>true</nodesSelectedByDefault>
    <orchestrator>
      <configuration>
        <count>1</count>
      </configuration>
      <type>subset</type>
    </orchestrator>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <schedules />
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <description>Script example</description>
        <script><![CDATA[echo "This is being run from:"
echo @option.ServerURL@]]></script>
        <scriptargs />
      </command>
    </sequence>
    <timeZone>US/Central</timeZone>
    <uuid>51b63a65-91f5-43ba-aeb9-8d640fc7a98f</uuid>
  </job>
</joblist>

Upvotes: 0

MegaDrive68k
MegaDrive68k

Reputation: 4325

You can suggest that here.

Alternatively, you can extract the value from the rundeck-config.properties file and store it on a data value (to use in any step/job later), I leave a job definition example:

Command Step:

<joblist>
  <job>
    <defaultTab>nodes</defaultTab>
    <description></description>
    <executionEnabled>true</executionEnabled>
    <id>e8bb217c-ec91-418a-aec5-16df83dbcf82</id>
    <loglevel>INFO</loglevel>
    <name>RundeckServerName</name>
    <nodeFilterEditable>false</nodeFilterEditable>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <fileExtension>.sh</fileExtension>
        <plugins>
          <LogFilter type='key-value-data'>
            <config>
              <invalidKeyPattern>\s|\$|\{|\}|\\</invalidKeyPattern>
              <logData>true</logData>
              <regex>^(grails.serverURL)=*(.+)$</regex>
            </config>
          </LogFilter>
        </plugins>
        <script><![CDATA[cat /etc/rundeck/rundeck-config.properties | grep 'grails.serverURL']]></script>
        <scriptargs />
        <scriptinterpreter>/bin/bash</scriptinterpreter>
      </command>
      <command>
        <exec>echo "the rundeck server url is: ${data.grails.serverURL}"</exec>
      </command>
    </sequence>
    <uuid>e8bb217c-ec91-418a-aec5-16df83dbcf82</uuid>
  </job>
</joblist>

Script step:

<joblist>
  <job>
    <defaultTab>nodes</defaultTab>
    <description></description>
    <executionEnabled>true</executionEnabled>
    <id>e8bb217c-ec91-418a-aec5-16df83dbcf82</id>
    <loglevel>INFO</loglevel>
    <name>RundeckServerName</name>
    <nodeFilterEditable>false</nodeFilterEditable>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <fileExtension>.sh</fileExtension>
        <plugins>
          <LogFilter type='key-value-data'>
            <config>
              <invalidKeyPattern>\s|\$|\{|\}|\\</invalidKeyPattern>
              <logData>true</logData>
              <regex>^(grails.serverURL)=*(.+)$</regex>
            </config>
          </LogFilter>
        </plugins>
        <script><![CDATA[cat /etc/rundeck/rundeck-config.properties | grep 'grails.serverURL']]></script>
        <scriptargs />
        <scriptinterpreter>/bin/bash</scriptinterpreter>
      </command>
      <command>
        <fileExtension>.sh</fileExtension>
        <script><![CDATA[echo "Rundeck URL is: @data.grails.serverURL@"]]></script>
        <scriptargs />
        <scriptinterpreter>/bin/bash</scriptinterpreter>
      </command>
    </sequence>
    <uuid>e8bb217c-ec91-418a-aec5-16df83dbcf82</uuid>
  </job>
</joblist>

Here the result.

Update

To use the data variable on another job (dispatched on external nodes) just pass the data value as an argument using the job reference step.

Child job (dispatching commands/scripts to another node):

<joblist>
  <job>
    <context>
      <options preserveOrder='true'>
        <option name='rdeck_srv' />
      </options>
    </context>
    <defaultTab>nodes</defaultTab>
    <description></description>
    <dispatch>
      <excludePrecedence>true</excludePrecedence>
      <keepgoing>false</keepgoing>
      <rankOrder>ascending</rankOrder>
      <successOnEmptyNodeFilter>false</successOnEmptyNodeFilter>
      <threadcount>1</threadcount>
    </dispatch>
    <executionEnabled>true</executionEnabled>
    <id>3fa71d29-e3bc-453c-a8a7-cb9e95d0a8dd</id>
    <loglevel>INFO</loglevel>
    <name>ChildJob</name>
    <nodeFilterEditable>false</nodeFilterEditable>
    <nodefilters>
      <filter>name: node01</filter>
    </nodefilters>
    <nodesSelectedByDefault>true</nodesSelectedByDefault>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <exec>echo "the rundeck server is: ${option.rdeck_srv}</exec>
      </command>
    </sequence>
    <uuid>3fa71d29-e3bc-453c-a8a7-cb9e95d0a8dd</uuid>
  </job>
</joblist>

Parent job (takes the server name and pass it to Child job):

<joblist>
  <job>
    <defaultTab>nodes</defaultTab>
    <description></description>
    <executionEnabled>true</executionEnabled>
    <id>e8bb217c-ec91-418a-aec5-16df83dbcf82</id>
    <loglevel>INFO</loglevel>
    <name>RundeckServerName</name>
    <nodeFilterEditable>false</nodeFilterEditable>
    <plugins />
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <fileExtension>.sh</fileExtension>
        <plugins>
          <LogFilter type='key-value-data'>
            <config>
              <invalidKeyPattern>\s|\$|\{|\}|\\</invalidKeyPattern>
              <logData>true</logData>
              <regex>^(grails.serverURL)=*(.+)$</regex>
            </config>
          </LogFilter>
        </plugins>
        <script><![CDATA[cat /etc/rundeck/rundeck-config.properties | grep 'grails.serverURL']]></script>
        <scriptargs />
        <scriptinterpreter>/bin/bash</scriptinterpreter>
      </command>
      <command>
        <fileExtension>.sh</fileExtension>
        <script><![CDATA[echo "Rundeck URL is: @data.grails.serverURL@"]]></script>
        <scriptargs />
        <scriptinterpreter>/bin/bash</scriptinterpreter>
      </command>
      <command>
        <jobref name='ChildJob' nodeStep='true'>
          <arg line='-rdeck_srv ${data.grails.serverURL}' />
          <uuid>3fa71d29-e3bc-453c-a8a7-cb9e95d0a8dd</uuid>
        </jobref>
      </command>
    </sequence>
    <uuid>e8bb217c-ec91-418a-aec5-16df83dbcf82</uuid>
  </job>
</joblist>

Here the result.

Upvotes: 1

Related Questions