# Silessian Software apps

Below you can find documentation for all Silessian Software apps.

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>PlanApply for Jira Cloud</td><td></td><td></td><td><a href="/spaces/n7nTpq2xv8EGbzULdTCb">/spaces/n7nTpq2xv8EGbzULdTCb</a></td></tr><tr><td>PlanApply for Confluence Cloud</td><td></td><td></td><td><a href="/spaces/6TeRg49O0wz67liixMA1">/spaces/6TeRg49O0wz67liixMA1</a></td></tr><tr><td>PlanApply for Jira Bitbucket</td><td></td><td></td><td><a href="/spaces/wosh27HsvZ5bhpRZJX0q">/spaces/wosh27HsvZ5bhpRZJX0q</a></td></tr></tbody></table>

🔐 [Privacy Policy](/privacy-policy)

🛡️ [Trust Center](https://marketplace.atlassian.com/)

🛒 [Marketplace page](https://marketplace.atlassian.com)


# Privacy Policy


# About PlanApply for Jira

Documentation of PlanApply for Jira Cloud

PlanApply for Jira Cloud is an app that allows you to create **configuration as a code** powered by Terraform. The name is coming from the two most important actions that you can perform in Terraform: Plan and Apply.

For Plan operation you can utilise two ways of working:

* with a plain code, using Terraform language (accessible only to admins, as it requires basic Terraform knowledge and might not be handy for business users)
* with an interactive diagram, powered by Reactflow, that helps you visualize, describe and link all relations you need to speed up thought-to-plan conversion (designed to be used by everyone)

Apply is a risky operation, so it's only available to admins! To help admins in the process of transformation from plan to deployment, there a few features:

* Plans created with interactive diagrams can be transformed from visual form into Terraform code.
* You can utilize terraform commands to verify written configuration before applying it to environment
* You can use AI assistant to suggest configuration fragments by a prompt

\
[Checkout features ->](/planapply-for-jira-cloud/introduction/features-overview)

[Check use cases ->](/planapply-for-jira-cloud/introduction/use-cases)

[See how we organize data ->](/planapply-for-jira-cloud/introduction/data-structure-and-processing)

[Checkout workflow from plan to apply ->](/planapply-for-jira-cloud/introduction/workflow)


# Features overview

* Interactive diagram
  * Import existing resources
  * Use visual elements for better understanding of data dependencies
  * Export / Import diagrams
  * Send plans and that can be easily transformed to Terraform code
* Terraform console
  * Create multiple files in workspace
  * Easily import existing resources
  * Use Terraform code generation
  * Run Terraform commands against entire workspace
  * Transform files between JSON/Terraform representation
* Plan submission and collaboration
  * Keep track of your changes inside pre-assigned project
  * Exchange informations with deployment team
  * Collaborate on plan with other users and deployment team
* Plan transformation (Diagram -> Terraform code)
  * Speed up boiler plate code creation with JSON -> Terraform conversion
* Quick deployments
  * Verify changes on different environment and use features of Terraform to easily apply required changes in your system
* Store configuration in remote Git repository
  * Allow version control and pull request functionality in your configurations from your company's repo
* Perform compliance verification
  * Perform manual verification of configuration stored in code
  * Write Terraform tests to verify&#x20;


# Use cases

* Speed up the process of change planning and reduce unnecessary questions
  * See what you can change prior to submission
  * Link and describe what you need
  * Checkout templates to re-use most common change patterns
* Perform complex deployments more easily
  * With configuration as a code, you can design, import and re-deploy configuration between completely different environments
  * Instead of days of  manual configuration, apply changes with a single click
* Configuration insights
  * You can simply import multiple resources and verify their configuration and find all relevant informations you need
  * Use AI to provide insights and summaries about provided configuration
* Compliance
  * Write test to verify compliance of your configuration


# Data structure and processing

PlanApply for Jira Cloud organize data following way:

* Workspaces
  * They are used to contain files with configuration code in different formats.
  * If using Terraform commands, their are applied against entire workspace
  * You can push/pull data from workspace into desired Git repository for better usability
* Plans
  * Plans are used to create and edit interactive diagrams with a planner. Their original form is JSON file, linked with given plan. It can be reedited in interactive diagram.
  * Plans can be transformed and linked into workspaces. With that JSON file is written into workspace. It can be later transformed in Terraform console into pure Terraform code.
  * Plans can be exported / imported in JSON form
* Files
  * Files store all sort of text data (Terraform, JSON, logs, outputs, etc.) and they are linked with a single workspace.
  * You can rename, edit, create and remove files from Terraform Console
  * If file format allows it, you can transform it  JSON <- -> Terraform in Terraform Console


# Workflow

PlanApply is designed to be used independently by admins and regular users.

Regular users

* Planner / Explorer is designed to be used by business users, with a little knowledge about the system.&#x20;
* It can be used to design required configuration changes by a single users or in collaboration with others
* Users can submit their plan, which results in creation of Jira issue and plan. With that, admins can review, exchange conversation, give feedback and revoke or apply changes
* Users can watch submission status from plan perspective as well as from related issue view

Admins

* Admins can use planner described above to speed up their work process as well
* Can utilize plain Terraform code and commands
  * Can re-verify Terraform configuration by re-creating diagram based on the code itself. This will help to assess if provided configuration matches the requested expectations.


# Get started - app configuration

Initial app configuration

{% hint style="warning" %}
App configuration is required if you plan to use all app functionalities, including:

* Remote repositories
* Terraform Console
  * Terraform toolbox
  * Transform toolbox
  * Canvas
* Global page - Planner -> import resources
* Global page - Planner -> plan submission
  {% endhint %}


# 1. Client configuration

External client registration

### App behaviour when client is not registered

<figure><img src="/files/gAf6gq8ZR78uIkxEgZor" alt=""><figcaption><p>Global page - Designer - Import resources is disabled</p></figcaption></figure>

<figure><img src="/files/gGBtsOeGLKMVnbcb8xMb" alt=""><figcaption><p>Admin page - Remote repositories and AI Assistant page are not accessible</p></figcaption></figure>

<figure><img src="/files/6nlQeVRy3EttorQ1yxZo" alt=""><figcaption><p>Admin page - Terraform Console - Terraform &#x26; Transform tabs are not available. Canvas button is not visible.</p></figcaption></figure>

### Registering new client

If you plan to use all features, you have to complete external client registration. Please follow instructions below:

1. Click on register client wait until process is complete.&#x20;

<figure><img src="/files/fiWa7bYQpr04UBoMqUh6" alt=""><figcaption></figcaption></figure>

2. After process is complete, following information should be present on screen.

<figure><img src="/files/DiHUBwOrhOXqRzrC5i4M" alt=""><figcaption></figcaption></figure>

### Unregistering client

If you want to disable external features processing and remove data from external system, you should follow steps below:

<figure><img src="/files/o95xCTHyfVN5gpNs1ePD" alt=""><figcaption></figcaption></figure>

After process is complete, you should see following screen.

<figure><img src="/files/fiWa7bYQpr04UBoMqUh6" alt=""><figcaption></figcaption></figure>


# 2. Submission and provider configuration

Submission and provider settings

Submission is a process of creating a Jira ticket in assigned project. With that deployment team is getting notified about new plan that should be reviewed and applied/revoked.

Submission have following settings:

1. Project: any Jira project where You want to create tickets related to plans. When plan will be submitted by user, new issues will appear in the project.
2. Issue type: Issue type, available inside selected project. Submissions will have selected issue types.
3. Label: Optionally, you can assign label to tickets created as a plan submission.
4. Additional config: Some projects requires additional configuration of fields. If during the tests, you will see error messages about additional fields not being set, it's a signal that you should assign some values in JSON form in the box below.
5. Plan id custom field should be a simple text file, that will store information about plan ID. Value is set when submitting a plan. Remember that field should be added to proper screens in selected project.
6. This button creates new custom field with proper type and name "PlanApply Plan ID". You can later select this field in option mentioned in 5. Remember that field should be added to proper screens in selected project.
7. Settings tools:
   1. Use "Save / Update" to save settings from left side of configuration.
   2. Use "Test" to verify if issue can be created properly.
   3. Use "Delete" to remove saved settings entirely.
8. You will see error / success messages displayed here from Test operation. It is useful in case of debug. If there is a field mentioned as required but not set, apply it to "Additional / Required configuration (JSON format)"
9. Provider settings. They are used to unlock "Import resources" option in global page - Designer. \
   Username: username / email\
   Token: Personal Access Token created for given account.\
   :point\_up:<mark style="color:red;">Desginer will use provided credentials to import resources. Permissions and data visible as an outcome of this action is inherited from provided account.</mark>
10. Use "Save / Update" to store credentials and "Delete" to remove them. Removing will disable Designer feature again.&#x20;

{% hint style="success" %}
Provider configuration is stored in Atlassian Forge secret storage. If you want to rotate password, simply replace and save it.
{% endhint %}

{% hint style="info" %}
You don't have to store credentials in plain text inside Terraform scripts. You can select option "Use public provider" in Terraform console to append a volatile file with stored credentials during Terraform operations.

This temporary file will not be stored or returned as the result of the operation and used only to append Terraform provider configuration.
{% endhint %}

<figure><img src="/files/c8tHbXwIOIRIsv2fDyP8" alt=""><figcaption></figcaption></figure>


# 3. Remote repositories

Remote git repositories

You can connect given workspace with Git repository. This page allows you to perform the most important operations:

* Save / Update / Delete settings per workspace
* Assign git clone command. Git clone command is used to clone entire remote repository to temporary virtual environment and perform other git operations like: status / add / commit / etc.

Example git clone command format:

{% hint style="info" %}
Git clone command is stored inside Atlassian App Secret storage.

If you need to rotate the token used in string below, replace the entire string and save it again.
{% endhint %}

```
git clone https://USER_NAME:APP_TOKEN@bitbucket.org/ORG_NAME/REPO_NAME.git
```

1. Select workspace on which you will perform git operation or you want to save / update / delete connection settings.
2. Git clone command. Must contain username and token. E.g. git clone <https://USER\\_NAME:APP\\_TOKEN@bitbucket.org/ORG\\_NAME/REPO\\_NAME.git>
3. Branch name that will be connected with given workspace.
4. Save or update git connection settings related to selected workspace. After this workspace will have "Connected" tag in workspace browser.
5. Delete git connection settings related to selected workspace. After this workspace will have "Not connected" tag in workspace browser.
6. Based on provider connection and branch setup, repository content will be downloaded into workspace replacing all files.
7. Based on provider connection and branch setup, repository content will be uploaded into Git repository replacing all files. You can add commit message during the operation.
8. Based on provider connection and branch setup, workspace content will be compared by 'git status' command with remote repository.
9. Git operation results will be appearing here.

<figure><img src="/files/o54O72yxf7IiRm0IamDN" alt=""><figcaption></figcaption></figure>


# Designer - getting started

Designer  allows user without technical knowledge to create plans and change requests using interactive diagram and visual elements. Created plans can be browsed, shared and re-edited.

To access Designer page:

1. Go to main Jira navigation
2. Click on Apps
3. Select PlanApply - Designer
4. You will be redirected to welcome page visible below.

<figure><img src="/files/chRTbZz2exFGjXvp7Iop" alt=""><figcaption></figcaption></figure>


# Designer

Designer is a tool that utilise visual elements to build configuration changes. Later, after submission, they can be easily sent to deployment team and transformed into executable Terraform code.&#x20;

{% hint style="success" %}
Designer do not require any specialized knowledge about Jira configuration or Terraform
{% endhint %}

On the UI visible below, we can specify two main sections:

* Upper toolbox. It can be expanded / collapsed to extened diagram area.
* Diagram area. It is used to interact with configuration elements in visual form.

<figure><img src="/files/cgHzTvgp99PF61r99Ynq" alt=""><figcaption></figcaption></figure>


# Toolbox section

Toolbox section contains all features necessary to efficiently work and collaborate on plan. Please read detailed description of all features in following articles.


# Toolbox

{% hint style="warning" %}
Importing details is conducted on behalf of account setup in Provider settings configuration
{% endhint %}

{% hint style="info" %}
Resources available for importing for given user are restricted with following permissions:

Resources listing fetched with "asApp" permission:

* all visible in the list except listed below

Resources listing fetched with "asUser" permission:

* dashboards
* projects
* filters
* issue security schemes
* project components
* workflows
  {% endhint %}

### Importing resources

Toolbox allows user to browse and import details about system elements. Follow steps below to import resource into diagram:

<figure><img src="/files/yACE4eEFYaq8bmEY8dI1" alt="" width="375"><figcaption><p>Select resource type and click on button to load resources.</p></figcaption></figure>

<figure><img src="/files/126IjkRZrrpDJRPt56DD" alt="" width="375"><figcaption><p>Browse list of available resources. Example of resource visible "asApp".<br> They are restricted by asApp and asUser permissions.</p></figcaption></figure>

<figure><img src="/files/dC3qd4uXGUaPED7ChZtX" alt="" width="375"><figcaption><p>Example of resources visible "asUser".</p></figcaption></figure>

<figure><img src="/files/bj1ZpnB4b3uykNXlpQvj" alt="" width="375"><figcaption><p>Result of resource import</p></figcaption></figure>

<figure><img src="/files/ChTXV9NdZhPwZawOmqpx" alt="" width="375"><figcaption><p>Resource details are imported and associated with element on diagram.</p></figcaption></figure>


# Templates

Templates provider easy start into Designer features. Choose from following templates to explore possibilities:

* Sample project with linked configuration
* Sample screen
* Sample filter
* Sample dashboard

{% hint style="info" %}
We are actively working on providing more complex tutorials and examples.
{% endhint %}


# Import / Export

You can export and import current plan.

{% hint style="warning" %}
Import will overwrite entire configuration.!
{% endhint %}

{% hint style="info" %}
Export will trigger download of file containing metadata about the diagram and components details.
{% endhint %}

<figure><img src="/files/09dPzv39ze1XokZA51v3" alt=""><figcaption></figcaption></figure>


# Plan details

Use plan details to describe the plan:

* Plan summary - short description of change
* Tag - Create or re-use tags to describe category of change
* Plan description - Longer explanation of plan. It should contain all details for other collaborators and deployment team to understand the plan.

<figure><img src="/files/1ClnYM73FqKcdxRex9dG" alt=""><figcaption></figcaption></figure>


# Submission

Plan submission is a process of creating a Jira issue associated with given plan. Following details are used in ticket creation:

* Plan summary == Issue summary
* Plan details == Issue details
* Provider settings (setup by site admins) = additional details visible in issue

To submit a plan, follow steps below:

1. Click on "Submit for review"
2. Confirm submission and wait until operation is complete.
3. If process is completed successfully, new issue key should appear on the screen. It is a link to associated issue.
4. Close dialog.
5. Select submission tab. You can check here:
   1. Link to associated issue.
   2. Submission progress. It can be changed only by deployment team.

<figure><img src="/files/D1O7aSPgFyG0m0eZqC5J" alt=""><figcaption><p>Click on submit for review to open submission dialog.</p></figcaption></figure>

<figure><img src="/files/QXgWufwfVDCURO6p1ONw" alt=""><figcaption><p>Confirm plan submission.</p></figcaption></figure>

<figure><img src="/files/JkhKV7IfFDvIYejcVlvQ" alt=""><figcaption><p>If submission is successfull, you will see message containing issue key.</p></figcaption></figure>

<figure><img src="/files/buZ5mdVPnbHvlxVRIQ46" alt=""><figcaption><p>Submission progress.</p></figcaption></figure>


# Collaboration

Collaboration is possible in plan only for users with Editor permissions. Reader are only allowed to view details and clone plans. Shared plans are visible in plan browser.

<figure><img src="/files/Ce6XSZALXvQuonlLC25W" alt="" width="563"><figcaption><p>Share panel. You can search users and set  editing level. Click Add to confirm.</p></figcaption></figure>

<figure><img src="/files/puxItiX7k1xdxtzxYaha" alt="" width="563"><figcaption><p>Collaboration tab contains a list of all plan collaborators. You can modify permissions or remove collaborators.</p></figcaption></figure>


# Diagram area

Diagram is an interactive component that allows to visualize and interact with configuration elements. Together with component details, elements connections and plan details you can fully express your plan in the most descriptive way for deployment team and other collaborators.


# Diagram actions

Diagram area allows following operations.

* You can add new components (details in next page)
* You can remove components.
* Link components.
* Components linking is a submit of validation (based on possible connections in Jira)
* You can bulk append possible connectable components.
* You can order diagram vertically / horizontally
* You can save & restore diagram. Diagram will be cached in local browser memory.
* You can remove all elements from diagram area
* Update component details with related Jira configurations.

<figure><img src="/files/07pC7fcpFuuwpEcVDt0d" alt=""><figcaption><p>Adding new component</p></figcaption></figure>

<figure><img src="/files/qcI3QjlAFure71y3YqIw" alt=""><figcaption><p>Possible options. You can duplicate, remove or append all possible connections to selected component.</p></figcaption></figure>

<figure><img src="/files/DTGSEjAsfsHfcYOZEKyv" alt=""><figcaption><p>Bulk adding all possible connections.</p></figcaption></figure>

<figure><img src="/files/TAPS2jOz3lIyopajSpRL" alt=""><figcaption><p>Ordering components.</p></figcaption></figure>

<figure><img src="/files/JdbiMWVJM9gECPONQ3hB" alt=""><figcaption><p>Selected components are highlighted.</p></figcaption></figure>

<figure><img src="/files/p9NaEMkeyCVTVbW8PJjU" alt=""><figcaption><p>Resource details are displayed on left side. They contain Jira-related configurations </p></figcaption></figure>


# Importing objects

Importing objects is described here:&#x20;

{% content-ref url="/pages/8LXwZIWSPnSXHRocn07L" %}
[Toolbox](/planapply-for-jira-cloud/global-features/designer/toolbox-section/toolbox)
{% endcontent-ref %}

Imported objects can be updated, link with other elements.


# Adding new elements

On the right side of diagram there is a list of possible resources. You can drag and drop it into a diagram and operate on selected, newly added element.

<figure><img src="/files/pVLoJRKTKywWqdYRK9PV" alt=""><figcaption><p>Drag and drop of new resource into the diagram.</p></figcaption></figure>


# Updating element details

Resource details, located on the left side of diagram allows user to update Jira configuration details of imported or new components.

You can also use variable starting with "${atlcloudjira..." to link source and target components. It will provide better description of change for deployment team.

Resource details are using pre-populated select boxes that are fetching data directly from instance. With that, business users don't have to be aware of true resource IDs and just look exactly for configuration items they want. In example below, there is a project searcher used in one of the attributes of Filter resource.

<figure><img src="/files/gggRrk94fHu98qsvqM16" alt="" width="563"><figcaption><p>Resource details view. It contain searchers that helps you find the right components in instance.</p></figcaption></figure>


# Linking objects

Each component contain two handlers:

* Source - it's a starting place or arrow indicating a relation of two components
* Target - it's a destination place of components' relation

### Linking objects on diagram

Linking objects is a subject of validation. Validation is based on possible connections that makes sense and are achievable in Jira configuration.

Below there is an example of possible and invalid connection.&#x20;

> *It is reasonable to connect custom field (it's attributes like name or ID) inside Filter e.g. insdie used JQL.*\
> *However it doesn't make sense or bring any value, to embed custom field attributes inside attributes of issue type.*

<figure><img src="/files/ck6M6u4yget1m4zlz4SZ" alt=""><figcaption><p>Invalid connection.</p></figcaption></figure>

<figure><img src="/files/AA98xP6vO2rRkFHVH94P" alt=""><figcaption><p>Possible connection.</p></figcaption></figure>

### Linking objects inside attributes

Linking objects on diagram, doesn't fully explains the realation between two components. To provide more details, you can optionally embed variables inside target compone. wut details.&#x20;

1. During a linking process, you will see similar popup message.
2. Click on desired attribute of source component. It will copy to clipboard a variable indicating source attribute value.
3. Paste value inside chosen attribute of linked target component

<figure><img src="/files/zODpZiEPsP9JVrUJfjXh" alt=""><figcaption><p>Copy source attribute variable into clipboard.</p></figcaption></figure>

4. Paste copied value inside chosen attribute of target component. The example linked attribute value will look like this:

JQL attribute:

```
${atlcloudjira_customfield.MyNewCustomField.id} = "Some value" and project = ABC ORDER BY Rank ASC
```

<figure><img src="/files/k6fQAYlKBKJNO9yJyfgc" alt=""><figcaption><p>Now properties of source and target components are linked with variable</p></figcaption></figure>

5. Update component and save plan. Deployment team will now know exactly what was your true intention behind linking of two components.


# Plan browser

To access plan browser select "Explore" option in starting page.

Plan browser allows to load all plans that:

* are owned by a user
* are shared with a user (as editor or reader)

Plans are divided into two sections.&#x20;

<figure><img src="/files/dU0PXtAkcbGF0kwA2ta7" alt=""><figcaption><p>Plan browser view</p></figcaption></figure>

### My plans

Inside "My plans" sections, all visible plans are owned by user. User can perform all listed operations. User perform operations such as:

<figure><img src="/files/EWU5lVv6fqIJmqB3QQ5I" alt="" width="375"><figcaption><p>Plan operations available to owner</p></figcaption></figure>

* Details - This will open dialog visible below. It contains short list of informations about the plan
* Open - It will open plan for re-edition in Designer
* Clone - It will copy the plan.&#x20;
* Delete - It will remove the plan

<figure><img src="/files/XElYnmCcz9aUDvicHIGn" alt="" width="375"><figcaption><p>Plan details</p></figcaption></figure>

<figure><img src="/files/xeh7DddtPNvy8iAV2NC8" alt="" width="375"><figcaption><p>Cloning a plan</p></figcaption></figure>

<figure><img src="/files/z2Ryc4dxXGteyLRtmkdG" alt="" width="375"><figcaption><p>Removing a plan</p></figcaption></figure>

### Shared plans

<figure><img src="/files/YFi6WzAzdXWCpQN2yCIk" alt=""><figcaption></figcaption></figure>

Shared plans are restricted with two types of access level:

* Reader -  read can only see plan details, vote and clone plan.
* Editor - can perform operations similar to owner, including cloning, editing, adding new collaborators. Editor can't remove owner

Options available to Editor:

<figure><img src="/files/ydU7Ku7LDvM91RGo2ebw" alt="" width="375"><figcaption></figcaption></figure>

Options available to Reader and voting process:

<figure><img src="/files/vKaV3fpS4Q812zPehjYN" alt="" width="375"><figcaption><p>Options available to Reader</p></figcaption></figure>

<figure><img src="/files/p0t2wIEhr9IGNFPvLwhH" alt="" width="182"><figcaption><p>Result of voting. Votes can be + / -. Their badges will take green or red color</p></figcaption></figure>


# Workspaces

Workspace browser

Workspace page accessible to site admins, allows to manage workspaces.&#x20;

What is a workspace?

* Workspace is an data structure that contains files (terraform scripts, json files, etc.).
* Workspace can have plan associated with it. With this, plan data is automatically transferred into workspace and saved as a JSON file.
* Workspaces can also be connected with remote Git repositories.
* Terraform and Git operations processed externally are performed against entire workspaces. They are treated as virtual "folders" containing files.
* Workspaces can be selected. Terraform console and Execution logs pages operates on selected workspaces.

1. In this box you can enter a name of new workspace and create it with "New workspace" button. After that, the list will refresh and you will see new workspaces appended. Workspaces are empty when created. Name of the workspace is presented in the list.
2. Workspace list contains all workspaces existing in given instance.
3. Select workspace operation marks it as a currently selected workspace. This is important for Terraform console and Execution logs page, as they operate on selected workspace data. When workspace is selected, green icon appears before workspace name.
4. You can rename workspace, by typing new name in dialog form and saving it.
5. You can view files stored in given workspace. Files are stored in Atlassian Forge app storage.
6. You can delete workspace and all it's files. Confirm the operation in dialog.

{% hint style="danger" %}
Deleting a workspace will remove all files stored inside it!
{% endhint %}

{% hint style="info" %}
If you delete a workspace that contains associated plan, it will not remove the plan! You will see in plan browser, that workspace association was removed.&#x20;
{% endhint %}

7. Label "Remote / Not connected" present information is given workspace is associated with remote Git repository. New workspaces are not connected by default.
8. This workspace description shows:
   1. Generic workspace ID that helps to debug and identify given workspace. Workspace ID can be present on plan browser if it's associated with plan
   2. Associated plan ID is present if workspace was created from plan browser. Otherwise, it will be set to None.

<figure><img src="/files/DHexai8cw8wp8rT7Lkr8" alt=""><figcaption></figcaption></figure>


# Remote repositories

{% hint style="info" %}
Remote workspace configuration is described under link below&#x20;
{% endhint %}

{% content-ref url="/pages/WQrSz3vXnXEaTX6FtrHv" %}
[3. Remote repositories](/planapply-for-jira-cloud/configuration/get-started-app-configuration/3.-remote-repositories)
{% endcontent-ref %}

Remote repositories are useful if you want to store and version your configuration inside Git repository.

### Pull operation

Pull operation will replace all data inside given workspace. Files would be added / removed. By clicking "Pull" button inside dialog you are confirming the operation.&#x20;

Remote processor is doing following operation:

1. Git clone (based on provided connection configuration and branch)
2. Overwrite workspace files (add / update / remove)
3. Upload updated files to Forge storage
4. Destroy virtual environment

<figure><img src="/files/gTiFBH3NsYGxivR0nUQe" alt=""><figcaption></figcaption></figure>

### Push operation

Push operation will replace all data inside given repository. Files would be added / removed. Remote processor is doing following operation:

1. Git clone (based on provided connection configuration and branch)
2. Overwrite data with workspace files (add / update / remove)
3. Git add \*
4. Git commit -m "Provided message"
5. Git push (based on provided connection configuration and branch)
6. Destroy virtual environment

Type commit message that you want to use to push into repo. By clicking "Push" button inside dialog you are confirming the operation.

<figure><img src="/files/olQDj4fLHaIYR2M56yiI" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/S4LBKhYS8BIVz2uiuGXW" alt=""><figcaption></figcaption></figure>

Status operation

Status operation will compare repository and workspace data. Remote processor is doing following operation:

1. Git clone (based on provided connection configuration and branch)
2. Overwrite data with workspace files (add / update / remove)
3. Git status
4. Send results to UI
5. Destroy virtual environment

<figure><img src="/files/ycqsTuBPhZRUqKn2MCjg" alt=""><figcaption></figcaption></figure>


# Plan browser

### Main view

Plan browser allows you to manage all plans created by users.

1. Load plans button will load all plans inside instance
2. Filter button will filter out results based on options provided above (point 3.)
3. Filter options will help to find plans.
4. Plans are dispalyed as rows. Each row contains the most important informations that will help to uniquely identify given plan. More details are available under "More" button options.

<figure><img src="/files/9EXiGZakf8Z0AHMkI1cI" alt=""><figcaption></figcaption></figure>

### Options

Options are dependent on plan state. Inside you can choose from:

1. Details - details will present all information including readonly diagram for given plan.
2. Create workspace from plan - this option is available if plan do not have any associated workspaces. If you click on this, new workspace is created and plan is associated with it. Association is visible on both plan browser and workspaces page. **You can choose any workspace name. Visible name is just a suggestion.**

<figure><img src="/files/phufT9ciicv3VEiB3zAF" alt=""><figcaption><p>Creating workspace from plan.</p></figcaption></figure>

1. Select workspace - if plan have associated workspace, instead of searching workspace inside Workspace page, you can click on this button to select associated workspace.
2. Delete - removes a plan. Removed plan disappears from user view as well.

{% hint style="warning" %}

* Associated workspace is NOT removed with this operation.
* Associated issue is NOT removed with this operation.
  {% endhint %}

<figure><img src="/files/U86f785YFP1GTz8fEDB0" alt="" width="188"><figcaption><p>Example plan details</p></figcaption></figure>

<figure><img src="/files/vE6olqNAz6UJyGdTlN48" alt=""><figcaption><p>Example workspace &#x26; plan association visible in Workspaces page.</p></figcaption></figure>

<figure><img src="/files/Axl6nPR1th0mSo1ji8Un" alt="" width="188"><figcaption><p>Options for plans that do not have any associated workspaces</p></figcaption></figure>

<figure><img src="/files/j5G1YvwGeIdAohu4wwdz" alt="" width="188"><figcaption><p>Options for plans that do have associated workspaces</p></figcaption></figure>

<figure><img src="/files/XMAzbZCAboIqvjQ5G43V" alt=""><figcaption><p>Removing a plan</p></figcaption></figure>


# Terraform console

Terraform console features

### What is a Terraform console?

Terraform console is a main page where you can interact with Terraform provider.  It contains all tools necessary to write, test and execute Terraform commands. It is also equipped with Canvas, which can transform and ingest Terraform code into interactive diagram and backwards.

Your requests are handled inside external, temporary environment, where Terraform code is executed. What is happening in the background:

1. You current changes are saved for each file. You will see popup messages for this action.
2. All updated files from workspace are transferred into external system. Together with them, request contains:
   1. command for the system
   2. new generic job ID
   3. additional parameters required to properly handle your request are sent (like callback url, JWT token, etc)
3. You will start getting new responses in Execution logs tab. It is external system reporting current progress of your operation.
4. After the job is complete, it is recommended yet sometimes not needed to reload the workspace. It will help to properly refresh all data, sent back from external processor into your workspace.

&#x20;


# Workspace tab

### UI walkthrough

1. Selected workspace name
2. Reload workspace
3. Text editor mode
4. Canvas mode - allows to visualize data relations and interact with plan.
5. Select workspace files and load them into text editor by clicking "Open in editor"
6. Download selected files. Name and format is preserved.
7. Save all changes made in opened files.
8. Create new file. Enter new file name and click on Create.
9. Rename selected file. Enter new file name and click on Rename.
10. Select tab and click Beautify. If it will be possible, files with JSON format will be pretty printed. If JSON format is incorrect, process will result in error popup message.
11. Delete selected files. You need to confirm operation.
12. Execution logs displays information about ongoing external job results.&#x20;

<figure><img src="/files/GyJrmBFZ3G8GCWO99tz9" alt=""><figcaption><p>Terraform console UI</p></figcaption></figure>

<figure><img src="/files/QNLbSdCA20WH2TOqJd17" alt=""><figcaption><p>Create new file dialog.</p></figcaption></figure>

<figure><img src="/files/pKKKZE01Fc7xKXi113n8" alt=""><figcaption><p>Files selection. After selecting files you can open or delete files.</p></figcaption></figure>

<figure><img src="/files/bB8jVyGuDxOZXug0lzLd" alt=""><figcaption><p>Selected files are opened in tabs. Tabs can be closed. To rename or beautify file, please select proper tab.</p></figcaption></figure>

<figure><img src="/files/TJHnhHX6adjRQimVrIGJ" alt=""><figcaption><p>Renaming a file. Please enter new name and cofnirm by clicking Rename button.</p></figcaption></figure>

<figure><img src="/files/rOrfv5frTCkclPBQTwt4" alt=""><figcaption><p>Confirm files deletation.</p></figcaption></figure>


# Toolbox tab

Toolbox is used to import or add code fragments into selected files.

To add system resources as import:

1. Select one of "Jira - resources" type.
2. Click on "Load system resources" button.
3. Select from 2nd list resources you want to import
4. Select opened file tab and click on "Add as import" to append import code fragments.

To add other code fragments:

1. Select source or Terraform code blocks.
2. Select opened file tab and click on "Add as sketch".

<figure><img src="/files/TeKaDKmZZjMtnJZXYInj" alt=""><figcaption><p>Select resource type and click on Load system resources button</p></figcaption></figure>

<figure><img src="/files/0yo5ema4caLjB7UEN6Ya" alt=""><figcaption><p>You will see a list of given resources that can be imported.</p></figcaption></figure>

<figure><img src="/files/kHZkoLunx7e5f1icgpsW" alt=""><figcaption><p>Select a file where you want to append import code fragments for given resurces.</p></figcaption></figure>

<figure><img src="/files/omNQq9pQkuVaA8iXkX91" alt=""><figcaption><p>Some of available resource types have "Add sketch" option. It will append code fragments into selected, opened file</p></figcaption></figure>


# Terraform tab

Terraform tab inputs and buttons that allows to execute Terraform operation on entire workspace files.

On the UI we can see:

1. Plan button - it executes "terraform plan -no-color" operation on entire workspace
2. Apply button - it executes "terraform apply -auto-approve -no-color" operation on entire workspace.
3. Input and button "Run own command" - it allows to execute any terraform command.&#x20;

{% hint style="warning" %}
Only Terraform operations are allowed. Arguments pointing to files might not be properly processed due to a way that request are being processed.
{% endhint %}

4. Generate config button - helper function that generate configuration code with a help of Terraform code generation feature.
5. Set TF\_LOG=DEBUG - this checkbox is equivalent to setting environment variable TF\_LOG=DEBUG.
6. *"Use public provider"* checkbox - When checked, you don't have to append provider configuration block in plain text inside Terraform scripts. During the Terraform operation (plan/apply/etc) app will append volatile file containing public provider credentials. This file will not be stored or returned from the operations.
7. Execution logs tab - it is used to display feedback messages coming from external processor.

<figure><img src="/files/IJDdgGG5Qe2PCONXLZ7X" alt=""><figcaption></figcaption></figure>


# Generate config

{% hint style="success" %}
If you don't want to append provider block with credentials inside Terraform script files, you can check  "Use public provider".\
App will append volatile file with provider block and public provider credentials. This file will not be stored or returned as the result of any operation.&#x20;
{% endhint %}

{% hint style="info" %}
If you are not using "Public provider" credentials, it is required to add two Terraform code blocks:

* terraform
  * specify atlcloudjira provider
* provider
  * inside provider, specify credentials used to authenticate Terraform provider in given instance
    {% endhint %}

To generate configuration code based on existing resources, please do following.

1. Go to Toolbox tab
2. Select all required resources
3. Add them as import to selected terraform file.
4. Click on "Generate config" to await process to be completed.
5. Reload workspace to verify that new file was created.

<figure><img src="/files/SYZkhTPkSJeK59EqwWVw" alt=""><figcaption><p>Click on helper button to generate configuration for imports.</p></figcaption></figure>

<figure><img src="/files/sgkntrTheMmXHJCwhNXu" alt=""><figcaption><p>Type a name for generated configuration.</p></figcaption></figure>

<figure><img src="/files/YR7vwshcWOVXG3wrLvik" alt=""><figcaption><p>Code generation result is visible in Execution logs tab.</p></figcaption></figure>

<figure><img src="/files/neOa0Na1A7dUHeUJS4Gu" alt=""><figcaption><p>Reload workspace and check newly generated Terraform file.</p></figcaption></figure>


# Plan

{% hint style="success" %}
If you don't want to append provider block with credentials inside Terraform script files, you can check  "Use public provider".\
App will append volatile file with provider block and public provider credentials. This file will not be stored or returned as the result of any operation.&#x20;
{% endhint %}

{% hint style="info" %}
If you are not using "Public provider" credentials, it is required to add two Terraform code blocks:

* terraform
  * specify atlcloudjira provider
* provider
  * inside provider, specify credentials used to authenticate Terraform provider in given instance
    {% endhint %}

To perform plan operation follow the steps below:

1. Make sure that all imported resources have corresponding code fragments. Use code generation if needed.
2. Click on Plan button
3. Await process to be completed. Verify logs being displayed in Execution logs tab.
4. Check the output to verify the plan before plan operation.

<figure><img src="/files/6xmG93a94ISvtxvpdy6P" alt=""><figcaption><p>Plan operation output.</p></figcaption></figure>

<figure><img src="/files/8zDTa4o9mJq5l40QbZ8j" alt=""><figcaption><p>Comment out impor to check how it impact the plan operation.</p></figcaption></figure>

<figure><img src="/files/ccnq4qd1JH2FhKFeeOwm" alt=""><figcaption><p>Now instead of 2 resources to import, 1 resources is going to be created.</p></figcaption></figure>


# Apply

{% hint style="success" %}
If you don't want to append provider block with credentials inside Terraform script files, you can check  "Use public provider".\
App will append volatile file with provider block and public provider credentials. This file will not be stored or returned as the result of any operation.&#x20;
{% endhint %}

{% hint style="info" %}
If you are not using "Public provider" credentials, it is required to add two Terraform code blocks:

* terraform
  * specify atlcloudjira provider
* provider
  * inside provider, specify credentials used to authenticate Terraform provider in given instance
    {% endhint %}

To perform apply operation, follow steps below:

1. Make sure plan operation is performed successfully.
2. Click on apply button. Confirm operation by clicking Apply on popup dialog.
3. Verify apply operation output present in Execution logs.
4. In case of errors, that appeared during apply operation, update the Terraform code accordingly and repeat apply operation.
5. After operation is sucessfull, you will see new files being created. They are used to store information about the current state.&#x20;

<figure><img src="/files/RgAwyn1XI7nvKRsdV1zH" alt=""><figcaption><p>Before applying make sure all changes in the plan are exactly as you intend.</p></figcaption></figure>

<figure><img src="/files/m9KM3gjSMvsNDEif0i3v" alt=""><figcaption><p>Example errors not detected at the time of plan operation</p></figcaption></figure>

<figure><img src="/files/YwhDBEnJwFkZLRjEj0Nf" alt=""><figcaption><p>Fix applied to code, based on error message.</p></figcaption></figure>

<figure><img src="/files/FxP0HjxZczZYkoZZcC0W" alt=""><figcaption><p>This time apply operation was successful.</p></figcaption></figure>

<figure><img src="/files/R4OLKZdUr1MoxKRcJD6P" alt=""><figcaption><p>Reload workspace. You will find Terraform state files created.</p></figcaption></figure>


# Transform tab

Transform tab is used to transform Terraform code into diagrams that can be presented on interactive Canvas. Operation can also be reversed.

### Transform HCL to JSON

1. Select all Terraform files that you want to transform into graph
2. As an output, you need to select or create two new files.
3. Click on convert.

<figure><img src="/files/p805cyF79x16h5rA51OD" alt=""><figcaption><p>Select all Terraform files to convert. Type new or use existing file to store Graphviz JSON data.</p></figcaption></figure>

<figure><img src="/files/LmmeikRcsn3QSHW8eR09" alt=""><figcaption><p>Type new or use existing file to store HCL JSON data. They store Terraform data about resources in JSON format.</p></figcaption></figure>

<figure><img src="/files/UiaxIP3pflYa3zjdGdIK" alt=""><figcaption><p>Newly created JSON files that can be used to load into Canvas.</p></figcaption></figure>

### Transform JSON to HCL

Transform HCL JSON into Terraform code and style it with "terraform fmt" command.

1. Select JSON file to convert.
2. Select existing or create new file as an output for Terraform code.

<figure><img src="/files/qpVjaoMOcsu11EOvVOC5" alt=""><figcaption><p>Select JSON file to convert into Terraform code. Create new or select existing file as an output.</p></figcaption></figure>

<figure><img src="/files/ARJNbYPIGxOzP98UFlDW" alt=""><figcaption><p>Verify transformation output in Execution logs. Reload workspace to check newly created files.</p></figcaption></figure>

<figure><img src="/files/spyhh4u31Xc6K8Gk3CmP" alt=""><figcaption><p>Example output of Terraform to JSON convertion. When Canvas changes are saved, they will be reflected in HCL JSON.</p></figcaption></figure>

<figure><img src="/files/5RXWLwqAsH6Du6XQqyUg" alt=""><figcaption><p>Example output of JSON to Terraform conversion.</p></figcaption></figure>

Load JSON to canvas.

Load Graphviz and HCL data into interactive diagram. To verify data display, switch view from Text to Canvas.

1. Convert Terraform files into HCL and Graphviz JSON data.
2. Select HCL JSON and Graphviz data to be loaded into Canvas.
3. Switch view from Text to Canvas
4. If you plan to change data on Canvas, you need to Save it back to JSON file.

<figure><img src="/files/bgHU4Fse48Wmxo9NShkk" alt=""><figcaption><p>Select files to be loaded into canvas.</p></figcaption></figure>

<figure><img src="/files/qYp8D55b6EKBDQiYN60T" alt=""><figcaption><p>Change mode to Canvas.</p></figcaption></figure>

### Save canvas data to JSON&#x20;

If you plan to change data on diagram and transform it to Terraform code, follow steps below:

1. Make changes on diagram.
2. Click on "Save Canvas JSON to file"
3. Select existing or type new file name.
4. Verify that file was updated with new data.

<figure><img src="/files/Qmn4TGkR0D6kbQ40Sovf" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/ni8aQ0Y915hraKcbWgv5" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/0KUCqbX2HHhx3spxEUUV" alt=""><figcaption></figcaption></figure>


# AI Assistant

{% hint style="info" %}
AI Assistant can only respond with Terraform code or insight other topics are not allowed. Below there is an example usage of AI Assistant. It's experimental feature and results might be inaccurate.
{% endhint %}

<figure><img src="/files/mxiiFDfx0gwT1i0URLyQ" alt=""><figcaption><p>Example prompt to generate code fragments</p></figcaption></figure>

<figure><img src="/files/b4BpLCvbBaFNSRNyl6R7" alt=""><figcaption><p>Example insights about code fragments</p></figcaption></figure>

<figure><img src="/files/IS4MHUBFwqRStDoXiO3y" alt=""><figcaption><p>Example of more advanced insights, like compliance verification.</p></figcaption></figure>


# Execution logs

Execution logs page contains are executions performed in Terraform console and Remote repositories over given workspace. You need to first select desired workspace in Workspaces page.

In the UI you can find:

1. Current workspace name
2. Load logs - it will load all logs for given selected workspace
3. Remove logs - You can remove logs that are older than provided number. Number is displayed in days. Float numbers are allowed to handle hours if neede.

<figure><img src="/files/XuNVIm35ZW25PYhibESA" alt="" width="375"><figcaption><p>Provide days number (float) to remove logs that are older.</p></figcaption></figure>

4. Filter options - use to filter out displayed execution logs.
5. Table with execution logs. Click on details to checkout Execution logs associated with given operation.

<figure><img src="/files/FMDoz8wrlwCRxTTy83aX" alt=""><figcaption><p>Example output of execution logs.</p></figcaption></figure>

<figure><img src="/files/lMqDnVDEh6QKtlbYnC5W" alt=""><figcaption><p>Clicking on details with display execution logs in code block below</p></figcaption></figure>


# Terraform provider for Jira cloud

Terraform provider documentation


# jira-cloud Provider

## Example Usage

```terraform
terraform {
  required_providers {
    atlcloudjira = {
      source = "github.com/silessian/atlcloudjira"
    }
  }
}

provider "atlcloudjira" {
  username = "silessian"
  password = "SomeRandomATLTokenSomeRandomATLTokenSomeRandomATLTokenSomeRandomATLToken"
  host     = "https://example.atlassian.net"
}
```

## Schema

### Optional

* `host` (String) URI for Atlassian Cloud Instance. May also be provided via ATLCLOUD\_HOST environment variable.
* `password` (String, Sensitive) URI for Atlassian Cloud Instance. May also be provided via ATLCLOUD\_PASSWORD environment variable.
* `username` (String) Username for Atlassian Cloud Instance. May also be provided via ATLCLOUD\_USERNAME environment variable.


# atlcloudjira\_groups (Data Source)

Fetches the issue field values.

## Example Usage

```terraform
data "atlcloudjira_groups" "SampleGroupDataSource1" {
  group_name = "mySpecialGroup"
  //group_id = "0ea0d285-8db9-4061-b17f-fcdd0e7f0698"
}

output "SampleGroupDataSource1_out" {
  value = data.atlcloudjira_groups.SampleGroupDataSource1.groups[0].group_id
}

data "atlcloudjira_groups" "SampleGroupDataSource2" {
  //group_name = "mySpecialGroup"
  group_id = "0ea0d285-8db9-4061-b17f-fcdd0e7f0698"
}

output "SampleGroupDataSource2_out2" {
  value = [
    for i in range(length(data.atlcloudjira_groups.SampleGroupDataSource2.groups)) :
    {
      "group_id"   = data.atlcloudjira_groups.SampleGroupDataSource2.groups[i].group_id
      "group_name" = data.atlcloudjira_groups.SampleGroupDataSource2.groups[i].group_name
    }
  ]
}

/* Sample output
SampleGroupDataSource1_out = "b9ae8124-347d-4c67-ac4a-f4e8c491756d"
SampleGroupDataSource2_out2 = [
  {
    "group_id" = "0ea0d285-8db9-4061-b17f-fcdd0e7f0698"
    "group_name" = "system-administrators"
  },
]

*/
```

## Schema

### Optional

* `group_id` (String) Group ID used to search results. Must be exact match.
* `group_name` (String) Group name used to search results. Support partial match.
* `groups` (Attributes List) Groups returned by search results. (see [below for nested schema](broken://pages/ccUknUfP33dwKUjZt7nt))

### Nested Schema for `groups`

Optional:

* `group_id` (String) The ID of the group.
* `group_name` (String) The name of the group.


# atlcloudjira\_issues (Data Source)

Fetches the issue field values.

## Example Usage

```terraform
data "atlcloudjira_issues" "SampleIssueDataSource" {
  # key = "CKAN-1"
  jql          = "key = CKAN-1"
  field_filter = ["priority", "summary"]
}

output "SampleIssueDataSource_out" {
  value = [
    for i in range(length(data.atlcloudjira_issues.SampleIssueDataSource.issues)) :
    {
      "priority_name" = jsondecode(data.atlcloudjira_issues.SampleIssueDataSource.issues[i].fields["priority"])["name"]
      "summary"       = jsondecode(data.atlcloudjira_issues.SampleIssueDataSource.issues[i].fields["summary"])
    }
  ]
}

/* Sample Output
SampleIssueDataSource_out = [
  {
    "priority_name" = "Medium"
    "summary" = "Test Epic Issue Source 1"
  },
]
*/
```

## Schema

### Optional

* `field_filter` (List of String) When set, it is filtering returned issues' fields, by mentioned field names (e.g. summary, customfield\_10010, etc.).
* `id` (String) Use either ID or Issue Key to search for issues, not both.
* `issues` (Attributes List) Issues returned from search query. (see [below for nested schema](broken://pages/ceokSbjZSWcbh07U32h5))
* `jql` (String) Valid JQL query used to search for issues.
* `key` (String) Use either ID or Issue Key to search for issues, not both.

### Nested Schema for `issues`

Optional:

* `fields` (Map of String) Issue fields listed by ID (e.g. summary, attachments, customfield\_10010, etc.)
* `id` (String) ID of returned issue.
* `key` (String) Issue Key of returned issue.


# atlcloudjira\_users (Data Source)

Fetches the issue field values.

## Example Usage

```terraform
data "atlcloudjira_users" "SampleUserDataSource" {
  query = "Marcin"
}

output "SampleUserDataSource_out" {
  value = data.atlcloudjira_users.SampleUserDataSource.users[0].account_id
}

output "SampleUserDataSource_out2" {
  value = [
    for i in range(length(data.atlcloudjira_users.SampleUserDataSource.users)) :
    {
      "account_id" = data.atlcloudjira_users.SampleUserDataSource.users[i].account_id
    }
  ]
}

/* Sample output
SampleUserDataSource_out = "80dacb68-6f79-46c6-b22e-296669e36568"
SampleUserDataSource_out2 = [
  {
    "account_id" = "80dacb68-6f79-46c6-b22e-296669e36568"
  },
  {
    "account_id" = "5fde5ea73b5e47013845900a"
  },
]
*/
```

## Schema

### Optional

* `query` (String) Placeholder identifier attribute.
* `users` (Attributes List) Placeholder identifier attribute. (see [below for nested schema](broken://pages/jIIWf7p3sEuTkElV8uKT))

### Nested Schema for `users`

Optional:

* `account_id` (String) Placeholder identifier attribute.
* `account_type` (String) Placeholder identifier attribute.
* `active` (Boolean) Placeholder identifier attribute.
* `avatar_urls` (Attributes) Placeholder identifier attribute. (see [below for nested schema](broken://pages/jIIWf7p3sEuTkElV8uKT))
* `display_name` (String) Placeholder identifier attribute.
* `email_address` (String) Placeholder identifier attribute.
* `locale` (String) Placeholder identifier attribute.
* `time_zone` (String) Placeholder identifier attribute.

### Nested Schema for `users.avatar_urls`

Optional:

* `x16x16` (String) Placeholder identifier attribute.
* `x24x24` (String) Placeholder identifier attribute.
* `x32x32` (String) Placeholder identifier attribute.
* `x48x48` (String) Placeholder identifier attribute.


# atlcloudjira\_customfield (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_customfield.SampleCustomFieldResource
  id = "customfield_10210"
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "customfield_10046"
resource "atlcloudjira_customfield" "SampleCustomFieldResource" {
  name         = "Change reasoner"
  description  = "Lorem ipsum."
  searcher_key = "com.atlassian.jira.plugin.system.customfieldtypes:grouppickersearcher"
  type         = "com.atlassian.jira.plugin.system.customfieldtypes:grouppicker"
}
```

## Schema

### Required

* `name` (String) The name of the field.
* `type` (String) The type of the custom field. These built-in custom field types are available in Atlassian documentation.

### Optional

* `description` (String) The description of the custom field, which is displayed in Jira.
* `searcher_key` (String) The searcher that defines the way the field is searched in Jira. It can be set to null, otherwise you must specify the valid searcher for the field type, as listed in Atlassian documentation.

### Read-Only

* `id` (String) The ID of the field.
* `last_updated` (String) Timestamp of the last Terraform update of the Custom Field.


# atlcloudjira\_dashboard (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_dashboard.SampleDashboardResource
  id = 10005
}

import {
  to = atlcloudjira_dashboard.SampleDashboardResource2
  id = 10006
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10005"
resource "atlcloudjira_dashboard" "SampleDashboardResource" {
  automatic_refresh_ms = 0
  description          = "Sample dashboard description"
  edit_permissions = [
    {
      config = {
        group_id        = ""
        project_id      = "10001"
        project_role_id = ""
        type            = "project"
        user_id         = ""
      }
    },
  ]
  gadgets = {
    c0r0 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          daysprevious      = "30"
          id                = "10000"
          isConfigured      = "true"
          isPopup           = "false"
          name              = "Filter for TIP"
          periodName        = "daily"
          projectOrFilterId = "filter-10000"
          refresh           = "false"
          statuses          = "10010"
          type              = "filter"
          yaxisPeriod       = "hourly"
        }
      }
      title = "Average Time in Status"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.ext.charting:timeinstatus-gadget/com/atlassian/jira/ext/charting/gadget/timeinstatus-gadget.xml"
    }
    c0r1 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          daysprevious      = "30"
          id                = "10001"
          isConfigured      = "true"
          isPopup           = "false"
          name              = "Filter for KS board"
          periodName        = "daily"
          projectOrFilterId = "filter-10001"
          refresh           = "false"
          statuses          = ""
          type              = "filter"
          yaxisPeriod       = "hourly"
        }
      }
      title = "Average Number of Times in Status"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.ext.charting:numberoftimesinstatus-gadget/com/atlassian/jira/ext/charting/gadget/numberoftimesinstatus-gadget.xml"
    }
    c0r2 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          daysprevious      = "30"
          id                = "10001"
          isConfigured      = "true"
          isPopup           = "false"
          name              = "Filter for KS board"
          periodName        = "daily"
          projectOrFilterId = "filter-10001"
          refresh           = "false"
          type              = "filter"
        }
      }
      title = "Average Age Chart"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:average-age-chart-gadget/gadgets/average-age-gadget.xml"
    }
    c0r3 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          columnNames  = "issuetype|issuekey|summary|priority"
          isConfigured = "true"
          num          = "10"
          refresh      = "false"
          sortColumn   = ""
        }
      }
      title = "Assigned to Me"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:assigned-to-me-gadget/gadgets/assigned-to-me-gadget.xml"
    }
    c0r4 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          "" = "null"
        }
      }
      title = "Activity Stream"
      uri   = "rest/gadgets/1.0/g/com.atlassian.streams.streams-jira-plugin:activitystream-gadget/gadgets/activitystream-gadget.xml"
    }
    c1r0 = {
      color      = "blue"
      module_key = "com.atlassian.jira.gadgets:bubble-chart-dashboard-item"
      properties = {
        bubbleType = {
          bubbleType = "participants"
        }
        id = {
          id = "10001"
        }
        isConfigured = {
          isConfigured = "true"
        }
        name = {
          name = "Filter for KS board"
        }
        recentCommentsPeriod = {
          recentCommentsPeriod = "7"
        }
        refresh = {
          refresh = "15"
        }
        type = {
          type = "filter"
        }
        useLogarithmicScale = {
          useLogarithmicScale = "false"
        }
        useRelativeColoring = {
          useRelativeColoring = "true"
        }
      }
      title = "Bubble Chart"
      uri   = null
    }
    c1r1 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          daysprevious        = "30"
          id                  = "10001"
          isConfigured        = "true"
          isCumulative        = "false"
          isPopup             = "false"
          name                = "Filter for KS board"
          operation           = "count"
          periodName          = "daily"
          projectOrFilterId   = ""
          refresh             = "false"
          showUnresolvedTrend = "false"
          type                = "filter"
          versionLabel        = "major"
        }
      }
      title = "Created vs. Resolved Chart"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:created-vs-resolved-issues-chart-gadget/gadgets/createdvsresolved-gadget.xml"
    }
    c1r2 = {
      color      = "blue"
      module_key = "com.atlassian.servicedesk.dashboard-items-plugin:filter-count-dashboard-item"
      properties = null
      title      = "Filter counts"
      uri        = null
    }
    c1r3 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          id                = "10001"
          isConfigured      = "true"
          isPopup           = "false"
          name              = "Filter for KS board"
          projectOrFilterId = "filter-10001"
          refresh           = "false"
          statType          = "assignees"
          type              = "filter"
        }
      }
      title = "Heat Map"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:heat-map-gadget/gadgets/heatmap-gadget.xml"
    }
    c1r4 = {
      color      = "blue"
      module_key = "com.atlassian.jira.gadgets:introduction-dashboard-item"
      properties = null
      title      = "Introduction"
      uri        = null
    }
    c1r5 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          dateFieldName     = "duedate"
          displayVersions   = "false"
          id                = "10017"
          isConfigured      = "true"
          name              = "Filter for MyBoard"
          numOfIssueIcons   = "10"
          projectOrFilterId = "filter-10017"
          refresh           = "false"
          type              = "filter"
        }
      }
      title = "Jira Issues Calendar"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.ext.calendar:issuescalendar-gadget/templates/plugins/jira/portlets/calendar/gadget/calendar-gadget.xml"
    }
    c1r6 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          fieldId      = "labels"
          isConfigured = "true"
          projectid    = "project-10000"
          refresh      = "false"
        }
      }
      title = "Labels Gadget"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:labels-gadget/gadgets/labels-gadget.xml"
    }
    c1r7 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          "" = "null"
        }
      }
      title = "Projects"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:project-gadget/gadgets/project-gadget.xml"
    }
    c2r0 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          isConfigured      = "true"
          rapidViewId       = "3"
          refresh           = "false"
          showRapidViewName = "true"
          showSprintName    = "true"
          sprintId          = "auto"
        }
      }
      title = "Days Remaining in Sprint Gadget"
      uri   = "rest/gadgets/1.0/g/com.pyxis.greenhopper.jira:greenhopper-gadget-sprint-days-remaining/gadgets/greenhopper-sprint-days-remaining.xml"
    }
    c2r1 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          columnNames  = "issuetype|issuekey|summary|priority"
          filterId     = "10001"
          isConfigured = "true"
          isPopup      = "false"
          num          = "10"
          refresh      = "false"
        }
      }
      title = "Filter Results"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:filter-results-gadget/gadgets/filter-results-gadget.xml"
    }
    c2r2 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          id                = "10001"
          isConfigured      = "true"
          isPopup           = "false"
          name              = "Filter for KS board"
          projectOrFilterId = "filter-10001"
          refresh           = "false"
          statType          = "assignees"
          type              = "filter"
        }
      }
      title = "Heat Map"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:heat-map-gadget/gadgets/heatmap-gadget.xml"
    }
    c2r3 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          id                    = "10001"
          includeResolvedIssues = "false"
          isConfigured          = "true"
          maxResults            = "10"
          name                  = "Filter for KS board"
          projectOrFilterId     = "filter-10001"
          refresh               = "false"
          sortBy                = "total"
          sortDirection         = "desc"
          statType              = "assignees"
          type                  = "filter"
        }
      }
      title = "Issue Statistics"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:stats-gadget/gadgets/stats-gadget.xml"
    }
    c2r4 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          columnNames  = "issuetype|issuekey|summary|priority"
          isConfigured = "true"
          num          = "10"
          refresh      = "false"
        }
      }
      title = "Issues in progress"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:in-progress-gadget/gadgets/in-progress-gadget.xml"
    }
    c2r5 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          days                 = "30"
          isConfigured         = "true"
          num                  = "10"
          projectsOrCategories = "10000"
          refresh              = "false"
        }
      }
      title = "Jira Road Map"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:road-map-gadget/gadgets/roadmap-gadget.xml"
    }
    c2r6 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          id                = "10017"
          isConfigured      = "true"
          isPopup           = "false"
          name              = "Filter for MyBoard"
          projectOrFilterId = ""
          refresh           = "false"
          statType          = "assignees"
          type              = "filter"
        }
      }
      title = "Pie Chart"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:pie-chart-gadget/gadgets/piechart-gadget.xml"
    }
  }
  layout   = "AAA"
  name     = "New Testing"
  owner_id = "712020:7793726f-0b82-4dc8-ba5c-e22769c1fd16"
  share_permissions = [
    {
      config = {
        group_id        = ""
        project_id      = ""
        project_role_id = ""
        type            = "user"
        user_id         = "5fde5ea73b5e47013845900a"
      }
    },
    {
      config = {
        group_id        = ""
        project_id      = "10000"
        project_role_id = ""
        type            = "project"
        user_id         = ""
      }
    },
    {
      config = {
        group_id        = "80dacb68-6f79-46c6-b22e-296669e36568"
        project_id      = ""
        project_role_id = ""
        type            = "group"
        user_id         = ""
      }
    },
  ]
}

# __generated__ by Terraform from "10006"
resource "atlcloudjira_dashboard" "SampleDashboardResource2" {
  automatic_refresh_ms = 0
  description          = "Sample dashboard description 2"
  edit_permissions     = null
  gadgets = {
    c0r0 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          isConfigured      = "true"
          rapidViewId       = "3"
          refresh           = "false"
          showRapidViewName = "false"
          showSprintName    = "false"
          sprintId          = "auto"
        }
      }
      title = "Sprint Burndown Gadget"
      uri   = "rest/gadgets/1.0/g/com.pyxis.greenhopper.jira:greenhopper-gadget-sprint-burndown/gadgets/greenhopper-sprint-burndown.xml"
    }
    c0r1 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          isConfigured      = "true"
          rapidViewId       = "3"
          refresh           = "false"
          showAssignees     = "false"
          showRapidViewName = "true"
          showSprintName    = "true"
          sprintId          = "auto"
        }
      }
      title = "Sprint Health Gadget"
      uri   = "rest/gadgets/1.0/g/com.pyxis.greenhopper.jira:greenhopper-gadget-sprint-health/gadgets/greenhopper-sprint-health.xml"
    }
    c0r2 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          "" = "null"
        }
      }
      title = "Starred filters"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:favourite-filters-gadget/gadgets/favourite-filters-gadget.xml"
    }
    c0r3 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          dateField         = "created"
          daysprevious      = "30"
          id                = "10017"
          isConfigured      = "true"
          isCumulative      = "true"
          isPopup           = "false"
          name              = "Filter for MyBoard"
          periodName        = "daily"
          projectOrFilterId = "filter-10017"
          refresh           = "false"
          type              = "filter"
        }
      }
      title = "Time Since Chart"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:time-since-chart-gadget/gadgets/timesince-gadget.xml"
    }
    c0r4 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          daysprevious      = "30"
          id                = "10001"
          isConfigured      = "true"
          isPopup           = "false"
          name              = "Filter for KS board"
          periodName        = "daily"
          projectOrFilterId = "filter-10001"
          refresh           = "false"
          type              = "filter"
        }
      }
      title = "Time to First Response"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.ext.charting:firstresponse-gadget/com/atlassian/jira/ext/charting/gadget/firstresponse-gadget.xml"
    }
    c0r5 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          filterId      = "filter-10017"
          isConfigured  = "true"
          isPopup       = "false"
          more          = "false"
          numberToShow  = "5"
          refresh       = "false"
          sortBy        = "natural"
          sortDirection = "asc"
          xstattype     = "assignees"
          ystattype     = "assignees"
        }
      }
      title = "Two Dimensional Filter Statistics"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:two-dimensional-stats-gadget/gadgets/two-dimensional-stats-gadget.xml"
    }
    c0r6 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          columnNames    = "issuetype|issuekey|summary|priority"
          isConfigured   = "true"
          num            = "10"
          refresh        = "false"
          showResolved   = "false"
          showTotalVotes = "false"
        }
      }
      title = "Voted Issues"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:voted-gadget/gadgets/voted-gadget.xml"
    }
    c0r7 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          "" = "null"
        }
      }
      title = "Wallboard Spacer Gadget"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.atlassian-wallboard-plugin:spacer-gadget/gadgets/spacerGadget.xml"
    }
    c0r8 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          columnNames      = "issuetype|issuekey|summary|priority"
          isConfigured     = "true"
          num              = "10"
          refresh          = "false"
          showResolved     = "false"
          showTotalWatches = "false"
        }
      }
      title = "Watched Issues"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:watched-gadget/gadgets/watched-gadget.xml"
    }
    c0r9 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          id                = "10001"
          isConfigured      = "true"
          isPopup           = "false"
          issuetimetype     = "timespent"
          name              = "Filter for KS board"
          projectOrFilterId = "filter-10001"
          refresh           = "false"
          statistictype     = "customfield_10046"
          type              = "filter"
        }
      }
      title = "Workload Pie Chart"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.ext.charting:workloadpie-gadget/com/atlassian/jira/ext/charting/gadget/workloadpie-gadget.xml"
    }
    c1r0 = {
      color      = "blue"
      module_key = "com.atlassian.servicedesk.servicedesk-reports-plugin:custom-report-dashboard-item"
      properties = {
        gadgetContentTitle = {
          gadgetContentTitle = "Test IT project - Created vs Resolved"
        }
        intervalValue = {
          intervalValue = "1"
        }
        isConfigured = {
          isConfigured = "true"
        }
        isCustom = {
          isCustom = "true"
        }
        projectValue = {
          projectValue = "TIP"
        }
        refresh = {
          refresh = "false"
        }
        reportValue = {
          reportValue = "1"
        }
      }
      title = "Service project report"
      uri   = null
    }
    c1r1 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          daysprevious      = "30"
          id                = "10017"
          isConfigured      = "true"
          isPopup           = "false"
          name              = "Filter for MyBoard"
          periodName        = "daily"
          projectOrFilterId = "filter-10017"
          refresh           = "false"
          type              = "filter"
        }
      }
      title = "Resolution Time"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:resolution-time-gadget/gadgets/resolution-time-gadget.xml"
    }
    c1r10 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          columnNames  = "issuetype|issuekey|summary|priority"
          isConfigured = "true"
          num          = "10"
          refresh      = "false"
        }
      }
      title = "Issues in progress"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:in-progress-gadget/gadgets/in-progress-gadget.xml"
    }
    c1r2 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          daysprevious      = "30"
          id                = "10017"
          isConfigured      = "true"
          isPopup           = "false"
          name              = "Filter for MyBoard"
          periodName        = "daily"
          projectOrFilterId = "filter-10017"
          refresh           = "false"
          type              = "filter"
        }
      }
      title = "Recently Created Chart"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:recently-created-chart-gadget/gadgets/recently-created-gadget.xml"
    }
    c1r3 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          "" = "null"
        }
      }
      title = "Quick links"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:quicklinks-gadget/gadgets/quicklinks-gadget.xml"
    }
    c1r4 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          "" = "null"
        }
      }
      title = "Projects"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:project-gadget/gadgets/project-gadget.xml"
    }
    c1r5 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          id                = "10001"
          isConfigured      = "true"
          isPopup           = "false"
          name              = "Filter for KS board"
          projectOrFilterId = ""
          refresh           = "false"
          statType          = "assignees"
          type              = "filter"
        }
      }
      title = "Pie Chart"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:pie-chart-gadget/gadgets/piechart-gadget.xml"
    }
    c1r6 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          fieldId      = "labels"
          isConfigured = "true"
          projectid    = "project-10000"
          refresh      = "false"
        }
      }
      title = "Labels Gadget"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:labels-gadget/gadgets/labels-gadget.xml"
    }
    c1r7 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          days                 = "30"
          isConfigured         = "true"
          num                  = "10"
          projectsOrCategories = "allprojects"
          refresh              = "false"
        }
      }
      title = "Jira Road Map"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:road-map-gadget/gadgets/roadmap-gadget.xml"
    }
    c1r8 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          dateFieldName     = "duedate"
          displayVersions   = "false"
          id                = "10017"
          isConfigured      = "true"
          name              = "Filter for MyBoard"
          numOfIssueIcons   = "10"
          projectOrFilterId = "filter-10017"
          refresh           = "false"
          type              = "filter"
        }
      }
      title = "Jira Issues Calendar"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.ext.calendar:issuescalendar-gadget/templates/plugins/jira/portlets/calendar/gadget/calendar-gadget.xml"
    }
    c1r9 = {
      color      = "blue"
      module_key = null
      properties = {
        config = {
          columnNames  = "issuetype|issuekey|summary|priority"
          isConfigured = "true"
          num          = "10"
          refresh      = "false"
        }
      }
      title = "Issues in progress"
      uri   = "rest/gadgets/1.0/g/com.atlassian.jira.gadgets:in-progress-gadget/gadgets/in-progress-gadget.xml"
    }
  }
  layout            = "AB"
  name              = "New Testing 2"
  owner_id          = "712020:7793726f-0b82-4dc8-ba5c-e22769c1fd16"
  share_permissions = null
}
```

## Schema

### Required

* `automatic_refresh_ms` (Number) Dashboard data refresh rate in ms
* `layout` (String) Dashboard column layout
* `name` (String) The name of the dashboard.
* `owner_id` (String) The owner's account ID of the dashboard.

### Optional

* `description` (String) The description of the dashboard.
* `edit_permissions` (Attributes Set) The details of any view edit permissions for the dashboard. (see [below for nested schema](broken://pages/SZOpI1TkBbLi5BwV9Skh))
* `gadgets` (Attributes Map) The list of gadgets on the dashboard. Gadget's are positioned by row and column. (see [below for nested schema](broken://pages/SZOpI1TkBbLi5BwV9Skh))
* `share_permissions` (Attributes Set) The details of any view share permissions for the dashboard. (see [below for nested schema](broken://pages/SZOpI1TkBbLi5BwV9Skh))

### Read-Only

* `gadgets_mapping` (Map of String) Helper attribute, gadget position to ID mapping.
* `id` (Number) The ID of the dashboard.
* `last_updated` (String) Timestamp of the last Terraform update of the Dashboard.

### Nested Schema for `edit_permissions`

Optional:

* `config` (Map of String)

### Nested Schema for `gadgets`

Optional:

* `color` (String) The color of the gadget. Should be one of blue, red, yellow, green, cyan, purple, gray, or white.
* `module_key` (String) The Module Key of the gadget type. Some gadgets use URI and some Module Key.
* `properties` (Map of Map of String) Gadget's configuration.
* `title` (String) The title of the gadget.
* `uri` (String) The URI of the gadget type. Some gadgets use URI and some Module Key.

### Nested Schema for `share_permissions`

Optional:

* `config` (Map of String)


# atlcloudjira\_field\_configuration\_scheme (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_field_configuration_scheme.SampleFieldConfigurationSchemeResource
  id = 10001
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10001"
resource "atlcloudjira_field_configuration_scheme" "SampleFieldConfigurationSchemeResource" {
  name        = "Sample Field Configuration Scheme for Project ABC"
  description = "Sample Field Configuration Scheme description for Project ABC"
  mappings = [
    {
      field_configuration_id = 10000
      issue_type_id          = 10008
    },
    {
      field_configuration_id = 10002
      issue_type_id          = 10009
    },
    {
      field_configuration_id = 10002
      issue_type_id          = "default"
    },
  ]
}
```

## Schema

### Required

* `name` (String) The name of the field configuration scheme. The name must be unique.

### Optional

* `description` (String) The description of the field configuration scheme.
* `mappings` (Attributes Set) Field configuration to issue type mappings. (see [below for nested schema](broken://pages/W9N4bbtelY19QtypRO7S))

### Read-Only

* `id` (Number) The ID of the field configuration scheme.
* `last_updated` (String) Timestamp of the last Terraform update of the field configuration scheme.

### Nested Schema for `mappings`

Required:

* `field_configuration_id` (String) The ID of the field configuration.
* `issue_type_id` (String) The ID of the issue type or default. When set to default this field configuration issue type item applies to all issue types without a field configuration. An issue type can be included only once in a request.


# atlcloudjira\_field\_configuration (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_field_configuration.SampleFieldConfiguration
  id = 10002
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10002"
resource "atlcloudjira_field_configuration" "SampleFieldConfiguration" {
  allow_incomplete = true
  name             = "Sample Field Configuration for Project ABC"
  description      = "Sample description"
  items = {
    assignee = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    attachment = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    comment = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = "wiki-renderer"
    }
    components = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10003 = {
      description = "Contains users needed for approval. This custom field was created by Jira Service Desk."
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10004 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10005 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10006 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10007 = {
      description = "Choose the reason for the change request"
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10008 = {
      description = "Enter when the change actually started."
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10009 = {
      description = "Enter when the change actually ended."
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10024 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10025 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10041 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10042 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10044 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10046 = {
      description = "Contains groups of users needed for approval. This custom field was created by Jira Service Management."
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10047 = {
      description = "Specify the reason for moving the issue to the Pending status"
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10050 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10051 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = "text-renderer"
    }
    customfield_10052 = {
      description = "Enter when the change is planned to start."
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10053 = {
      description = "Enter when the change is planned to end."
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10054 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = "text-renderer"
    }
    customfield_10055 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = "text-renderer"
    }
    customfield_10056 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = "text-renderer"
    }
    customfield_10057 = {
      description = "Captures the reporting source for this issue"
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10058 = {
      description = "Reason for problem investigation"
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10059 = {
      description = "Describe the root cause for the problem"
      is_hidden   = false
      is_required = false
      renderer    = "text-renderer"
    }
    customfield_10060 = {
      description = "Describe the workaround for the problem"
      is_hidden   = false
      is_required = false
      renderer    = "text-renderer"
    }
    customfield_10065 = {
      description = "Measurement of complexity and/or size of a requirement."
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    customfield_10067 = {
      description = "Created by PlanApply to store Plan ID."
      is_hidden   = false
      is_required = false
      renderer    = "text-renderer"
    }
    customfield_10068 = {
      description = "Created by PlanApply to store plan submission status."
      is_hidden   = false
      is_required = false
      renderer    = "text-renderer"
    }
    customfield_10105 = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    description = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = "wiki-renderer"
    }
    duedate = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    environment = {
      description = "For example operating system, software platform and/or hardware specifications (include as appropriate for the issue)."
      is_hidden   = false
      is_required = false
      renderer    = "wiki-renderer"
    }
    fixVersions = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    issuelinks = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    issuetype = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    labels = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    priority = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    reporter = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    resolution = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    security = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    summary = {
      description = null
      is_hidden   = false
      is_required = true
      renderer    = null
    }
    timetracking = {
      description = "An estimate of how much work remains until this issue will be resolved.The format of this is ' *w *d *h *m ' (representing weeks, days, hours and minutes - where * can be any number).Examples: 4d, 5h 30m, 60m and 3w."
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    versions = {
      description = null
      is_hidden   = false
      is_required = false
      renderer    = null
    }
    worklog = {
      description = "Allows work to be logged whilst creating, editing or transitioning issues."
      is_hidden   = false
      is_required = false
      renderer    = "wiki-renderer"
    }
  }
}
```

## Schema

### Required

* `name` (String) The name of the field configuration. Must be unique.

### Optional

* `allow_incomplete` (Boolean) Helper attribute. When set to true, partial configuration can be stored and managed by Terraform. Is false, entire configuration must be stored in Terraform script.
* `description` (String) The description of the field configuration.
* `items` (Attributes Map) List of fields for a configuration. (see [below for nested schema](broken://pages/v5kKMh4BJoNYfpRGSVs0))

### Read-Only

* `id` (Number) The ID of the field configuration.
* `last_updated` (String) Timestamp of the last Terraform update of the Field Configuration.

### Nested Schema for `items`

Optional:

* `description` (String) The description of the field within the field configuration.
* `is_hidden` (Boolean) Whether the field is hidden in the field configuration.
* `is_required` (Boolean) Whether the field is required in the field configuration.
* `renderer` (String) The renderer type for the field within the field configuration.


# atlcloudjira\_filter (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_filter.SampleFilterResource
  id = 10004
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10004"
resource "atlcloudjira_filter" "SampleFilterResource" {
  description = "Lorem ipsum"
  edit_permissions = [
    {
      config = {
        group_id        = ""
        project_id      = ""
        project_role_id = ""
        type            = "user"
        user_id         = "5fde5ea73b5e47013845900a"
      }
    },
    {
      config = {
        group_id        = ""
        project_id      = "10000"
        project_role_id = ""
        type            = "project"
        user_id         = ""
      }
    },
    {
      config = {
        group_id        = ""
        project_id      = "10049"
        project_role_id = ""
        type            = "project"
        user_id         = ""
      }
    },
    {
      config = {
        group_id        = "b9ae8124-347d-4c67-ac4a-f4e8c491756d"
        project_id      = ""
        project_role_id = ""
        type            = "group"
        user_id         = ""
      }
    },
  ]
  jql      = "created >= -31d order by status DESC, created DESC"
  name     = "My Personal Filter 01"
  owner_id = "80dacb68-6f79-46c6-b22e-296669e36568"
  share_permissions = [
    {
      config = {
        group_id        = ""
        project_id      = ""
        project_role_id = ""
        type            = "user"
        user_id         = "557058:950f9f5b-3d6d-4e1d-954a-21367ae9ac75"
      }
    },
  ]
}
```

## Schema

### Required

* `name` (String) The name of the filter. Must be unique.
* `owner_id` (String) The account ID of user who owns the filter.

### Optional

* `description` (String) A description of the filter.
* `edit_permissions` (Attributes Set) The groups and projects that can edit the filter. (see [below for nested schema](broken://pages/U58KBmihzBkUZOmDmgQ7))
* `jql` (String) The JQL query for the filter.
* `share_permissions` (Attributes Set) The groups and projects that the filter is shared with. (see [below for nested schema](broken://pages/U58KBmihzBkUZOmDmgQ7))

### Read-Only

* `id` (Number) The unique identifier for the filter.
* `last_updated` (String) Timestamp of the last Terraform update of the Filter.

### Nested Schema for `edit_permissions`

Optional:

* `config` (Map of String)

### Nested Schema for `share_permissions`

Optional:

* `config` (Map of String)


# atlcloudjira\_issue\_link\_type (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_issue_link_type.SampleLinkTypeResource
  id = 10000
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10000"
resource "atlcloudjira_issue_link_type" "SampleLinkTypeResource" {
  name    = "Blocks"
  inward  = "is blocked by"
  outward = "blocks"
}
```

## Schema

### Required

* `inward` (String) The description of the issue link type inward link.
* `name` (String) The name of the issue link type.
* `outward` (String) The description of the issue link type outward link.

### Read-Only

* `id` (Number) The ID of the issue link type.
* `last_updated` (String) Timestamp of the last Terraform update of the Issue Link Type.


# atlcloudjira\_issue\_type\_scheme (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_issue_type_scheme.SampleIssueTypeScreenScheme
  id = 10396
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10396"

resource "atlcloudjira_issue_type_scheme" "SampleIssueTypeScreenScheme" {
  default_issue_type_id = "10004"
  description           = "Test description"
  issue_type_ids        = ["10002", "10004", "10001", "10009"]
  name                  = "Sample Issue Type Scheme"
  replace_with          = null
}
```

## Schema

### Required

* `issue_type_ids` (List of String) Ordered list of issue types IDs of the issue type scheme. At least one standard issue type ID is required.
* `name` (String) The name of the issue type scheme. The name must be unique. The maximum length is 255 characters.

### Optional

* `default_issue_type_id` (String) The ID of the default issue type of the issue type scheme. This ID must be included in issue\_type\_ids.
* `description` (String) The description of the issue type screen scheme.
* `replace_with` (String) Helper attribute. Replaces current issue type screen scheme with new one in associated projects, when performing destroy operation.

### Read-Only

* `associated_projects` (Set of Number) Helper attribute. Stores in state a list of associated projects.
* `id` (String) The ID of the issue type screen scheme.
* `last_updated` (String) Timestamp of the last Terraform update of the Issue Type Scheme resource.


# atlcloudjira\_issue\_security\_scheme (Resource)

## Example Usage

```terraform
resource "atlcloudjira_issue_security_scheme" "TestIssueSecuritySchemeResource" {
  default_security_level_name = "Level 5"
  description                 = "Lorem ipsum dolor sit amet."
  name                        = "Test Issue Security Scheme"
  security_levels = {
    Level_1 = {
      description = "Sample Level Description."
      members = [
        {
          holder = {
            parameter = ""
            type      = "applicationRole"
          }
        },
        {
          holder = {
            parameter = ""
            type      = "assignee"
          }
        },
        {
          holder = {
            parameter = ""
            type      = "lead"
          }
        },
        {
          holder = {
            parameter = ""
            type      = "reporter"
          }
        },
        {
          holder = {
            parameter = ""
            type      = "sd.customer.portal.only"
          }
        },
        {
          holder = {
            parameter = "10003"
            type      = "projectrole"
          }
        },
        {
          holder = {
            parameter = "80dacb68-6f79-46c6-b22e-296669e36568"
            type      = "user"
          }
        },
        {
          holder = {
            parameter = "customfield_10046"
            type      = "groupCF"
          }
        },
        {
          holder = {
            parameter = "customfield_10047"
            type      = "userCF"
          }
        },
        {
          holder = {
            parameter = "jira-core"
            type      = "applicationRole"
          }
        },
        {
          holder = {
            parameter = "jira-servicedesk"
            type      = "applicationRole"
          }
        },
        {
          holder = {
            parameter = "jira-software"
            type      = "applicationRole"
          }
        },
        {
          holder = {
            parameter = "mySpecialGroup"
            type      = "group"
          }
        },
      ]
      name = "Level 1"
    }
    Level_4 = {
      description = "CEO Ext"
      members = [
        {
          holder = {
            parameter = ""
            type      = "applicationRole"
          }
        },
        {
          holder = {
            parameter = ""
            type      = "reporter"
          }
        },
        {
          holder = {
            parameter = "10003"
            type      = "projectrole"
          }
        },
        {
          holder = {
            parameter = "80dacb68-6f79-46c6-b22e-296669e36568"
            type      = "user"
          }
        },
        {
          holder = {
            parameter = "mySpecialGroup"
            type      = "group"
          }
        },
      ]
      name = "Level 4"
    }
    Level_5 = {
      description = "Lorem ipsum sample."
      members = [
        {
          holder = {
            parameter = ""
            type      = "applicationRole"
          }
        },
        {
          holder = {
            parameter = ""
            type      = "assignee"
          }
        },
        {
          holder = {
            parameter = ""
            type      = "lead"
          }
        },
        {
          holder = {
            parameter = ""
            type      = "reporter"
          }
        },
        {
          holder = {
            parameter = ""
            type      = "sd.customer.portal.only"
          }
        },
        {
          holder = {
            parameter = "10003"
            type      = "projectrole"
          }
        },
        {
          holder = {
            parameter = "80dacb68-6f79-46c6-b22e-296669e36568"
            type      = "user"
          }
        },
        {
          holder = {
            parameter = "customfield_10046"
            type      = "groupCF"
          }
        },
        {
          holder = {
            parameter = "customfield_10047"
            type      = "userCF"
          }
        },
        {
          holder = {
            parameter = "jira-core"
            type      = "applicationRole"
          }
        },
        {
          holder = {
            parameter = "jira-servicedesk"
            type      = "applicationRole"
          }
        },
        {
          holder = {
            parameter = "jira-software"
            type      = "applicationRole"
          }
        },
        {
          holder = {
            parameter = "mySpecialGroup"
            type      = "group"
          }
        },
      ]
      name = "Level 5"
    }
    Level_6 = {
      description = "CEO Ext 2"
      members = [
        {
          holder = {
            parameter = ""
            type      = "reporter"
          }
        },
        {
          holder = {
            parameter = "10003"
            type      = "projectrole"
          }
        },
        {
          holder = {
            parameter = "80dacb68-6f79-46c6-b22e-296669e36568"
            type      = "user"
          }
        },
        {
          holder = {
            parameter = "jira-software"
            type      = "applicationRole"
          }
        },
        {
          holder = {
            parameter = "mySpecialGroup"
            type      = "group"
          }
        },
      ]
      name = "Level 6"
    }
  }
}
```

## Schema

### Required

* `name` (String) The unique name for the component in the project. Required when creating a component. Optional when updating a component.

### Optional

* `default_security_level_name` (String) Name of the default security level used in scheme.
* `description` (String) The description for the component. Optional when creating or updating a component.
* `security_levels` (Attributes Map) List of security levels. Levels are ordered by numbers that are virtual values. (see [below for nested schema](broken://pages/zb5KHe3FXf575KMs756v))

### Read-Only

* `hidden` (Map of String) Helper attribute. Used to map issue security levels number with IDs.
* `id` (Number) The ID project component.
* `last_updated` (String) Timestamp of the last Terraform update of the project component.

### Nested Schema for `security_levels`

Optional:

* `description` (String) The description of the issue level security item.
* `members` (Attributes Set) The entities being granted the permission. (see [below for nested schema](broken://pages/zb5KHe3FXf575KMs756v))
* `name` (String) The name of the issue level security item.

### Nested Schema for `security_levels.members`

Optional:

* `holder` (Map of String) The type of permission holder.


# atlcloudjira\_issue\_type\_screen\_scheme (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_issue_type_screen_scheme.SampleIssueTypeScreenScheme
  id = 10051
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10051"
resource "atlcloudjira_issue_type_screen_scheme" "SampleIssueTypeScreenScheme" {
  name        = "Sample Issue Type Screen Scheme"
  description = "Lorem ipsum."
  issue_type_mappings = [
    {
      issue_type_id    = "10001"
      screen_scheme_id = 10028
    },
    {
      issue_type_id    = "10004"
      screen_scheme_id = 10047
    },
    {
      issue_type_id    = "10009"
      screen_scheme_id = 10042
    },
    {
      issue_type_id    = "default"
      screen_scheme_id = 10047
    },
  ]
  replace_with = 10010 //required only when destroying the resource. Is set to null after import by default
}
```

## Schema

### Required

* `issue_type_mappings` (Attributes Set) The list of issue type to screen scheme mappings. (see [below for nested schema](broken://pages/iHP3ziiNmaX2UFbHUp4q))
* `name` (String) The name of the issue type screen scheme.

### Optional

* `description` (String) The description of the issue type screen scheme.
* `replace_with` (Number) Helper attribute. Replaces current issue type screen scheme with new one in associated projects, when performing delete operation.

### Read-Only

* `associated_projects` (Set of Number) Helper attribute. Stores in state a list of associated projects.
* `id` (Number) The ID of the issue type screen scheme.
* `last_updated` (String) Timestamp of the last Terraform update of the project component.

### Nested Schema for `issue_type_mappings`

Required:

* `issue_type_id` (String) The ID of the issue type or default. Only issue types used in classic projects are accepted. An entry for default must be provided and defines the mapping for all issue types without a screen scheme.
* `screen_scheme_id` (Number) The ID of the screen scheme. Only screen schemes used in classic projects are accepted.


# atlcloudjira\_issue\_type (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_issue_type.custom_issue_type1
  id = 10009
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10009"
resource "atlcloudjira_issue_type" "SampleIssueTypeStandard" {
  name            = "Sample issuetype"
  description     = "Sample issuetype description."
  hierarchy_level = 0
  avatar_id       = 10315
  replace_with    = 10000
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10009"
resource "atlcloudjira_issue_type" "SampleIssueTypeSubtask" {
  name            = "Sample subtask"
  description     = "Sample subtask description."
  avatar_id       = 10303
  hierarchy_level = -1
}
```

## Schema

### Required

* `hierarchy_level` (Number) Hierarchy level of the issue type. It cannot be changed after resource creation.
* `name` (String) The name of the issue type.

### Optional

* `avatar_id` (Number) The ID of the issue type's avatar.
* `description` (String) The description of the issue type.
* `replace_with` (Number) Helper attribute. In case of removal, issue type is replaced with new issue type ID.

### Read-Only

* `id` (Number) The ID of the issue type.
* `last_updated` (String) Timestamp of the last Terraform update of the Issue Type.


# atlcloudjira\_notification\_scheme (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_notification_scheme.SampleNotificationSchemeResource
  id = 10002
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10002"
resource "atlcloudjira_notification_scheme" "SampleNotificationSchemeResource" {
  allow_incomplete = true // if set to false, all events IDs must be included. If set to true, removing event from list do not change it's recipients.
  description      = "Lorem ipsum"
  name             = "Sample Notification Scheme"
  notification_events = {
    "1" = [{
      notification_type = "AllWatchers"
      parameter         = ""
      }, {
      notification_type = "ComponentLead"
      parameter         = ""
      }, {
      notification_type = "CurrentAssignee"
      parameter         = ""
      }, {
      notification_type = "CurrentUser"
      parameter         = ""
      }, {
      notification_type = "Group"
      parameter         = "mySpecialGroup"
      }, {
      notification_type = "GroupCustomField"
      parameter         = "customfield_10105"
      }, {
      notification_type = "ProjectLead"
      parameter         = ""
      }, {
      notification_type = "ProjectRole"
      parameter         = "10002"
      }, {
      notification_type = "Reporter"
      parameter         = ""
      }, {
      notification_type = "User"
      parameter         = "712020:7793726f-0b82-4dc8-ba5c-e22769c1fd16"
      }, {
      notification_type = "UserCustomField"
      parameter         = "customfield_10041"
    }]
    "10" = [{
      notification_type = "AllWatchers"
      parameter         = ""
      }, {
      notification_type = "CurrentAssignee"
      parameter         = ""
      }, {
      notification_type = "Reporter"
      parameter         = ""
    }]
  }
}
```

## Schema

### Required

* `name` (String) The name of the notification scheme.

### Optional

* `allow_incomplete` (Boolean) Helper attribute. When set to true, partial configuration can be stored and managed by Terraform. Is false, entire configuration must be stored in Terraform script.
* `description` (String) The description of the notification scheme.
* `notification_events` (Map of Set of Map of String) List of events and recipients who will receive notifications for those events.

### Read-Only

* `id` (Number) The ID of the Notification Scheme.
* `last_updated` (String) Timestamp of the last Terraform update of the Notification Scheme resource.


# atlcloudjira\_priority\_sequence (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_priority_sequence.SamplePrioritySequence
  id = 1 // It's always 1. It's a global sequence of all priorities in system. It's a virtual resource, other than priority schemes which are available in EAP.
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "1"
resource "atlcloudjira_priority_sequence" "SamplePrioritySequence" {
  sequence = [
    {
      id = 1
    },
    {
      id = 2
    },
    {
      id = 3
    },
    {
      id = 4
    },
    {
      id = 5
    },
    {
      id = 10006
    },
    {
      id = 10007
    },
  ]
}
```

## Schema

### Required

* `sequence` (Attributes List) Ordered sequence of priorities. (see [below for nested schema](broken://pages/KBk1PKv1bFexwwRkMlAh))

### Read-Only

* `id` (Number) The ID of Priority Sequence. It's always 1.
* `last_updated` (String) Timestamp of the last Terraform update of the Priority Sequence.

### Nested Schema for `sequence`

Required:

* `id` (Number) Priority ID placed in ordered sequence.


# atlcloudjira\_permission\_scheme (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_permission_scheme.SamplePermissionScheme
  id = 10004
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10004"
resource "atlcloudjira_permission_scheme" "SamplePermissionScheme" {
  allow_incomplete = false // when set to false, all permissions must be included.
  name             = "Sample Permission Scheme"
  description      = "Sample description"
  permissions = {
    ADD_COMMENTS = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    ADMINISTER_PROJECTS = [{
      parameter = "10002"
      type      = "projectRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    ASSIGNABLE_USER = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    ASSIGN_ISSUES = [{
      parameter = "10003"
      type      = "projectRole"
      }, {
      parameter = "10006"
      type      = "projectRole"
      }, {
      parameter = "80dacb68-6f79-46c6-b22e-296669e36568"
      type      = "user"
      }, {
      parameter = "mySpecialGroup"
      type      = "group"
    }]
    BROWSE_PROJECTS = [{
      parameter = ""
      type      = "anyone"
      }, {
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = ""
      type      = "assignee"
      }, {
      parameter = ""
      type      = "projectLead"
      }, {
      parameter = ""
      type      = "reporter"
      }, {
      parameter = ""
      type      = "sd.customer.portal.only"
      }, {
      parameter = "10003"
      type      = "projectRole"
      }, {
      parameter = "10006"
      type      = "projectRole"
      }, {
      parameter = "80dacb68-6f79-46c6-b22e-296669e36568"
      type      = "user"
      }, {
      parameter = "customfield_10046"
      type      = "groupCustomField"
      }, {
      parameter = "customfield_10047"
      type      = "userCustomField"
      }, {
      parameter = "jira-software"
      type      = "applicationRole"
      }, {
      parameter = "mySpecialGroup"
      type      = "group"
    }]
    CLOSE_ISSUES = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    CREATE_ATTACHMENTS = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    CREATE_ISSUES = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    DELETE_ALL_ATTACHMENTS = [{
      parameter = "10002"
      type      = "projectRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    DELETE_ALL_COMMENTS = [{
      parameter = "10002"
      type      = "projectRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    DELETE_ALL_WORKLOGS = [{
      parameter = "10002"
      type      = "projectRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    DELETE_ISSUES = [{
      parameter = "10002"
      type      = "projectRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
      }, {
      parameter = "10004"
      type      = "projectRole"
    }]
    DELETE_OWN_ATTACHMENTS = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    DELETE_OWN_COMMENTS = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    DELETE_OWN_WORKLOGS = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    EDIT_ALL_COMMENTS = [{
      parameter = "10002"
      type      = "projectRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    EDIT_ALL_WORKLOGS = [{
      parameter = "10002"
      type      = "projectRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    EDIT_ISSUES = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    EDIT_OWN_COMMENTS = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    EDIT_OWN_WORKLOGS = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    LINK_ISSUES = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    MANAGE_SPRINTS_PERMISSION = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    MANAGE_WATCHERS = [{
      parameter = "10002"
      type      = "projectRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    MODIFY_REPORTER = [{
      parameter = "10002"
      type      = "projectRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    MOVE_ISSUES = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    RESOLVE_ISSUES = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    SCHEDULE_ISSUES = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    SERVICEDESK_AGENT = [{
      parameter = "10003"
      type      = "projectRole"
    }]
    SET_ISSUE_SECURITY = [{
      parameter = "10003"
      type      = "projectRole"
    }]
    TRANSITION_ISSUES = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    VIEW_AGGREGATED_DATA = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    VIEW_DEV_TOOLS = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    VIEW_READONLY_WORKFLOW = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    VIEW_VOTERS_AND_WATCHERS = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
    WORK_ON_ISSUES = [{
      parameter = ""
      type      = "applicationRole"
      }, {
      parameter = "10003"
      type      = "projectRole"
    }]
  }
}
```

## Schema

### Required

* `name` (String) The unique name for the component in the project. Required when creating a component. Optional when updating a component.

### Optional

* `allow_incomplete` (Boolean) Helper attribute. When set to true, partial configuration can be stored and managed by Terraform. Is false, entire configuration must be stored in Terraform script.
* `description` (String) The description for the component. Optional when creating or updating a component.
* `permissions` (Map of Set of Map of String) Set of permissions and holders.

### Read-Only

* `id` (Number) The ID project component.
* `last_updated` (String) Timestamp of the last Terraform update of the project component.


# atlcloudjira\_priority (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_priority.SamplePriorityResource
  id = 10014
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10014"

resource "atlcloudjira_priority" "SamplePriorityResource" {
  name                = "Sample Priority"
  description         = "Sample description"
  icon_url            = "https://silessian-dev.atlassian.net/images/icons/priorities/lowest.svg"
  is_default          = false // set delegate_default_to while modifying to false
  status_color        = "#ABCDEF"
  replace_with        = 1                                                    // Required while destroying resource. Priority is swapped with provided priority ID.
  delegate_default_to = atlcloudjira_priority.ReplacementPriorityResource.id // Required while setting is_default to false. Default Priority is delegated to provided priority ID.
}

resource "atlcloudjira_priority" "ReplacementPriorityResource" {
  name         = "Replacement Priority"
  description  = "Test description"
  icon_url     = "https://silessian-dev.atlassian.net/images/icons/priorities/high.svg"
  is_default   = true
  status_color = "#FBCDEF"
}
```

## Schema

### Required

* `icon_url` (String) The URL of the icon for the issue priority.
* `name` (String) The name of the issue priority.
* `status_color` (String) The color used to indicate the issue priority.

### Optional

* `delegate_default_to` (Number) Helper attribute. Required when setting default to false. Default priority is delegated to provided ID.
* `description` (String) The description of the issue priority.
* `is_default` (Boolean) Whether this priority is the default.
* `replace_with` (Number) Helper attribute. Required when destroying resource. Priority is swapped with provided ID.

### Read-Only

* `id` (Number) The ID of the issue priority.
* `last_updated` (String) Timestamp of the last Terraform update of the Priority.


# atlcloudjira\_project\_component (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_project_component.SampleProjectComponent1
  id = 10004
}

import {
  to = atlcloudjira_project_component.SampleProjectComponent2
  id = 10002
}

import {
  to = atlcloudjira_project_component.SampleProjectComponent3
  id = 10006
}

import {
  to = atlcloudjira_project_component.SampleProjectComponent4
  id = 10007
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10004"
resource "atlcloudjira_project_component" "SampleProjectComponent1" {
  name            = "SampleComponent1"
  description     = "Sample description"
  assignee_type   = "COMPONENT_LEAD"
  lead_account_id = "80dacb68-6f79-46c6-b22e-296669e36568"
  project         = "CKAN"
}

# __generated__ by Terraform from "10002"
resource "atlcloudjira_project_component" "SampleProjectComponent2" {
  name            = "SampleComponent2"
  description     = "Sample description"
  assignee_type   = "COMPONENT_LEAD"
  lead_account_id = null
  project         = "CKAN"
}

# __generated__ by Terraform from "10006"
resource "atlcloudjira_project_component" "SampleProjectComponent3" {
  name            = "SampleComponent3"
  description     = null
  assignee_type   = "PROJECT_LEAD"
  lead_account_id = null
  project         = "CKAN"
}

# __generated__ by Terraform from "10007"
resource "atlcloudjira_project_component" "SampleProjectComponent4" {
  name            = "SampleComponent4"
  description     = null
  assignee_type   = "UNASSIGNED"
  lead_account_id = "5fde5ea73b5e47013845900a"
  project         = "CKAN"
}
```

## Schema

### Required

* `assignee_type` (String) The nominal user type used to determine the assignee for issues created with this component.
* `name` (String) The unique name for the component in the project. Required when creating a component. Optional when updating a component.
* `project` (String) The key of the project the component is assigned to. Required when creating a component. Can't be updated.

### Optional

* `description` (String) The description for the component. Optional when creating or updating a component.
* `lead_account_id` (String) The accountId of the component's lead user.

### Read-Only

* `id` (Number) The ID project component.
* `last_updated` (String) Timestamp of the last Terraform update of the project component.


# atlcloudjira\_project\_role (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_project_role.SampleProjectRoleResource
  id = 10006
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10006"
resource "atlcloudjira_project_role" "SampleProjectRoleResource" {
  name         = "Sample Role"
  description  = "Sample role description"
  replace_with = 10006 // Required when destroying resource. Role will be swapped with given role ID.
}
```

## Schema

### Required

* `name` (String) The unique name for the Role in the project. Required when creating a Role. Optional when updating a Role.

### Optional

* `description` (String) The description of the project role.
* `replace_with` (Number) Helper attribute. Required when destroying resource. Role is swapped with provided ID.

### Read-Only

* `id` (Number) The ID project Role.
* `last_updated` (String) Timestamp of the last Terraform update of the project role.


# atlcloudjira\_project (Resource)

## Example Usage

```terraform
/*
List of available project type key <-> Project Template Key value pairs
Project Type Key	Project Template Key
business -      com.atlassian.jira-core-project-templates:jira-core-simplified-content-management,
                com.atlassian.jira-core-project-templates:jira-core-simplified-document-approval,
                com.atlassian.jira-core-project-templates:jira-core-simplified-lead-tracking,
                com.atlassian.jira-core-project-templates:jira-core-simplified-process-control,
                com.atlassian.jira-core-project-templates:jira-core-simplified-procurement,
                com.atlassian.jira-core-project-templates:jira-core-simplified-project-management,
                com.atlassian.jira-core-project-templates:jira-core-simplified-recruitment,
                com.atlassian.jira-core-project-templates:jira-core-simplified-task-tracking

service_desk -  com.atlassian.servicedesk:simplified-it-service-management,
                com.atlassian.servicedesk:simplified-general-service-desk-it,
                com.atlassian.servicedesk:simplified-general-service-desk-business,
                com.atlassian.servicedesk:simplified-external-service-desk,
                com.atlassian.servicedesk:simplified-hr-service-desk,
                com.atlassian.servicedesk:simplified-facilities-service-desk,
                com.atlassian.servicedesk:simplified-legal-service-desk,
                com.atlassian.servicedesk:simplified-analytics-service-desk,
                com.atlassian.servicedesk:simplified-marketing-service-desk,
                com.atlassian.servicedesk:simplified-design-service-desk,
                com.atlassian.servicedesk:simplified-sales-service-desk,
                com.atlassian.servicedesk:simplified-blank-project-business,
                com.atlassian.servicedesk:simplified-blank-project-it,
                com.atlassian.servicedesk:simplified-finance-service-desk,
                com.atlassian.servicedesk:next-gen-it-service-desk,
                com.atlassian.servicedesk:next-gen-hr-service-desk,
                com.atlassian.servicedesk:next-gen-legal-service-desk,
                com.atlassian.servicedesk:next-gen-marketing-service-desk,
                com.atlassian.servicedesk:next-gen-facilities-service-desk,
                com.atlassian.servicedesk:next-gen-general-it-service-desk,
                com.atlassian.servicedesk:next-gen-general-business-service-desk,
                com.atlassian.servicedesk:next-gen-analytics-service-desk,
                com.atlassian.servicedesk:next-gen-finance-service-desk,
                com.atlassian.servicedesk:next-gen-design-service-desk,
                com.atlassian.servicedesk:next-gen-sales-service-desk

software -      com.pyxis.greenhopper.jira:gh-simplified-agility-kanban,
                com.pyxis.greenhopper.jira:gh-simplified-agility-scrum,
                com.pyxis.greenhopper.jira:gh-simplified-basic,
                com.pyxis.greenhopper.jira:gh-simplified-kanban-classic,
                com.pyxis.greenhopper.jira:gh-simplified-scrum-classic

The project types are available according to the installed Jira features as follows:
 - Jira Core, the default, enables     *business*      projects.
 - Jira Service Management enables     *service_desk*  projects.
 - Jira Software enables               *software*      projects.

To determine which features are installed, go to Jira settings > Apps > Manage apps and review the System Apps list.
To add Jira Software or Jira Service Management into a JIRA instance, use Jira settings > Apps > Finding new apps.

You cannot change PROJECT_TYPE nor PROJECT_TEMPLATE_KEY after the project is created.
*/

import {
  to = atlcloudjira_project.SampleCompanyManagedProjectResource
  id = 10067
}
# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10067"
resource "atlcloudjira_project" "SampleCompanyManagedProjectResource" {
  // Minimum required attributes
  key              = "SAMPLET1"
  name             = "Sample project 1"
  assignee_type    = "PROJECT_LEAD" // Valid values: PROJECT_LEAD, UNASSIGNED
  project_type_key = "software"     // Valid values: software, service_desk, business

  // Optional attributes
  avatar_id                  = 10417
  category_id                = 10000
  description                = "Sample description"
  field_configuration_scheme = null // When set to null, System Default Field Configuration Scheme is assigned.
  lead_account_id            = "80dacb68-6f79-46c6-b22e-296669e36568"
  url                        = "https://sample.atlassian.net/jira/projects"
  excluded_roles             = null    // Helper attribute. Can be null. Allow to exclude roles and manage only remaining project roles.
  included_roles             = [10002] // Helper attribute. Can be null. Allow to include and manage only selected project roles.
  project_roles = {
    10002 = {
      groups = null
      users  = ["80dacb68-6f79-46c6-b22e-296669e36568", "5fde5ea73b5e47013845900a"]
    }
  }

  // Share configuration schemes cannot be set during cration with project_template_key. Create and reimport resource if needed.
  issue_security_scheme    = 10000 // Cannot be set during creation when project_template_key is set
  issue_type_scheme        = 10233 // Cannot be set during creation when project_template_key is set
  issue_type_screen_scheme = 10000 // Cannot be set during creation when project_template_key is set
  notification_scheme      = 10001 // Cannot be set during creation when project_template_key is set
  permission_scheme        = 10001 // Cannot be set during creation when project_template_key is set
  workflow_scheme          = 10022 // Cannot be set during creation when project_template_key is set

  project_template_key = null // Cannot import this attribute. Can be set only during creation and can't be changed. See list above.
}
```

## Schema

### Required

* `assignee_type` (String) The default assignee type when creating issues for this project. Valid values: PROJECT\_LEAD, UNASSIGNED
* `key` (String) Project keys must be unique and start with an uppercase letter followed by one or more uppercase alphanumeric characters. The maximum length is 10 characters.
* `lead_account_id` (String) Project lead account ID.
* `name` (String) The name of the project.
* `project_type_key` (String) The project type, which defines the application-specific feature set. If you don't specify the project template you have to specify the project type.

### Optional

* `avatar_id` (Number) An integer value for the project's avatar.
* `category_id` (Number) The ID of the project's category.
* `description` (String) A brief description of the project.
* `excluded_roles` (Set of Number) Set of project roles IDs excluded from Terraform management.
* `field_configuration_scheme` (Number) The ID of the field configuration scheme for the project. When null, field configuration scheme is set to default.
* `included_roles` (Set of Number) Set of project roles IDs to be managed by Terraform.
* `issue_security_scheme` (Number) The ID of the issue security scheme for the project, which enables you to control who can and cannot view issues.
* `issue_type_scheme` (Number) The ID of the issue type scheme for the project.
* `issue_type_screen_scheme` (Number) The ID of the issue type screen scheme for the project.
* `notification_scheme` (Number) Project notification scheme ID.
* `permission_scheme` (Number) The ID of the permission scheme for the project.
* `project_roles` (Attributes Map) Map of selected project role IDs and actors assigned to given project role. (see [below for nested schema](broken://pages/iMmMm4Iqj3ezLogJTpkV))
* `project_template_key` (String) A predefined configuration for a project. The type of the projectTemplateKey must match with the type of the projectTypeKey. If project is team managed, do not combine it with configuration schemes.
* `url` (String) A link to information about this project, such as project documentation.
* `workflow_scheme` (Number) The ID of the workflow scheme for the project.

### Read-Only

* `id` (Number) The project ID.
* `last_updated` (String) Timestamp of the last Terraform update of the project.

### Nested Schema for `project_roles`

Optional:

* `groups` (Set of String) Set of Group Ids assigned to given Project Role.
* `users` (Set of String) Set of User Account Ids assigned to given Project Role.


# atlcloudjira\_screen\_scheme (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_screen_scheme.SampleScreenSchemeResource
  id = 10081
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10081"
resource "atlcloudjira_screen_scheme" "SampleScreenSchemeResource" {
  description = "Sample description"
  name        = "Sample Screen Scheme AA"
  screens = {
    create  = 10127
    default = 10125
    edit    = null
    view    = 10134
  }
}
```

## Schema

### Required

* `name` (String) The name of the screen scheme.
* `screens` (Attributes) The IDs of the screens for the screen types of the screen scheme. Only screens used in classic projects are accepted. (see [below for nested schema](broken://pages/r6Ir5prgAkVIID9OCoxg))

### Optional

* `description` (String) The description of the screen scheme.

### Read-Only

* `id` (Number) The ID of the screen scheme.
* `last_updated` (String) Timestamp of the last Terraform update of the project component.

### Nested Schema for `screens`

Required:

* `default` (Number) Default screen ID associated used at issue browsing.

Optional:

* `create` (Number) Screen ID associated with Create issue action
* `edit` (Number) Screen ID associated with Edit issue action
* `view` (Number) Screen ID associated with View issue action


# atlcloudjira\_screen (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_screen.SampleScreenResource
  id = 10175
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10175"

resource "atlcloudjira_screen" "SampleScreenResource" {
  name        = "Sample Screen"
  description = "Sample description"
  tabs = [
    {
      name   = "General"
      fields = ["issuetypeaaa", "summary", "attachment", "security", "customfield_10044", "customfield_10009", "customfield_10039"]
    },
    {
      name   = "Additional Info 2"
      fields = ["timetracking", "reporter"]
    },
    {
      name   = "Additional Info 3"
      fields = ["duedate"]
    },
  ]
}
```

## Schema

### Required

* `name` (String) TThe name of the screen.
* `tabs` (Attributes List) Ordered list of tabs visible under screen resource. (see [below for nested schema](broken://pages/A81FNbmvQJTKJ3tqdcys))

### Optional

* `description` (String) The description of the screen.

### Read-Only

* `id` (Number) The ID of Screen.
* `last_updated` (String) Timestamp of the last Terraform update of the Screen Resource.

### Nested Schema for `tabs`

Required:

* `name` (String) Tab name.

Optional:

* `fields` (List of String) Ordered list of fields assigned to tab.


# atlcloudjira\_status (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_status.SampleStatus
  id = 10004
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10004"

resource "atlcloudjira_status" "SampleStatusWithGlobalScopeResource" {
  name            = "Sample Status"
  description     = "Sample description"
  status_category = "DONE" // Valid values: TODO, IN_PROGRESS, DONE
  status_scope = {
    project = null
    type    = "GLOBAL" // Valid values: GLOBAL, PROJECT
  }
  replace_with = 1
}
```

## Schema

### Required

* `name` (String) The name of the status.
* `status_category` (String) The category of the status.

Valid values: TODO, IN\_PROGRESS, DONE

* `status_scope` (Attributes) The scope of the status. (see [below for nested schema](broken://pages/gigevoJCcTpELqdq79Wx))

### Optional

* `description` (String) The description of the status.
* `replace_with` (Number) Helper attribute. Required while destroying resource. Status will be replaced with provided status ID in all associated\_workflows to allow removal.

### Read-Only

* `associated_workflows` (Set of String) Return set of workflow IDs associated with status.
* `id` (Number) The ID of the status.
* `last_updated` (String) Timestamp of the last Terraform update of the Status.

### Nested Schema for `status_scope`

Required:

* `type` (String) The scope of the status. GLOBAL for company-managed projects and PROJECT for team-managed projects.

Valid values: PROJECT, GLOBAL

Optional:

* `project` (Attributes) The scope used in team managed projects. (see [below for nested schema](broken://pages/gigevoJCcTpELqdq79Wx))

### Nested Schema for `status_scope.project`

Optional:

* `id` (String) Project ID details.


# atlcloudjira\_workflow\_scheme (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_workflow_scheme.SampleWorkflowSchemeResource
  id = "10022"
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "10022"

resource "atlcloudjira_workflow_scheme" "TestWorkflowSchemeResource" {
  name                = "Test Workflow Scheme"
  description         = "Test description"
  default_workflow_id = "5a48e58d-7ee5-4646-b485-5f943dc02b7f"
  scope = {
    type = "GLOBAL"
  }
  workflow_issue_type_mapping = [
    {
      issue_type_ids = ["10000", "10001"]
      workflow_id    = "9306c5a2-0485-47b3-b78a-d9b4e1739261"
    },
    {
      issue_type_ids = ["10002", "10009"]
      workflow_id    = "5a48e58d-7ee5-4646-b485-5f943dc02b7f"
    },
  ]

  /* Attributes below required only during resource destruction */
  replace_with = 10039
  status_mappings_by_workflows = [
    {
      new_workflow_id = "9306c5a2-0485-47b3-b78a-d9b4e1739261"
      old_workflow_id = " 5a48e58d-7ee5-4646-b485-5f943dc02b7f"
      status_mappings = [
        {
          new_status_id = "3"
          old_status_id = "10007"
        },
        {
          new_status_id = "3"
          old_status_id = "10002"
        },
      ]
    },

    {
      new_workflow_id = "5a48e58d-7ee5-4646-b485-5f943dc02b7f"
      old_workflow_id = " jira"
      status_mappings = [
        {
          new_status_id = "3"
          old_status_id = "1"
        },
        {
          new_status_id = "3"
          old_status_id = "4"
        },
        {
          new_status_id = "3"
          old_status_id = "5"
        },
        {
          new_status_id = "3"
          old_status_id = "6"
        },
      ]
    },
  ]

  status_mappings_by_issue_types = [
    {
      issue_type_id = "10000"
      status_mappings = [
        {
          new_status_id = "3"
          old_status_id = "10007"
        },
        {
          new_status_id = "3"
          old_status_id = "10002"
        },
      ]
    },

    {
      issue_type_id = "10004"
      status_mappings = [
        {
          new_status_id = "3"
          old_status_id = "1"
        },
        {
          new_status_id = "3"
          old_status_id = "4"
        },
        {
          new_status_id = "3"
          old_status_id = "5"
        },
        {
          new_status_id = "3"
          old_status_id = "6"
        },
      ]
    },
  ]
}
```

## Schema

### Required

* `name` (String) The name of the workflow scheme.

### Optional

* `default_workflow_id` (String) The workflow ID associated with default issue types.
* `description` (String) The description of the workflow scheme.
* `replace_with` (String) Helper attribute. Required while destroying resource. Workflow Scheme will be replaced with provided ID in all associated projects to allow removal.
* `scope` (Attributes) The scope of the workflow scheme. (see [below for nested schema](broken://pages/MpltP3B5oPehRIvTTL1e))
* `status_mappings_by_issue_types` (Attributes Set) Helper attribute. Used to map workflows that are going to be deprecated from scheme. While deleting error message show what needs to be for proper operation.

Overrides, for the selected issue types, any status mappings provided in statusMappingsByWorkflows. Status mappings are required when the new workflow for an issue type doesn't contain all statuses that the old workflow has. Status mappings can be provided by a combination of statusMappingsByWorkflows and statusMappingsByIssueTypeOverride. (see [below for nested schema](broken://pages/MpltP3B5oPehRIvTTL1e))

* `status_mappings_by_workflows` (Attributes Set) Helper attribute. Used to map workflows that are going to be deprecated from scheme. While deleting error message show what needs to be for proper operation.

The status mappings by workflows. Status mappings are required when the new workflow for an issue type doesn't contain all statuses that the old workflow has. Status mappings can be provided by a combination of statusMappingsByWorkflows and statusMappingsByIssueTypeOverride. (see [below for nested schema](broken://pages/MpltP3B5oPehRIvTTL1e))

* `workflow_issue_type_mapping` (Attributes Set) Mappings from workflows to issue types. (see [below for nested schema](broken://pages/MpltP3B5oPehRIvTTL1e))

### Read-Only

* `associated_project_ids` (Set of Number) IDs of projects associated with workflow sheme.
* `id` (String) The ID of the workflow scheme.
* `last_updated` (String) Timestamp of the last Terraform update of the Workflow Scheme.
* `version_id` (String) The current UUID version details of this workflow scheme.
* `version_number` (String) The version number.

### Nested Schema for `scope`

Optional:

* `project` (Attributes) Project ID details. Used in workflow schemes associated with team-managed projects. (see [below for nested schema](broken://pages/MpltP3B5oPehRIvTTL1e))
* `type` (String) Valid values: PROJECT, GLOBAL. The scope of the workflow. GLOBAL for company-managed projects and PROJECT for team-managed projects.

### Nested Schema for `scope.project`

Optional:

* `id` (String) Project ID.

### Nested Schema for `status_mappings_by_issue_types`

Optional:

* `issue_type_id` (String) Issue type ID associated with deprecated/new workflow.
* `status_mappings` (Attributes Set) Helper attribute. While destroying resource without proper mapping, provider will show message with mapping to be filled. (see [below for nested schema](broken://pages/MpltP3B5oPehRIvTTL1e))

### Nested Schema for `status_mappings_by_issue_types.status_mappings`

Optional:

* `new_status_id` (String) Status ID that is introduced into workflow scheme. Issues will be mapped to new ID.
* `old_status_id` (String) Status ID that is disappearing from workflow scheme. Issues will be mapped to new ID.

### Nested Schema for `status_mappings_by_workflows`

Optional:

* `new_workflow_id` (String) New workflow ID that we want to introduce to workflow scheme.
* `old_workflow_id` (String) Deprecated workflow ID that we want to remove from workflow scheme.
* `status_mappings` (Attributes Set) Status mapping between new/deprecated workflow. Used to migrate issue statuses to new workflow. (see [below for nested schema](broken://pages/MpltP3B5oPehRIvTTL1e))

### Nested Schema for `status_mappings_by_workflows.status_mappings`

Optional:

* `new_status_id` (String)
* `old_status_id` (String)

### Nested Schema for `workflow_issue_type_mapping`

Optional:

* `issue_type_ids` (Set of String)
* `workflow_id` (String) Workflow Id associated with given issue type or default.


# atlcloudjira\_workflow (Resource)

## Example Usage

```terraform
import {
  to = atlcloudjira_workflow.SampleWorkflowResource
  id = "6a38811e-bb0d-47c3-b8b0-538a47f1dca1"
}

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform from "6a38811e-bb0d-47c3-b8b0-538a47f1dca1"
resource "atlcloudjira_workflow" "SampleWorkflowResource" {
  description = "Sample description"
  name        = "Sample Workflow Company Managed"
  scope = {
    project = null
    type    = "GLOBAL"
  }
  start_point_layout = {
    x = 82
    y = -31.599999999999994
  }
  statuses = [
    {
      deprecated = false
      layout = {
        x = 160.068359375
        y = 44.400000000000006
      }
      properties       = null
      status_reference = "10007"
    },
    {
      deprecated = false
      layout = {
        x = 204.67578125
        y = -37.599999999999994
      }
      properties = {
        SomeProp = "SomeValue"
      }
      status_reference = "10004"
    },
    {
      deprecated = false
      layout = {
        x = 259.546875
        y = 165.63827896118164
      }
      properties       = null
      status_reference = "10002"
    },
    {
      deprecated = false
      layout = {
        x = 305.546875
        y = 44.400000000000006
      }
      properties       = null
      status_reference = "3"
    },
  ]
  transitions = {
    1 = {
      actions               = null
      conditions            = null
      custom_issue_event_id = null
      description           = null
      from                  = null
      name                  = "Create"
      properties = {
        "jira.i18n.submit" = "common.forms.create"
        "jira.i18n.title"  = "common.forms.create"
      }
      to = {
        port             = 7
        status_reference = "10007"
      }
      transition_screen = null
      triggers          = null
      type              = "INITIAL"
      validators = [
        {
          parameters = {
            permissionKey = "CREATE_ISSUES"
          }
          rule_key = "system:check-permission-validator"
        },
      ]
    }
    11 = {
      actions = [
        {
          parameters = {
            issueSource    = "SAME"
            sourceFieldKey = "components"
            targetFieldKey = "description"
          }
          rule_key = "system:copy-value-from-other-field"
        },
        {
          parameters = {
            type = "to-current-user"
          }
          rule_key = "system:change-assignee"
        },
        {
          parameters = {
            type = "to-reporter"
          }
          rule_key = "system:change-assignee"
        },
        {
          parameters = {
            type = "to-lead"
          }
          rule_key = "system:change-assignee"
        },
        {
          parameters = {
            issueSecurityLevelId = "10040"
            roleId               = "10002"
          }
          rule_key = "system:set-security-level-from-role"
        },
      ]
      conditions = {
        condition_groups = [
          {
            condition_groups = null
            conditions = [
              {
                parameters = {
                  comparator     = "="
                  comparisonType = "NUMBER"
                  fieldId        = "customfield_10048"
                  fieldValue     = "[1]"
                }
                rule_key = "system:check-field-value"
              },
              {
                parameters = {
                  accountIds            = ""
                  allowUserCustomFields = ""
                  denyUserCustomFields  = ""
                  groupCustomFields     = ""
                  groupIds              = "b9ae8124-347d-4c67-ac4a-f4e8c491756d"
                  permissionKeys        = ""
                  roleIds               = ""
                }
                rule_key = "system:restrict-issue-transition"
              },
            ]
            operation  = "ALL"
            parameters = null
            rule_key   = null
          },
          {
            condition_groups = null
            conditions = [
              {
                parameters = {
                  accountIds            = "allow-assignee"
                  allowUserCustomFields = ""
                  denyUserCustomFields  = ""
                  groupCustomFields     = "customfield_10046"
                  groupIds              = ""
                  permissionKeys        = ""
                  roleIds               = ""
                }
                rule_key = "system:restrict-issue-transition"
              },
            ]
            operation  = "ANY"
            parameters = null
            rule_key   = null
          },
        ]
        conditions = [
          {
            condition_groups = null
            conditions       = null
            operation        = null
            parameters = {
              restrictMode = "usersAndAPI"
            }
            rule_key = "system:restrict-from-all-users"
          },
          {
            condition_groups = null
            conditions       = null
            operation        = null
            parameters       = null
            rule_key         = "system:block-in-progress-approval"
          },
          {
            condition_groups = null
            conditions       = null
            operation        = null
            parameters = {
              restrictMode = "users"
            }
            rule_key = "system:restrict-from-all-users"
          },
          {
            condition_groups = null
            conditions       = null
            operation        = null
            parameters = {
              accountIds            = "allow-reporter"
              allowUserCustomFields = ""
              denyUserCustomFields  = ""
              groupCustomFields     = ""
              groupIds              = ""
              permissionKeys        = ""
              roleIds               = ""
            }
            rule_key = "system:restrict-issue-transition"
          },
          {
            condition_groups = null
            conditions       = null
            operation        = null
            parameters = {
              accountIds            = ""
              allowUserCustomFields = ""
              denyUserCustomFields  = ""
              groupCustomFields     = ""
              groupIds              = ""
              permissionKeys        = "CREATE_ISSUES"
              roleIds               = ""
            }
            rule_key = "system:restrict-issue-transition"
          },
          {
            condition_groups = null
            conditions       = null
            operation        = null
            parameters = {
              ignoreLoopTransitions = "true"
              includeCurrentStatus  = "true"
              mostRecentStatusOnly  = "true"
              not                   = "false"
              previousStatusIds     = "10007"
            }
            rule_key = "system:previous-status-condition"
          },
        ]
        operation = "ALL"
      }
      custom_issue_event_id = null
      description           = "Some description"
      from = [
        {
          port             = 2
          status_reference = "10007"
        },
      ]
      name = "Start Progress"
      properties = {
        "jira.i18n.submit" = "startprogress.title"
        "jira.i18n.title"  = "startprogress.title"
      }
      to = {
        port             = 2
        status_reference = "3"
      }
      transition_screen = {
        parameters = {
          screenId = "1"
        }
        rule_key = "system:transition-screen"
      }
      triggers = [
        {
          parameters = {
            enabledTriggers = "pull-request-created-trigger,pull-request-declined-trigger,branch-created-trigger,review-started-trigger,pull-request-merged-trigger,pull-request-reopened-trigger,commit-created-trigger,review-abandoned-trigger,review-approval-trigger,review-closed-trigger,review-rejected-trigger,review-summarized-trigger"
          }
          rule_key = "system:development-triggers"
        },
      ]
      type = "DIRECTED"
      validators = [
        {
          parameters = {
            conditionSelected = ">="
            date1FieldKey     = "customfield_10009"
            date2FieldKey     = "duedate"
            includeTime       = "true"
            ruleType          = "dateFieldComparison"
          }
          rule_key = "system:validate-field-value"
        },
        {
          parameters = {
            excludeSubtasks = "false"
            fieldKey        = "description"
            ruleType        = "fieldHasSingleValue"
          }
          rule_key = "system:validate-field-value"
        },
        /*
        {
          parameters = {
            "class.name"  = "com.atlassian.jira.workflow.validator.UserPermissionValidator"
            nullallowed   = "true"
            permissionKey = "BROWSE_PROJECTS"
            "vars.key"    = "name"
          }
          rule_key = "system:unsupported"   // This indicates taht validator module is not supported and will throw validation errors
        },
        */
        {
          parameters = null
          rule_key   = "system:proforma-forms-attached"
        },
        {
          parameters = {
            errorMessage   = "You got problems"
            fieldsRequired = "lastViewed"
            ignoreContext  = "true"
            ruleType       = "fieldRequired"
          }
          rule_key = "system:validate-field-value"
        },
        {
          parameters = {
            fieldKey = "customfield_10030"
            regexp   = "[0-9]+ EUR$"
            ruleType = "fieldMatchesRegularExpression"
          }
          rule_key = "system:validate-field-value"
        },
      ]
    }
    21 = {
      actions               = null
      conditions            = null
      custom_issue_event_id = null
      description           = null
      from = [
        {
          port             = 5
          status_reference = "10007"
        },
      ]
      name = "Done"
      properties = {
        "jira.i18n.submit" = "jira.issuetracking.simple.workflow.action.done.name"
        "jira.i18n.title"  = "jira.issuetracking.simple.workflow.action.done.name"
      }
      to = {
        port             = 0
        status_reference = "10002"
      }
      transition_screen = {
        parameters = {
          screenId = "10136"
        }
        rule_key = "system:transition-screen"
      }
      triggers   = null
      type       = "DIRECTED"
      validators = null
    }
    31 = {
      actions               = null
      conditions            = null
      custom_issue_event_id = null
      description           = null
      from = [
        {
          port             = 7
          status_reference = "3"
        },
      ]
      name = "Stop Progress"
      properties = {
        "jira.i18n.submit" = "stopprogress.title"
        "jira.i18n.title"  = "stopprogress.title"
      }
      to = {
        port             = 3
        status_reference = "10007"
      }
      transition_screen = null
      triggers          = null
      type              = "DIRECTED"
      validators        = null
    }
    41 = {
      actions = null
      conditions = {
        condition_groups = null
        conditions = [
          {
            condition_groups = null
            conditions       = null
            operation        = null
            parameters = {
              ignoreLoopTransitions = "false"
              includeCurrentStatus  = "false"
              mostRecentStatusOnly  = "false"
              not                   = "true"
              previousStatusIds     = "3"
            }
            rule_key = "system:previous-status-condition"
          },
        ]
        operation = "ALL"
      }
      custom_issue_event_id = null
      description           = null
      from = [
        {
          port             = 5
          status_reference = "3"
        },
      ]
      name = "Done"
      properties = {
        "jira.i18n.submit" = "jira.issuetracking.simple.workflow.action.done.name"
        "jira.i18n.title"  = "jira.issuetracking.simple.workflow.action.done.name"
      }
      to = {
        port             = 2
        status_reference = "10002"
      }
      transition_screen = null
      triggers          = null
      type              = "DIRECTED"
      validators        = null
    }
    51 = {
      actions               = null
      conditions            = null
      custom_issue_event_id = null
      description           = null
      from = [
        {
          port             = 7
          status_reference = "10002"
        },
      ]
      name = "Reopen"
      properties = {
        "jira.i18n.submit" = "jira.issuetracking.simple.workflow.action.reopen.name"
        "jira.i18n.title"  = "jira.issuetracking.simple.workflow.action.reopen.name"
      }
      to = {
        port             = 6
        status_reference = "10007"
      }
      transition_screen = null
      triggers          = null
      type              = "DIRECTED"
      validators        = null
    }
    61 = {
      actions = [
        {
          parameters = {
            type = "to-current-user"
          }
          rule_key = "system:change-assignee"
        },
      ]
      conditions            = null
      custom_issue_event_id = null
      description           = null
      from = [
        {
          port             = 3
          status_reference = "10002"
        },
      ]
      name = "Reopen and start progress"
      properties = {
        "jira.i18n.submit" = "jira.issuetracking.simple.workflow.action.reopenandstartprogress.name"
        "jira.i18n.title"  = "jira.issuetracking.simple.workflow.action.reopenandstartprogress.name"
      }
      to = {
        port             = 4
        status_reference = "3"
      }
      transition_screen = null
      triggers          = null
      type              = "DIRECTED"
      validators        = null
    }
    71 = {
      actions               = null
      conditions            = null
      custom_issue_event_id = null
      description           = null
      from                  = null
      name                  = "Approved"
      properties            = null
      to = {
        port             = 0
        status_reference = "10004"
      }
      transition_screen = null
      triggers          = null
      type              = "GLOBAL"
      validators        = null
    }
  }
}
```

## Schema

### Required

* `name` (String) The name of the workflow. It can only be changed in inactive workflows.

### Optional

* `description` (String) he description of the workflow
* `scope` (Attributes) The scope of the workflow. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `start_point_layout` (Attributes) (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `statuses` (Attributes Set) The statuses to associate with the workflows. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `transitions` (Attributes Map) The conditions group associated with the transition. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))

### Read-Only

* `id` (String) The ID of the workflow.
* `last_updated` (String) Timestamp of the last Terraform update of the Workflow resource.
* `version_id` (String) Timestamp of the last Terraform update of the Workflow.
* `version_number` (String) Timestamp of the last Terraform update of the Workflow.

### Nested Schema for `scope`

Optional:

* `project` (Attributes) (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `type` (String) The scope of the workflow. GLOBAL for company-managed projects and PROJECT for team-managed projects.

### Nested Schema for `scope.project`

Optional:

* `id` (String) The ID of associated project if workflow is used in team-managed project.

### Nested Schema for `start_point_layout`

Optional:

* `x` (Number) The ID Workflow.
* `y` (Number) The ID Workflow.

### Nested Schema for `statuses`

Optional:

* `deprecated` (Boolean) Is set to false when status is in use. Set to true if status is going to be replaced.
* `layout` (Attributes) Float number position (X,Y) of the status on workflow. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `properties` (Map of String) Workflow status properties in form of key-value pair.
* `status_reference` (String) The reference status ID.

### Nested Schema for `statuses.layout`

Optional:

* `x` (Number) Float number representing horizontal position of status on workflow diagram.
* `y` (Number) Float number representing vertical position of status on workflow diagram.

### Nested Schema for `transitions`

Optional:

* `actions` (Attributes List) The post-functions of the transition. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `conditions` (Attributes) (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `custom_issue_event_id` (String) The custom event ID of the transition.
* `description` (String) Transition description.
* `from` (Attributes Set) The statuses the transition can start from. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `name` (String) Transition name
* `properties` (Map of String) The properties of the transition. Key-value pairs.
* `to` (Attributes) The status reference and port that a transition is connected to. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `transition_screen` (Attributes) Transition screen associated with transition. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `triggers` (Attributes List) The triggers of the transition. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `type` (String) Transition type. Valid values: INITIAL, GLOBAL, DIRECTED
* `validators` (Attributes List) The validators of the transition. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))

### Nested Schema for `transitions.actions`

Optional:

* `parameters` (Map of String) The parameters related to the rule. Key-value pairs.
* `rule_key` (String) Rule identifier/module.

### Nested Schema for `transitions.conditions`

Optional:

* `condition_groups` (Attributes List) The nested conditions of the condition group. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `conditions` (Attributes List) The rules for this condition. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `operation` (String) Determines how the conditions in the group are evaluated. Accepts either ANY or ALL. If ANY is used, at least one condition in the group must be true for the group to evaluate to true. If ALL is used, all conditions in the group must be true for the group to evaluate to true.

### Nested Schema for `transitions.conditions.condition_groups`

Optional:

* `condition_groups` (Attributes List) The nested conditions of the condition group. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `conditions` (Attributes List) The nested rules for this condition. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `operation` (String) Valid values: ANY, ALL
* `parameters` (Map of String) Condition parameters key/value pairs.
* `rule_key` (String) Condition rule key/module name.

### Nested Schema for `transitions.conditions.condition_groups.rule_key`

Optional:

* `parameters` (Map of String) Condition parameters key/value pairs.
* `rule_key` (String) Condition rule key/module name.

### Nested Schema for `transitions.conditions.condition_groups.rule_key`

Optional:

* `parameters` (Map of String) Condition parameters key/value pairs.
* `rule_key` (String) Condition rule key/module name.

### Nested Schema for `transitions.conditions.conditions`

Optional:

* `condition_groups` (Attributes List) The nested conditions of the condition group. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `conditions` (Attributes List) The nested rules for this condition. (see [below for nested schema](broken://pages/zyD2TO3QZXkxJhteoKIB))
* `operation` (String) Valid values: ANY, ALL
* `parameters` (Map of String) Condition parameters key/value pairs.
* `rule_key` (String) Condition rule key/module name.

### Nested Schema for `transitions.conditions.conditions.rule_key`

Optional:

* `parameters` (Map of String) Condition parameters key/value pairs.
* `rule_key` (String) Condition rule key/module name.

### Nested Schema for `transitions.conditions.conditions.rule_key`

Optional:

* `parameters` (Map of String) Condition parameters key/value pairs.
* `rule_key` (String) Condition rule key/module name.

### Nested Schema for `transitions.from`

Optional:

* `port` (Number) The port on diagram (valid values 1-8) this transition uses to connect to this status.
* `status_reference` (String) The ID reference of transition starting status.

### Nested Schema for `transitions.to`

Optional:

* `port` (Number) The port on diagram (valid values 1-8) this transition uses to connect to this status.
* `status_reference` (String) The ID reference of transition ending status.

### Nested Schema for `transitions.transition_screen`

Optional:

* `parameters` (Map of String) Transition screen parameters
* `rule_key` (String) Transition screen rule key.

### Nested Schema for `transitions.triggers`

Optional:

* `parameters` (Map of String) The parameters related to the rule. Key-value pairs.
* `rule_key` (String) Rule identifier/module.

### Nested Schema for `transitions.validators`

Optional:

* `parameters` (Map of String) The parameters related to the rule. Key-value pairs.
* `rule_key` (String) Rule identifier/module.


# How to report a bug?

How to properly report a bug

If you will have some technical difficulties with the app, go ahead and ask us a question. We will help you with the investigation what went wrong.

Please go to our support portal: <https://silessian.atlassian.net/servicedesk/customer/portals>

and choose a proper topic. Make sure you will include detailed explanation of a problem as well as details that will help us find you and your instance.


# Security statement

We are committed to improving our security posture. That’s why we created this page to answer basic questions about security in the PlanApply for Jira app.

### **Architecture**

PlanApply for Jira Cloud is a Forge App. It stores all data including:

* data related to application
* data related to users that are using it

inside of Forge App storage. Data that is sensitive is using Secret Storage provided by Atlassian. In secret store, we save:

* Remote repository connection details
* Public provider settings
* Submission settings
* JWT Token used in communication with 3rd party app
* Client secret Token, created during registration with 3rd party app
* PlanApply AI assistant tokens exchanged during 3rd party client registration.

App is communicating with 3rd party application using JWT Token, based on Atlassian forge recommendation described here: <https://developer.atlassian.com/cloud/jira/platform/understanding-jwt-for-connect-apps/>

### **What data does the app process?**

App process fetch configuration data of given instance that is available using REST API: <https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/#about>

It transform JSON data and helps to transform it into Terraform code. \
All data, before submission to external processor or remote git repository is stored in Atlassian Forge App storage.

During submission to external process, following data is sent:

* All files related to current workspace
* Origin instance URL
* Client Secret (exchanged during registration)
* JWT Token
* Callback URLs

Inside 3rd party process, data is decoded and origin host and client secret is validated against client registry. If all data matches, temporary environment (python AWS lambda, image type) is created and data is fetched into it. Environment is cleaned from any other data before processing to ensure security. During processing, workspaces files are downloaded into separate temporary directories, that are also removed just after the processing. Processed data is sent via callback URLs back to origin instance.

The same actions are happening during Git operations, but this time data is also sent or pulled from remote Git repository.

3rd party process DO NOT store any files or account specific information. It is build entirely in serverless architecture.

Logs are not containing any sensitive informations, only data related to invocations.  Logs can only collect information about errors that can happen during processing for debug purpose. Logs are retained for 90 days.

Client registry is storing data in DynamoDB. Data stored there contains:

* client\_id
* client\_secret
* installation\_id
* instance\_url

3rd party processor is currently located in AWS, eu-central-1 region. It is planned to support multiple locations in the future

AI Assistant - this feature is using different processor. It is Azure Open AI Assistants. Service is located in us-east region. Assistant operates on threads which are closed after timeout. No data is permanently stored in Azure. Logs are retained for up to 90 days.]

### **What permission does the app require? What permission does the app require?**

App requires following scope permissions in instance:

```
- 'storage:app'
- 'read:jira-work'
- 'write:jira-work'
- 'read:jira-user'
- 'manage:jira-configuration'
- 'manage:jira-project'
- 'read:app-user-token'
- 'read:app-system-token'
- 'read:workflow:jira'
- 'read:workflow-scheme:jira'
- 'read:status:jira'
- 'read:workflow.property:jira'
- 'report:personal-data'
```

Those scopes allows app to properly fetch data from instance.

### Which employees have access to what data?

App have two main features accessible by different audience. On admin page, there is a full set of pages containing configuration and Terraform code. All interactions with 3rd party processors and remote Git repositories are configured and performed from this place. Only site admins can access it.

2nd feature is a designer. It allows all users to interact and fetch configuration data based on following scopes:

* all configuration data is fetched with "asApp" scope, except:
* dashboards, projects, filters, issue security schemes, project components, workflows

After choosing a resources based on Atlassian scope,  data is fetched and restricted based on permission related to account setup in Provider settings.

### **Does the app encode all data in transit and at rest?**

Yes.

### **Does the app support data residency?**

Partially.&#x20;

Forge storage can be allocated to region.

3rd party Terraform and Git processor is now located only in EU. It is planned to match Atlassian locations.

Azure AI services are only located in us-east location.\
If you are interested in enabling your region during client registration, please contact us at <support@silessian.com>

### **Does the app have a data retention policy?**

Yes. The data are deleted 90 days after the app is uninstalled or after the first site’s inactivity. Logs are retained for 90 days.

### **Does the app have a data backup policy?**

Yes. Dynamo DB backup is managed by AWS: <https://aws.amazon.com/dynamodb/backup-restore/>

Atlassian Forge storage is managed by Atlassian.

Other systems are volatile and do not require any backup.

AWS and Azure infrastructure can be restored according to AWS SLA for disaster recovery timings.  All cloud provider statuses are available here:

{% embed url="<https://health.aws.amazon.com/health/status>" %}

{% embed url="<https://azure.status.microsoft/pl-pl/status>" %}

If you have any questions about the security, e-mail <support@silessian.com>


# We are working on this app

{% hint style="info" %}
We are working on PlanApply for Confluence Cloud.

Follow us on LinkedIn for more updates.
{% endhint %}


# We are working on this app

{% hint style="info" %}
We are working on PlanApply for Bitbucket Cloud.

Follow us on LinkedIn for more updates.
{% endhint %}


