Jira is a widely used issue tracking and project management software developed by Atlassian. It helps teams organize and track their work, tasks, and projects in a collaborative environment. With features like customizable workflows, agile project management, and extensive reporting capabilities, Jira facilitates efficient project planning, execution, and monitoring.
This document provides information about the Jira Connector, which facilitates automated interactions, with a Jira server using FortiSOAR™ playbooks. Add the Jira Connector as a step in FortiSOAR™ playbooks and perform automated operations with Jira.
Connector Version: 1.2.0
FortiSOAR™ Version Tested on: 7.4.0-3024
Jira Version Tested on: Cloud Instance
Authored By: Fortinet
Certified: Yes
Following enhancements have been made to the Jira Connector in version 1.2.0:
Use the Content Hub to install the connector. For the detailed procedure to install a connector, click here.
You can also use the yum
command as a root user to install the connector:
yum install cyops-connector-jira
For the procedure to configure a connector, click here
In FortiSOAR™, on the Connectors page, click the Jira connector row (if you are in the Grid view on the Connectors page) and in the Configurations tab enter the required configuration details:
Parameter | Description |
---|---|
Server URL | URL for the Jira server from where the connector gets notifications. |
Username | Username configured for your account to access the Jira server from where the connector gets notifications. |
API Token | API Token configured for your account to access the Jira server from where the connector gets notifications. |
Verify SSL | Specifies whether the SSL certificate for the server is to be verified or not. By default, this option is set to True . |
The following automated operations can be included in playbooks and you can also use the annotations to access operations:
Function | Description | Annotation and Category |
---|---|---|
Create Ticket | Creates a Jira ticket on your configured Jira server based on the project key, ticket summary, type, and description, and other input parameters you have specified. | create_ticket Investigation |
Get Ticket Details | Retrieves details for a particular Jira ticket from the Jira server based on the ticket ID you have specified. | get_ticket_details Investigation |
List Projects | Retrieves a list and details of all projects from your configured Jira server. | list_projects Investigation |
List Tickets | Retrieves a list and details of tickets associated with a project from your configured Jira server, based on the project key and other input parameters you have specified. | list_tickets Investigation |
Validate JQL query | Parses and validates JQL query syntax and returns errors when found. | validate_jql_query Utilities |
Search Users | Returns a list of all users, including active users, inactive users and previously deleted users that have an Atlassian account. | search_users Investigation |
Get User Details | Retrieves details for a particular Jira user from the Jira server based on the account ID you have specified. | get_user_details Investigation |
Assign Issue to User | Assigns an issue to a user based on the account and ticket ID that you have specified. | assign_issue Investigation |
Add Attachment | Attaches a file that is present in FortiSOAR to an existing Jira ticket on your configured Jira server based on the ticket ID and FortiSOAR file or attachment IRI you have specified. | submit_file Investigation |
Add Remote Link | Adds a remote link of an issue to an existing ticket in Jira based on the ticket ID, URL, and title you have specified. | add_remote_link Investigation |
Add Comment | Adds a comment to an existing Jira ticket on your configured Jira server based on the ticket ID and comment you have specified. | add_comment Investigation |
Get Comments | Retrieves a list of comments associated with an existing Jira ticket on your configured Jira server based on the ticket ID and other input parameters you have specified. | get_comments Investigation |
Set Ticket Status | Updates the status of an existing Jira ticket on your configured Jira server based on the ticket ID and status you have specified. | set_status Investigation |
Update Ticket | Updates an existing Jira ticket on your configured Jira server based on the project key, ticket ID and other input parameters you have specified. | update_ticket Investigation |
Update FortiSOAR Record | Updates a FortiSOAR record with information on an existing Jira ticket based on the ticket ID and other input parameters you have specified. | update_fortisoar_record Investigation |
Delete Ticket | Deletes a ticket from your configured Jira server based on the ticket ID and other input parameters you have specified. | delete_ticket Investigation |
Parameter | Description |
---|---|
Project Key | Specify the unique project ID that represents the project under which to create the Jira ticket. |
Ticket Summary | Specify the summary or heading of the ticket to create on your configured Jira server. |
Ticket Description | Specify the description of the ticket to create on your configured Jira server. |
Ticket Type | Specify the type of ticket to create on your configured Jira server.You can specify the following ticket types:
|
Parent Key ID | Specify the ID of the ticket under which to create subtask. This field is only needed when the ticket type is Subtask. For example DEMO-1 . |
Priority | (Optional) Specify the priority to set for the Jira ticket to update on your configured Jira server. You can specify one of the following priorities:
|
Other Fields | (Optional) Specify fields such as Reporter, Assignee, or Components to set while creating a ticket. For example:
{ "reporter": { "name": "admin" }, "assignee": { "name": "admin" }, "components": [ { "name": "Intranet" } ] } |
The output contains the following populated JSON schema:
{ "id": "", "key": "", "self": "", "status": "" }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-000 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
The output contains the following populated JSON schema:
{ "key": "", "expand": "", "fields": { "customfield_10128": "", "customfield_10101": "", "progress": { "progress": "", "total": "" }, "environment": "", "watches": { "self": "", "isWatching": "", "watchCount": "" }, "security": "", "customfield_10115": [], "customfield_10141": "", "customfield_10112": "", "customfield_10105": "", "aggregatetimespent": "", "customfield_10122": "", "timeestimate": "", "labels": [], "timeoriginalestimate": "", "components": [], "comment": { "comments": [ { "body": "", "id": "", "updated": "", "self": "", "created": "", "author": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "updateAuthor": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" } }, { "body": "", "id": "", "updated": "", "self": "", "created": "", "author": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "updateAuthor": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" } }, { "body": "", "id": "", "updated": "", "self": "", "created": "", "author": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "updateAuthor": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" } }, { "body": "", "id": "", "updated": "", "self": "", "created": "", "author": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "updateAuthor": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" } } ], "startAt": "", "total": "", "maxResults": "" }, "customfield_10131": "", "customfield_10130": "", "customfield_10120": "", "customfield_10116": "", "versions": [], "customfield_10110": "", "attachment": [], "timespent": "", "customfield_10102": "", "customfield_10108": "", "customfield_10000": "{}", "resolution": "", "duedate": "", "aggregateprogress": { "progress": "", "total": "" }, "customfield_10106": "", "customfield_10118": "", "customfield_10125": "", "customfield_10138": { "_links": { "self": "" }, "ongoingCycle": { "breached": "", "goalDuration": { "friendly": "", "millis": "" }, "withinCalendarHours": "", "paused": "", "startTime": { "friendly": "", "iso8601": "", "epochMillis": "", "jira": "" }, "elapsedTime": { "friendly": "", "millis": "" }, "remainingTime": { "friendly": "", "millis": "" }, "breachTime": { "friendly": "", "iso8601": "", "epochMillis": "", "jira": "" } }, "name": "", "id": "", "completedCycles": [] }, "assignee": "", "customfield_10103": "", "customfield_10134": "", "aggregatetimeestimate": "", "reporter": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "aggregatetimeoriginalestimate": "", "project": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "projectTypeKey": "", "id": "", "self": "", "name": "", "key": "" }, "customfield_10139": { "_links": { "self": "" }, "name": "", "id": "", "completedCycles": [ { "breached": "", "goalDuration": { "friendly": "", "millis": "" }, "startTime": { "friendly": "", "iso8601": "", "epochMillis": "", "jira": "" }, "elapsedTime": { "friendly": "", "millis": "" }, "remainingTime": { "friendly": "", "millis": "" }, "stopTime": { "friendly": "", "iso8601": "", "epochMillis": "", "jira": "" } } ] }, "customfield_10135": "", "fixVersions": [], "timetracking": {}, "customfield_10127": "", "customfield_10001": [], "customfield_10111": "", "customfield_10126": "", "customfield_10005": "", "votes": { "self": "", "hasVoted": "", "votes": "" }, "customfield_10113": "", "creator": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "issuetype": { "description": "", "iconUrl": "", "id": "", "self": "", "subtask": "", "avatarId": "", "name": "" }, "created": "", "priority": { "self": "", "iconUrl": "", "name": "", "id": "" }, "customfield_10133": "", "customfield_10119": [], "lastViewed": "", "subtasks": [], "customfield_10200": "", "customfield_10104": "", "customfield_10121": "", "customfield_10132": "", "customfield_10123": "", "resolutiondate": "", "customfield_10140": "", "customfield_10117": "", "customfield_10136": "", "summary": "", "customfield_10124": "", "issuelinks": [], "description": "", "workratio": "", "customfield_10137": "", "updated": "", "customfield_10114": "", "customfield_10129": "", "status": { "description": "", "iconUrl": "", "id": "", "self": "", "statusCategory": { "self": "", "colorName": "", "name": "", "id": "", "key": "" }, "name": "" }, "customfield_10100": "", "worklog": { "total": "", "maxResults": "", "worklogs": [], "startAt": "" }, "customfield_10109": "", "customfield_10107": "" }, "id": "", "self": "" }
None.
The output contains the following populated JSON schema:
{ "expand": "", "self": "", "id": "", "key": "", "name": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "projectTypeKey": "", "simplified": "", "style": "", "isPrivate": "", "properties": {} }
Parameter | Description |
---|---|
JQL Query | Specify the Jira query to filter and list the tickets as per query parameters. You must specify at least one query parameter. For example, project = JIRA_PROJECT_ID . |
Start At | (Optional) Specify the starting index for retrieving tickets from Jira. By default, this is set to 0 . |
Max Results | (Optional) Specify the maximum number of tickets that this operation should return. By default, this is set to 50 . |
Fields | (Optional) Specify fields such as ID, Key, Status, Priority, and Reporter that you can choose to include and display in the output. For example: ["id","key","status","priority"] |
The output contains the following populated JSON schema:
{ "expand": "", "startAt": "", "maxResults": "", "total": "", "issues": [ { "expand": "", "id": "", "self": "", "key": "", "fields": { "issuetype": { "self": "", "id": "", "description": ".", "iconUrl": "", "name": "", "subtask": "", "avatarId": "" }, "timespent": "", "project": { "self": "", "id": "", "key": "", "name": "", "projectTypeKey": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" } }, "customfield_10110": "", "fixVersions": [], "customfield_10111": "", "aggregatetimespent": "", "customfield_10112": "", "resolution": "", "customfield_10113": "", "customfield_10114": "", "customfield_10104": "", "customfield_10105": "", "customfield_10106": "", "customfield_10107": "", "customfield_10108": "", "customfield_10109": "", "resolutiondate": "", "workratio": "", "lastViewed": "", "watches": { "self": "", "watchCount": "", "isWatching": "" }, "created": "", "customfield_10140": "", "customfield_10141": "", "priority": { "self": "", "iconUrl": "", "name": "", "id": "" }, "customfield_10100": "", "customfield_10101": "", "customfield_10102": "", "labels": [], "customfield_10103": "", "customfield_10137": "", "customfield_10138": { "id": "", "name": "", "_links": { "self": "" }, "completedCycles": [], "ongoingCycle": { "startTime": { "iso8601": "", "jira": "", "friendly": "", "epochMillis": "" }, "breachTime": { "iso8601": "", "jira": "", "friendly": "", "epochMillis": "" }, "breached": "", "paused": "", "withinCalendarHours": "", "goalDuration": { "millis": "", "friendly": "" }, "elapsedTime": { "millis": "", "friendly": "" }, "remainingTime": { "millis": "", "friendly": "" } } }, "customfield_10139": { "id": "", "name": "", "_links": { "self": "" }, "completedCycles": [], "ongoingCycle": { "startTime": { "iso8601": "", "jira": "", "friendly": "", "epochMillis": "" }, "breachTime": { "iso8601": "", "jira": "", "friendly": "", "epochMillis": "" }, "breached": "", "paused": "", "withinCalendarHours": "", "goalDuration": { "millis": "", "friendly": "" }, "elapsedTime": { "millis": "", "friendly": "" }, "remainingTime": { "millis": "", "friendly": "" } } }, "timeestimate": "", "aggregatetimeoriginalestimate": "", "versions": [], "issuelinks": [], "assignee": "", "updated": "", "status": { "self": "", "description": "", "iconUrl": "", "name": "", "id": "", "statusCategory": { "self": "", "id": "", "key": "", "colorName": "", "name": "" } }, "components": [], "timeoriginalestimate": "", "customfield_10130": "", "description": "", "customfield_10131": "", "customfield_10132": "", "customfield_10133": "", "customfield_10134": "", "customfield_10135": "", "customfield_10136": "", "customfield_10126": "", "customfield_10005": "", "customfield_10127": "", "security": "", "customfield_10128": "", "customfield_10129": "", "aggregatetimeestimate": "", "summary": "", "creator": { "self": "", "name": "", "key": "", "accountId": "", "emailAddress": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "displayName": "", "active": "", "timeZone": "" }, "subtasks": [], "customfield_10120": "", "reporter": { "self": "", "name": "", "key": "", "accountId": "", "emailAddress": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "displayName": "", "active": "", "timeZone": "" }, "customfield_10000": "{}", "aggregateprogress": { "progress": "", "total": "" }, "customfield_10121": "", "customfield_10001": [], "customfield_10122": "", "customfield_10123": "", "customfield_10200": "", "customfield_10124": "", "customfield_10125": "", "customfield_10115": [], "customfield_10116": "", "customfield_10117": "", "environment": "", "customfield_10118": "", "customfield_10119": [], "duedate": "", "progress": { "progress": "", "total": "" }, "votes": { "self": "", "votes": "", "hasVoted": "" } } } ] }
Parameter | Description |
---|---|
JQL Query | Specify the Jira query to validate with the Jira Server. |
The output contains the following populated JSON schema:
{ "queries": [ { "query": "", "structure": "" }, { "query": "", "errors": "" } ] }
Parameter | Description |
---|---|
Start At | (Optional) Specify the starting index for retrieving tickets from Jira. By default, this is set to 0 . |
Max Results | (Optional) Specify the maximum number of tickets that this operation should return. By default, this is set to 50 . |
The output contains the following populated JSON schema:
{ "self": "", "key": "", "accountId": "", "accountType": "", "name": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "displayName": "", "active": "" }
Parameter | Description |
---|---|
Account ID | Specify the user's account ID. Account ID uniquely identifies the user across all Atlassian products and you can retrieve it from the Search Users action. |
The output contains the following populated JSON schema:
{ "self": "", "key": "", "accountId": "", "accountType": "", "name": "", "emailAddress": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "displayName": "", "active": "", "timeZone": "", "groups": { "size": "", "items": "" }, "applicationRoles": { "size": "", "items": "" } }
Parameter | Description |
---|---|
Account ID | Specify the assignee's account ID. Account ID uniquely identifies the user across all Atlassian products and you can retrieve it from the Search Users action.
NOTE:To remove all assignees and mark the ticket unassigned, specify |
Ticket ID | Specify the unique ID associated with each ticket. |
The output contains the following populated JSON schema:
The output contains a non-dictionary value.
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-144 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
File or Attachment IRI | Specify the file to add as an attachment to the specified Jira ticket. You can select from the following options:
|
The output contains the following populated JSON schema:
{ "data": [ { "id": "", "self": "", "size": "", "author": { "id": "", "self": "", "active": "", "timeZone": "", "accountId": "", "avatarUrls": { "16x16": "", "24x24": "", "32x32": "", "48x48": "" }, "accountType": "", "displayName": "", "emailAddress": "" }, "content": "", "created": "", "filename": "" } ], "status": "", "_status": "", "message": "", "operation": "", "request_id": "" }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-144 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
URL | Specify the URL of the issue to add to the specified Jira ticket. |
Title | Specify the title to add for the specified issue that you are adding to the Jira ticket. |
The output contains the following populated JSON schema:
{ "id": "", "self": "" }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-144 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
Comment | Specify the comment to add to an existing Jira ticket. |
The output contains the following populated JSON schema:
{ "body": "", "id": "", "updated": "", "self": "", "created": "", "author": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "updateAuthor": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" } }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-000 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
Start At | (Optional) Specify the starting index for retrieving tickets from Jira. By default, this is set to 0 . |
Max Results | (Optional) Specify the maximum number of tickets that this operation should return. By default, this is set to 50 . |
OrderBy | Select the order in which to sort the tickets. You can select from the following options:
|
The output contains the following populated JSON schema:
{ "startAt": "", "maxResults": "", "total": "", "comments": [ { "self": "", "id": "", "author": { "self": "", "id": "", "accountId": "", "emailAddress": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "displayName": "", "active": "", "timeZone": "", "accountType": "" }, "body": "", "updateAuthor": { "self": "", "id": "", "accountId": "", "emailAddress": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "displayName": "", "active": "", "timeZone": "", "accountType": "" }, "created": "", "updated": "", "jsdPublic": "" } ] }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-000 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
Status | Specify the status to set for an existing Jira ticket. You can add status such as To Do , In Progress , or Done . |
The output contains the following populated JSON schema:
{ "message": "", "status": "" }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-000 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
Project Key | Specify the unique project ID that represents the project under which to update the Jira ticket. |
Summary | Specify the summary or heading of the ticket to update on your configured Jira server. |
Comment | Specify the comment to add to an existing Jira ticket. |
Priority | (Optional) Specify the priority to update for the Jira ticket. You can specify one of the following priorities:
|
Description | (Optional) Specify the description to add to the Jira ticket when you are updating it on your configured Jira server. |
Status | Specify the status to set for an existing Jira ticket. You can add status such as To Do , In Progress , or Done . |
Other Fields | (Optional) Specify fields such as Reporter, Assignee, or Components to set while updating the ticket. For example:
{ "reporter": { "name": "admin" }, "assignee": { "name": "admin" }, "components": [ { "name": "Intranet" } ] } |
The output contains the following populated JSON schema:
{ "message": "", "status": "" }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-000 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
FortiSOAR Username | Specify the username of the FortiSOAR instance where you want to update the Jira ticket. |
FortiSOAR Password | Specify the password of the FortiSOAR instance where you want to update the Jira ticket. |
The output contains the following populated JSON schema:
{ "name": "", "@id": "", "jiraComment": "", "jiraPriority": "", "jiraStatus": "", "description": "" }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-000 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
Delete Subtasks | Select this option, i.e., set it to true to delete subtasks associated with the Jira ticket. If the ticket has subtasks then you must select this option to successfully delete the ticket from your configured Jira server. |
The output contains the following populated JSON schema:
{ "message": "", "status": "" }
The Sample - Jira - 1.2.0
playbook collection comes bundled with the Jira connector. These playbooks contain steps using which you can perform all supported actions. You can see bundled playbooks in the Automation > Playbooks section in FortiSOAR™ after importing the Jira connector.
Note: If you are planning to use any of the sample playbooks in your environment, ensure that you clone those playbooks and move them to a different collection, since the sample playbook collection gets deleted during connector upgrade and delete.
Jira is a widely used issue tracking and project management software developed by Atlassian. It helps teams organize and track their work, tasks, and projects in a collaborative environment. With features like customizable workflows, agile project management, and extensive reporting capabilities, Jira facilitates efficient project planning, execution, and monitoring.
This document provides information about the Jira Connector, which facilitates automated interactions, with a Jira server using FortiSOAR™ playbooks. Add the Jira Connector as a step in FortiSOAR™ playbooks and perform automated operations with Jira.
Connector Version: 1.2.0
FortiSOAR™ Version Tested on: 7.4.0-3024
Jira Version Tested on: Cloud Instance
Authored By: Fortinet
Certified: Yes
Following enhancements have been made to the Jira Connector in version 1.2.0:
Use the Content Hub to install the connector. For the detailed procedure to install a connector, click here.
You can also use the yum
command as a root user to install the connector:
yum install cyops-connector-jira
For the procedure to configure a connector, click here
In FortiSOAR™, on the Connectors page, click the Jira connector row (if you are in the Grid view on the Connectors page) and in the Configurations tab enter the required configuration details:
Parameter | Description |
---|---|
Server URL | URL for the Jira server from where the connector gets notifications. |
Username | Username configured for your account to access the Jira server from where the connector gets notifications. |
API Token | API Token configured for your account to access the Jira server from where the connector gets notifications. |
Verify SSL | Specifies whether the SSL certificate for the server is to be verified or not. By default, this option is set to True . |
The following automated operations can be included in playbooks and you can also use the annotations to access operations:
Function | Description | Annotation and Category |
---|---|---|
Create Ticket | Creates a Jira ticket on your configured Jira server based on the project key, ticket summary, type, and description, and other input parameters you have specified. | create_ticket Investigation |
Get Ticket Details | Retrieves details for a particular Jira ticket from the Jira server based on the ticket ID you have specified. | get_ticket_details Investigation |
List Projects | Retrieves a list and details of all projects from your configured Jira server. | list_projects Investigation |
List Tickets | Retrieves a list and details of tickets associated with a project from your configured Jira server, based on the project key and other input parameters you have specified. | list_tickets Investigation |
Validate JQL query | Parses and validates JQL query syntax and returns errors when found. | validate_jql_query Utilities |
Search Users | Returns a list of all users, including active users, inactive users and previously deleted users that have an Atlassian account. | search_users Investigation |
Get User Details | Retrieves details for a particular Jira user from the Jira server based on the account ID you have specified. | get_user_details Investigation |
Assign Issue to User | Assigns an issue to a user based on the account and ticket ID that you have specified. | assign_issue Investigation |
Add Attachment | Attaches a file that is present in FortiSOAR to an existing Jira ticket on your configured Jira server based on the ticket ID and FortiSOAR file or attachment IRI you have specified. | submit_file Investigation |
Add Remote Link | Adds a remote link of an issue to an existing ticket in Jira based on the ticket ID, URL, and title you have specified. | add_remote_link Investigation |
Add Comment | Adds a comment to an existing Jira ticket on your configured Jira server based on the ticket ID and comment you have specified. | add_comment Investigation |
Get Comments | Retrieves a list of comments associated with an existing Jira ticket on your configured Jira server based on the ticket ID and other input parameters you have specified. | get_comments Investigation |
Set Ticket Status | Updates the status of an existing Jira ticket on your configured Jira server based on the ticket ID and status you have specified. | set_status Investigation |
Update Ticket | Updates an existing Jira ticket on your configured Jira server based on the project key, ticket ID and other input parameters you have specified. | update_ticket Investigation |
Update FortiSOAR Record | Updates a FortiSOAR record with information on an existing Jira ticket based on the ticket ID and other input parameters you have specified. | update_fortisoar_record Investigation |
Delete Ticket | Deletes a ticket from your configured Jira server based on the ticket ID and other input parameters you have specified. | delete_ticket Investigation |
Parameter | Description |
---|---|
Project Key | Specify the unique project ID that represents the project under which to create the Jira ticket. |
Ticket Summary | Specify the summary or heading of the ticket to create on your configured Jira server. |
Ticket Description | Specify the description of the ticket to create on your configured Jira server. |
Ticket Type | Specify the type of ticket to create on your configured Jira server.You can specify the following ticket types:
|
Parent Key ID | Specify the ID of the ticket under which to create subtask. This field is only needed when the ticket type is Subtask. For example DEMO-1 . |
Priority | (Optional) Specify the priority to set for the Jira ticket to update on your configured Jira server. You can specify one of the following priorities:
|
Other Fields | (Optional) Specify fields such as Reporter, Assignee, or Components to set while creating a ticket. For example:
{ "reporter": { "name": "admin" }, "assignee": { "name": "admin" }, "components": [ { "name": "Intranet" } ] } |
The output contains the following populated JSON schema:
{ "id": "", "key": "", "self": "", "status": "" }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-000 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
The output contains the following populated JSON schema:
{ "key": "", "expand": "", "fields": { "customfield_10128": "", "customfield_10101": "", "progress": { "progress": "", "total": "" }, "environment": "", "watches": { "self": "", "isWatching": "", "watchCount": "" }, "security": "", "customfield_10115": [], "customfield_10141": "", "customfield_10112": "", "customfield_10105": "", "aggregatetimespent": "", "customfield_10122": "", "timeestimate": "", "labels": [], "timeoriginalestimate": "", "components": [], "comment": { "comments": [ { "body": "", "id": "", "updated": "", "self": "", "created": "", "author": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "updateAuthor": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" } }, { "body": "", "id": "", "updated": "", "self": "", "created": "", "author": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "updateAuthor": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" } }, { "body": "", "id": "", "updated": "", "self": "", "created": "", "author": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "updateAuthor": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" } }, { "body": "", "id": "", "updated": "", "self": "", "created": "", "author": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "updateAuthor": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" } } ], "startAt": "", "total": "", "maxResults": "" }, "customfield_10131": "", "customfield_10130": "", "customfield_10120": "", "customfield_10116": "", "versions": [], "customfield_10110": "", "attachment": [], "timespent": "", "customfield_10102": "", "customfield_10108": "", "customfield_10000": "{}", "resolution": "", "duedate": "", "aggregateprogress": { "progress": "", "total": "" }, "customfield_10106": "", "customfield_10118": "", "customfield_10125": "", "customfield_10138": { "_links": { "self": "" }, "ongoingCycle": { "breached": "", "goalDuration": { "friendly": "", "millis": "" }, "withinCalendarHours": "", "paused": "", "startTime": { "friendly": "", "iso8601": "", "epochMillis": "", "jira": "" }, "elapsedTime": { "friendly": "", "millis": "" }, "remainingTime": { "friendly": "", "millis": "" }, "breachTime": { "friendly": "", "iso8601": "", "epochMillis": "", "jira": "" } }, "name": "", "id": "", "completedCycles": [] }, "assignee": "", "customfield_10103": "", "customfield_10134": "", "aggregatetimeestimate": "", "reporter": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "aggregatetimeoriginalestimate": "", "project": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "projectTypeKey": "", "id": "", "self": "", "name": "", "key": "" }, "customfield_10139": { "_links": { "self": "" }, "name": "", "id": "", "completedCycles": [ { "breached": "", "goalDuration": { "friendly": "", "millis": "" }, "startTime": { "friendly": "", "iso8601": "", "epochMillis": "", "jira": "" }, "elapsedTime": { "friendly": "", "millis": "" }, "remainingTime": { "friendly": "", "millis": "" }, "stopTime": { "friendly": "", "iso8601": "", "epochMillis": "", "jira": "" } } ] }, "customfield_10135": "", "fixVersions": [], "timetracking": {}, "customfield_10127": "", "customfield_10001": [], "customfield_10111": "", "customfield_10126": "", "customfield_10005": "", "votes": { "self": "", "hasVoted": "", "votes": "" }, "customfield_10113": "", "creator": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "issuetype": { "description": "", "iconUrl": "", "id": "", "self": "", "subtask": "", "avatarId": "", "name": "" }, "created": "", "priority": { "self": "", "iconUrl": "", "name": "", "id": "" }, "customfield_10133": "", "customfield_10119": [], "lastViewed": "", "subtasks": [], "customfield_10200": "", "customfield_10104": "", "customfield_10121": "", "customfield_10132": "", "customfield_10123": "", "resolutiondate": "", "customfield_10140": "", "customfield_10117": "", "customfield_10136": "", "summary": "", "customfield_10124": "", "issuelinks": [], "description": "", "workratio": "", "customfield_10137": "", "updated": "", "customfield_10114": "", "customfield_10129": "", "status": { "description": "", "iconUrl": "", "id": "", "self": "", "statusCategory": { "self": "", "colorName": "", "name": "", "id": "", "key": "" }, "name": "" }, "customfield_10100": "", "worklog": { "total": "", "maxResults": "", "worklogs": [], "startAt": "" }, "customfield_10109": "", "customfield_10107": "" }, "id": "", "self": "" }
None.
The output contains the following populated JSON schema:
{ "expand": "", "self": "", "id": "", "key": "", "name": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "projectTypeKey": "", "simplified": "", "style": "", "isPrivate": "", "properties": {} }
Parameter | Description |
---|---|
JQL Query | Specify the Jira query to filter and list the tickets as per query parameters. You must specify at least one query parameter. For example, project = JIRA_PROJECT_ID . |
Start At | (Optional) Specify the starting index for retrieving tickets from Jira. By default, this is set to 0 . |
Max Results | (Optional) Specify the maximum number of tickets that this operation should return. By default, this is set to 50 . |
Fields | (Optional) Specify fields such as ID, Key, Status, Priority, and Reporter that you can choose to include and display in the output. For example: ["id","key","status","priority"] |
The output contains the following populated JSON schema:
{ "expand": "", "startAt": "", "maxResults": "", "total": "", "issues": [ { "expand": "", "id": "", "self": "", "key": "", "fields": { "issuetype": { "self": "", "id": "", "description": ".", "iconUrl": "", "name": "", "subtask": "", "avatarId": "" }, "timespent": "", "project": { "self": "", "id": "", "key": "", "name": "", "projectTypeKey": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" } }, "customfield_10110": "", "fixVersions": [], "customfield_10111": "", "aggregatetimespent": "", "customfield_10112": "", "resolution": "", "customfield_10113": "", "customfield_10114": "", "customfield_10104": "", "customfield_10105": "", "customfield_10106": "", "customfield_10107": "", "customfield_10108": "", "customfield_10109": "", "resolutiondate": "", "workratio": "", "lastViewed": "", "watches": { "self": "", "watchCount": "", "isWatching": "" }, "created": "", "customfield_10140": "", "customfield_10141": "", "priority": { "self": "", "iconUrl": "", "name": "", "id": "" }, "customfield_10100": "", "customfield_10101": "", "customfield_10102": "", "labels": [], "customfield_10103": "", "customfield_10137": "", "customfield_10138": { "id": "", "name": "", "_links": { "self": "" }, "completedCycles": [], "ongoingCycle": { "startTime": { "iso8601": "", "jira": "", "friendly": "", "epochMillis": "" }, "breachTime": { "iso8601": "", "jira": "", "friendly": "", "epochMillis": "" }, "breached": "", "paused": "", "withinCalendarHours": "", "goalDuration": { "millis": "", "friendly": "" }, "elapsedTime": { "millis": "", "friendly": "" }, "remainingTime": { "millis": "", "friendly": "" } } }, "customfield_10139": { "id": "", "name": "", "_links": { "self": "" }, "completedCycles": [], "ongoingCycle": { "startTime": { "iso8601": "", "jira": "", "friendly": "", "epochMillis": "" }, "breachTime": { "iso8601": "", "jira": "", "friendly": "", "epochMillis": "" }, "breached": "", "paused": "", "withinCalendarHours": "", "goalDuration": { "millis": "", "friendly": "" }, "elapsedTime": { "millis": "", "friendly": "" }, "remainingTime": { "millis": "", "friendly": "" } } }, "timeestimate": "", "aggregatetimeoriginalestimate": "", "versions": [], "issuelinks": [], "assignee": "", "updated": "", "status": { "self": "", "description": "", "iconUrl": "", "name": "", "id": "", "statusCategory": { "self": "", "id": "", "key": "", "colorName": "", "name": "" } }, "components": [], "timeoriginalestimate": "", "customfield_10130": "", "description": "", "customfield_10131": "", "customfield_10132": "", "customfield_10133": "", "customfield_10134": "", "customfield_10135": "", "customfield_10136": "", "customfield_10126": "", "customfield_10005": "", "customfield_10127": "", "security": "", "customfield_10128": "", "customfield_10129": "", "aggregatetimeestimate": "", "summary": "", "creator": { "self": "", "name": "", "key": "", "accountId": "", "emailAddress": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "displayName": "", "active": "", "timeZone": "" }, "subtasks": [], "customfield_10120": "", "reporter": { "self": "", "name": "", "key": "", "accountId": "", "emailAddress": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "displayName": "", "active": "", "timeZone": "" }, "customfield_10000": "{}", "aggregateprogress": { "progress": "", "total": "" }, "customfield_10121": "", "customfield_10001": [], "customfield_10122": "", "customfield_10123": "", "customfield_10200": "", "customfield_10124": "", "customfield_10125": "", "customfield_10115": [], "customfield_10116": "", "customfield_10117": "", "environment": "", "customfield_10118": "", "customfield_10119": [], "duedate": "", "progress": { "progress": "", "total": "" }, "votes": { "self": "", "votes": "", "hasVoted": "" } } } ] }
Parameter | Description |
---|---|
JQL Query | Specify the Jira query to validate with the Jira Server. |
The output contains the following populated JSON schema:
{ "queries": [ { "query": "", "structure": "" }, { "query": "", "errors": "" } ] }
Parameter | Description |
---|---|
Start At | (Optional) Specify the starting index for retrieving tickets from Jira. By default, this is set to 0 . |
Max Results | (Optional) Specify the maximum number of tickets that this operation should return. By default, this is set to 50 . |
The output contains the following populated JSON schema:
{ "self": "", "key": "", "accountId": "", "accountType": "", "name": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "displayName": "", "active": "" }
Parameter | Description |
---|---|
Account ID | Specify the user's account ID. Account ID uniquely identifies the user across all Atlassian products and you can retrieve it from the Search Users action. |
The output contains the following populated JSON schema:
{ "self": "", "key": "", "accountId": "", "accountType": "", "name": "", "emailAddress": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "displayName": "", "active": "", "timeZone": "", "groups": { "size": "", "items": "" }, "applicationRoles": { "size": "", "items": "" } }
Parameter | Description |
---|---|
Account ID | Specify the assignee's account ID. Account ID uniquely identifies the user across all Atlassian products and you can retrieve it from the Search Users action.
NOTE:To remove all assignees and mark the ticket unassigned, specify |
Ticket ID | Specify the unique ID associated with each ticket. |
The output contains the following populated JSON schema:
The output contains a non-dictionary value.
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-144 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
File or Attachment IRI | Specify the file to add as an attachment to the specified Jira ticket. You can select from the following options:
|
The output contains the following populated JSON schema:
{ "data": [ { "id": "", "self": "", "size": "", "author": { "id": "", "self": "", "active": "", "timeZone": "", "accountId": "", "avatarUrls": { "16x16": "", "24x24": "", "32x32": "", "48x48": "" }, "accountType": "", "displayName": "", "emailAddress": "" }, "content": "", "created": "", "filename": "" } ], "status": "", "_status": "", "message": "", "operation": "", "request_id": "" }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-144 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
URL | Specify the URL of the issue to add to the specified Jira ticket. |
Title | Specify the title to add for the specified issue that you are adding to the Jira ticket. |
The output contains the following populated JSON schema:
{ "id": "", "self": "" }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-144 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
Comment | Specify the comment to add to an existing Jira ticket. |
The output contains the following populated JSON schema:
{ "body": "", "id": "", "updated": "", "self": "", "created": "", "author": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" }, "updateAuthor": { "avatarUrls": { "48x48": "", "24x24": "", "32x32": "", "16x16": "" }, "timeZone": "", "emailAddress": "", "self": "", "active": "", "displayName": "", "name": "", "key": "", "accountId": "" } }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-000 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
Start At | (Optional) Specify the starting index for retrieving tickets from Jira. By default, this is set to 0 . |
Max Results | (Optional) Specify the maximum number of tickets that this operation should return. By default, this is set to 50 . |
OrderBy | Select the order in which to sort the tickets. You can select from the following options:
|
The output contains the following populated JSON schema:
{ "startAt": "", "maxResults": "", "total": "", "comments": [ { "self": "", "id": "", "author": { "self": "", "id": "", "accountId": "", "emailAddress": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "displayName": "", "active": "", "timeZone": "", "accountType": "" }, "body": "", "updateAuthor": { "self": "", "id": "", "accountId": "", "emailAddress": "", "avatarUrls": { "48x48": "", "24x24": "", "16x16": "", "32x32": "" }, "displayName": "", "active": "", "timeZone": "", "accountType": "" }, "created": "", "updated": "", "jsdPublic": "" } ] }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-000 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
Status | Specify the status to set for an existing Jira ticket. You can add status such as To Do , In Progress , or Done . |
The output contains the following populated JSON schema:
{ "message": "", "status": "" }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-000 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
Project Key | Specify the unique project ID that represents the project under which to update the Jira ticket. |
Summary | Specify the summary or heading of the ticket to update on your configured Jira server. |
Comment | Specify the comment to add to an existing Jira ticket. |
Priority | (Optional) Specify the priority to update for the Jira ticket. You can specify one of the following priorities:
|
Description | (Optional) Specify the description to add to the Jira ticket when you are updating it on your configured Jira server. |
Status | Specify the status to set for an existing Jira ticket. You can add status such as To Do , In Progress , or Done . |
Other Fields | (Optional) Specify fields such as Reporter, Assignee, or Components to set while updating the ticket. For example:
{ "reporter": { "name": "admin" }, "assignee": { "name": "admin" }, "components": [ { "name": "Intranet" } ] } |
The output contains the following populated JSON schema:
{ "message": "", "status": "" }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-000 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
FortiSOAR Username | Specify the username of the FortiSOAR instance where you want to update the Jira ticket. |
FortiSOAR Password | Specify the password of the FortiSOAR instance where you want to update the Jira ticket. |
The output contains the following populated JSON schema:
{ "name": "", "@id": "", "jiraComment": "", "jiraPriority": "", "jiraStatus": "", "description": "" }
Parameter | Description |
---|---|
Ticket ID | Specify the unique ID associated with each ticket to retrieve from your configured Jira server. You can enter the ticket ID directly, such as JIR-000 , or use dynamic variables in this field to enter the ticket ID in the Jinja format {{vars.result.data.key}} . |
Delete Subtasks | Select this option, i.e., set it to true to delete subtasks associated with the Jira ticket. If the ticket has subtasks then you must select this option to successfully delete the ticket from your configured Jira server. |
The output contains the following populated JSON schema:
{ "message": "", "status": "" }
The Sample - Jira - 1.2.0
playbook collection comes bundled with the Jira connector. These playbooks contain steps using which you can perform all supported actions. You can see bundled playbooks in the Automation > Playbooks section in FortiSOAR™ after importing the Jira connector.
Note: If you are planning to use any of the sample playbooks in your environment, ensure that you clone those playbooks and move them to a different collection, since the sample playbook collection gets deleted during connector upgrade and delete.