GithubHelp home page GithubHelp logo

microsoft / terraform-provider-power-platform Goto Github PK

View Code? Open in Web Editor NEW
18.0 10.0 6.0 23.54 MB

Power Platform Terraform Provider

Home Page: https://registry.terraform.io/providers/microsoft/power-platform/latest/docs

License: MIT License

Go 99.77% Shell 0.13% Makefile 0.08% HCL 0.02%
power-platform terraform terraform-provider

terraform-provider-power-platform's Introduction

Power Platform Terraform Provider

The Power Platform Terraform Provider allows managing environments and other resources within Power Platform.

Warning

This code is experimental and provided solely for evaluation purposes. It is NOT intended for production use and may contain bugs, incomplete features, or other issues. Use at your own risk, as it may undergo significant changes without notice, and no guarantees or support are provided. By using this code, you acknowledge and agree to these conditions. Consult the documentation or contact the maintainer if you have questions or concerns.

Using the Provider

The user documentation contains information about how to install, configure, and use the provider to manage Power Platform resources and data sources. More advances examples together with bootstrap script can be found in the Quick Starts Repository.

Contributing

Refer to the Contributing Guide to learn about the different types of contributions you can make to the repo.

The developer documentation outlines how to build and develop the provider.

Security

For information about reporting security concerns see the Security documentation.

OpenSSF Best Practices

Data Collection

The software may collect information about you and your use of the software and send it to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may turn off the telemetry as described in the repository. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with a copy of Microsoft’s privacy statement. Our privacy statement is located at https://go.microsoft.com/fwlink/?LinkID=824704. You can learn more about data collection and use in the help documentation and our privacy statement. Your use of the software operates as your consent to these practices.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

terraform-provider-power-platform's People

Contributors

dariuszporowski avatar dependabot[bot] avatar eduardodfmex avatar furlan avatar ianjensenisme avatar leighatami avatar magodo avatar mattdot avatar mawasile avatar microsoft-github-operations[bot] avatar microsoftopensource avatar polatengin avatar step-security-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

terraform-provider-power-platform's Issues

powerplatform_managed_environment resource

Description

Enable the ability to create a managed environment. May need to spike to see if this should be an attribute of the environment resource or its own separate resource?

Resource

  • Resource Name: powerplatform_environment or powerplatform_managed_environment
  • API documentation: see BAPI documentation or powershell cli
  • Estimated complexity/effort: moderate
  • Related resources/data sources:
    • powerplatform_environment resource

Potential Terraform Configuration

# Sample Terraform config that describes how the new resource might look.

resource "powerplatform_environment" "my_env" {
  name = "example"
  managed = true
  ...
}

OR

resource "powerplatform_environment" "my_env" {
  name = "example"
  ...
}

resource "powerplatform_managed_environment" "my_managed_environment" {
  environment_id = my_env.id
}

UI Process

To convert an environment to be a managed environment you need the following steps:

  • Sign and open the Power Platform admin center.
  • Go to the “environments” tab and select it, you will see a table with the environments, and you can verify if the environment is managed or not in the Managed column.
  • Select the environment that you want to convert to a managed environment.
  • Select the “Enable Managed Environments” tab on the top of the environment’s configuration page.

Image

Considerations

Licensing: Once enabled, users will need a Power Apps, Power Automate, or Dynamics 365 license with premium use rights to use the respective resources in this environment. Learn more

Properties Description to convert a Managed environment

Properties description to convert a unmanaged environment to be managed should consider the following properties:

  • Limit sharing
  • Solution checker enforcement (preview)
  • Usage insights
  • Maker welcome content (preview)

Note: Data Policies, the data policy section only provides a link for Power Platform Admins to see the data policies for this environment, is an informative section, will not be required for the PP TF Provider.

Configuration properties for managed environments

Image

Limit sharing

Help reduce risk by limiting how widely canvas apps can be shared. Learn more
Default Configuration: Don’t set limits (default)
Alternative configuration: Exclude sharing with security groups.
Exclude sharing with security groups is a second level option that ask for limits:
Limit total individuals who can share to: No limit (Default), alternatively user can set a value from 1 to 99.

Solution checker enforcement (preview)

Automatically verify solution checker results for security and reliability issues before solution import. Learn more
User can choose from 3 options:
• None, Turn off solution checker verification during solution import. You can continue to manually review the results in the solution explorer.
• Warm (default value), Check for security and reliability issues in the solution checker results, but do not block solution import for any issues.
• Block, Check for security and reliability issues in the solution checker results and block the solution from being imported if critical issues are found.

PP admin can choose if the solution checker will send emails only when a solution is blocked:
• Send emails only when a solution is blocked. If unchecked, you’ll also get emails when there are warnings, (default is disabled).
Also, PP admin can choose to exclude a rule.

Usage insights

Get adoption insights, like top apps and flows, in this environment. Learn more
PP Admin can enable or disable the:
• Include insights for this environment in the weekly email digest, (default is disabled).
Note: Weekly digest is a Tennant Settings list of emails, admin emails can be added to that list.

Maker welcome content (preview)

• First-time Power Apps makers will see this page in the Studio. Learn more
Power Platform Admins can fill in the welcome message in a text box with a maximum of 1500characters.
• Learn more URL.
Power Platform Admins can paste a learn more URL.

Data policies (informative)

Help safeguard your organizational data by limiting the connectors available. Learn more
The data policy section only provides a link for Power Platform Admins to see the data policies for this environment, is an informative section, will not be required for the PP TF Provider.

Definition of Done

  • Data Transfer Objects (dtos)
  • Data Client functions
  • Resource Implementation
  • Resource Added to Provider
  • Unit Tests for Happy Path
  • Unit Tests for error path
  • Acceptance Tests
  • Example in the /examples folder
  • Schema Documentation in code
  • Updated auto-generated provider docs with make docs

Contributions

Do you plan to raise a PR to address this issue? YES

See the contributing guide for more information about what's expected for contributions.

Tasks

No tasks being tracked yet.

Dlp Policy Data Source

As a TF user, I want to be able to create and manage application users

Tasks

Permissions error in dev container

Describe the bug

To Reproduce
Steps to reproduce the behavior:

  1. rebuild devcontainer
  2. run make install
  3. See permissions error

Expected behavior
No permissions errors

Additional context
switching to root is not an option

F&O Environment Guide

As a Terraform User, I want to be able to manage F&O environments

  • Create F&O environments
  • Delete F&O environments
  • Create test cases
  • Documentation
  • Example(s)

Username/Password not implemented for Dataverse operations

Describe the bug

Currently the method AuthenticateUserPass on DataverseAuth struct is not implemented. When using username/pass and trying to work (for example) with solution resource, I will end up with panic, not implemented exception

To Reproduce

Read powerplatform_solutions datasource

Expected behavior

Using username/password should work with all range of APIs that we use; that is bapi, webapi & power platform api

Contribution

Contribution

Do you plan to raise a PR to address this issue?

  • [ x] Yes
  • No

All delete operations should wait for lifecycle operation to finish

Describe the bug

Currently we just "fire and forget" delete operation on all resources, where BAPI actually returns location header with operation lifecycle URL to monitor the operation.

Contribution

Contribution

Do you plan to raise a PR to address this issue?

  • [x ] Yes
  • No

Tasks

Manage non-public clouds

As an IT pro I want to manage Power Platform resources that are in Government, China, or other non-public clouds.

  • Discuss whether this should be a provider configuration setting or an attribute on a resource
  • Implemented for BAPI client
  • Implemented for PP API client
  • Test tenants that are in other clouds
  • Fixing #53 is a prerequisite since locations will be different for other clouds

Design

provider "powerplatform" {
  cloud = "gcc" # public (default) | gcc | gcchigh | dod | ex | rx | china
} 

Configuration

Cloud BAPI Power Apps API Power Platform API OAuth Authority
public api.bap.microsoft.com api.powerapps.com api.powerplatform.com login.microsoftonline.com
gcc gov.api.bap.microsoft.us gov.api.powerapps.us api.gov.powerplatform.microsoft.us login.microsoftonline.com
gcchigh high.api.bap.microsoft.us high.api.powerapps.us api.high.powerplatform.microsoft.us login.microsoftonline.us
dod api.bap.appsplatform.us api.apps.appsplatform.us api.appsplatform.us login.microsoftonline.us
ex api.bap.eaglex.ic.gov api.powerapps.eaglex.ic.gov api.powerplatform.eaglex.ic.gov login.microsoftonline.eaglex.ic.gov
rx api.bap.microsoft.scloud api.powerapps.microsoft.scloud api.powerplatform.microsoft.scloud login.microsoftonline.microsoft.scloud
china api.bap.partner.microsoftonline.cn api.powerapps.cn api.powerplatform.partner.microsoftonline.cn login.chinacloudapi.cn

Application User Resource

As a TF user, I want to be able to create and manage application users

  • Create new APP users
  • Deactivate users, delete is not supported "At present, deleting an application user isn't supported.".
  • Select App, "Add an app".
  • Select Business unit / use default BU (existing business unit).
  • Add / edit user security roles

Doublecheck:

  • Assign users to business units (this may be a user action in user resource).
  • Remove user security roles (this may be a user action in user resource)

Unit test - RUN TestUnitConnectorsDataSource_Validate_Read datasource_connectors_test.go:74: failed to create new working directory

Describe the bug

Trying to run unit test with "make unittest" we receive the following message:

RUN TestUnitConnectorsDataSource_Validate_Read
datasource_connectors_test.go:74: failed to create new working directory

To Reproduce

Steps to reproduce the behavior:

  1. start Dev container
  2. go to path "cd /workspaces/terraform-provider-power-platform"
  3. run the command "make unittest"

Log

vscode ➜ /workspaces/terraform-provider-power-platform (edsanche/89-change-environment_name-to-be-environment_id-to-be-the-same-value-that-we-show-in-platform) $ make unittest
export TF_ACC=0
go install
go clean -testcache
go test -v ./... -run "^TestUnit"
?       github.com/microsoft/terraform-provider-power-platform  [no test files]
?       github.com/microsoft/terraform-provider-power-platform/internal/powerplatform/api       [no test files]
?       github.com/microsoft/terraform-provider-power-platform/internal/powerplatform/api/bapi  [no test files]
?       github.com/microsoft/terraform-provider-power-platform/internal/powerplatform/api/dataverse     [no test files]
?       github.com/microsoft/terraform-provider-power-platform/internal/powerplatform/api/ppapi [no test files]
?       github.com/microsoft/terraform-provider-power-platform/internal/powerplatform/clients   [no test files]
?       github.com/microsoft/terraform-provider-power-platform/internal/powerplatform/common    [no test files]
?       github.com/microsoft/terraform-provider-power-platform/internal/powerplatform/helpers   [no test files]
?       github.com/microsoft/terraform-provider-power-platform/internal/powerplatform/mocks     [no test files]
?       github.com/microsoft/terraform-provider-power-platform/internal/powerplatform/models    [no test files]
?       github.com/microsoft/terraform-provider-power-platform/internal/powerplatform/modifiers [no test files]
?       github.com/microsoft/terraform-provider-power-platform/internal/powerplatform/services/dlp_policy       [no test files]
=== RUN   TestUnitConnectorsDataSource_Validate_Read
    datasource_connectors_test.go:74: failed to create new working directory: unable to symlink directory "/workspaces/terraform-provider-power-platform/internal/powerplatform/helpers" to "/tmp/plugintest4039676913/work19214971/helpers": unable to set "/tmp/plugintest4039676913/work19214971/helpers" permissions: chmod /tmp/plugintest4039676913/work19214971/helpers: operation not permitted
--- FAIL: TestUnitConnectorsDataSource_Validate_Read (0.04s)
=== RUN   TestUnitEnvironmentsDataSource_Validate_Read
    datasource_environments_test.go:100: failed to create new working directory: unable to symlink directory "/workspaces/terraform-provider-power-platform/internal/powerplatform/helpers" to "/tmp/plugintest1761537300/work3588565813/helpers": unable to set "/tmp/plugintest1761537300/work3588565813/helpers" permissions: chmod /tmp/plugintest1761537300/work3588565813/helpers: operation not permitted
--- FAIL: TestUnitEnvironmentsDataSource_Validate_Read (0.04s)
=== RUN   TestUnitPowerAppsDataSource_Validate_Read
    datasource_powerapps_test.go:70: failed to create new working directory: unable to symlink directory "/workspaces/terraform-provider-power-platform/internal/powerplatform/helpers" to "/tmp/plugintest592977907/work735013546/helpers": unable to set "/tmp/plugintest592977907/work735013546/helpers" permissions: chmod /tmp/plugintest592977907/work735013546/helpers: operation not permitted
--- FAIL: TestUnitPowerAppsDataSource_Validate_Read (0.04s)
=== RUN   TestUnitDlpPolicyDataSource_Validate_Read
    datasource_powerplatform_data_loss_prevention_policy_test.go:288: failed to create new working directory: unable to symlink directory "/workspaces/terraform-provider-power-platform/internal/powerplatform/helpers" to "/tmp/plugintest3988889676/work1582172415/helpers": unable to set "/tmp/plugintest3988889676/work1582172415/helpers" permissions: chmod /tmp/plugintest3988889676/work1582172415/helpers: operation not permitted
--- FAIL: TestUnitDlpPolicyDataSource_Validate_Read (0.04s)
=== RUN   TestUnitSolutionsDataSource_Validate_Read
    datasource_solutions_test.go:39: failed to create new working directory: unable to symlink directory "/workspaces/terraform-provider-power-platform/internal/powerplatform/helpers" to "/tmp/plugintest1165920775/work1543528051/helpers": unable to set "/tmp/plugintest1165920775/work1543528051/helpers" permissions: chmod /tmp/plugintest1165920775/work1543528051/helpers: operation not permitted
--- FAIL: TestUnitSolutionsDataSource_Validate_Read (0.03s)
=== RUN   TestUnitPowerPlatformProvider_HasChildDataSources
--- PASS: TestUnitPowerPlatformProvider_HasChildDataSources (0.00s)
=== RUN   TestUnitPowerPlatformProvider_HasChildResources
--- PASS: TestUnitPowerPlatformProvider_HasChildResources (0.00s)
=== RUN   TestUnitEnvironmentsResource_Validate_Create_And_Force_Recreate
    resource_environment_test.go:295: failed to create new working directory: unable to symlink directory "/workspaces/terraform-provider-power-platform/internal/powerplatform/helpers" to "/tmp/plugintest1341581080/work2633772779/helpers": unable to set "/tmp/plugintest1341581080/work2633772779/helpers" permissions: chmod /tmp/plugintest1341581080/work2633772779/helpers: operation not permitted
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.CreateEnvironment(is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_environment_test.go:248
    controller.go:137: aborting test due to missing call(s)
--- FAIL: TestUnitEnvironmentsResource_Validate_Create_And_Force_Recreate (0.04s)
=== RUN   TestUnitEnvironmentsResource_Validate_Create_And_Update
    resource_environment_test.go:444: failed to create new working directory: unable to symlink directory "/workspaces/terraform-provider-power-platform/internal/powerplatform/helpers" to "/tmp/plugintest949594847/work3629174555/helpers": unable to set "/tmp/plugintest949594847/work3629174555/helpers" permissions: chmod /tmp/plugintest949594847/work3629174555/helpers: operation not permitted
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.UpdateEnvironment(is anything, is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_environment_test.go:431
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.CreateEnvironment(is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_environment_test.go:410
    controller.go:137: aborting test due to missing call(s)
--- FAIL: TestUnitEnvironmentsResource_Validate_Create_And_Update (0.04s)
=== RUN   TestUnitEnvironmentsResource_Validate_Create
    resource_environment_test.go:503: failed to create new working directory: unable to symlink directory "/workspaces/terraform-provider-power-platform/internal/powerplatform/helpers" to "/tmp/plugintest352419933/work2851512228/helpers": unable to set "/tmp/plugintest352419933/work2851512228/helpers" permissions: chmod /tmp/plugintest352419933/work2851512228/helpers: operation not permitted
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.GetEnvironment(is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_environment_test.go:473
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.CreateEnvironment(is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_environment_test.go:479
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.DeleteEnvironment(is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_environment_test.go:499
    controller.go:137: aborting test due to missing call(s)
--- FAIL: TestUnitEnvironmentsResource_Validate_Create (0.03s)
=== RUN   TestUnitDataLossPreventionPolicyResource_Validate_Update
    resource_powerplatform_data_loss_prevention_policy_test.go:341: failed to create new working directory: unable to symlink directory "/workspaces/terraform-provider-power-platform/internal/powerplatform/helpers" to "/tmp/plugintest3749801258/work688093522/helpers": unable to set "/tmp/plugintest3749801258/work688093522/helpers" permissions: chmod /tmp/plugintest3749801258/work688093522/helpers: operation not permitted
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.UpdatePolicy(is anything, is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_powerplatform_data_loss_prevention_policy_test.go:312
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.CreatePolicy(is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_powerplatform_data_loss_prevention_policy_test.go:326
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.DeletePolicy(is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_powerplatform_data_loss_prevention_policy_test.go:337
    controller.go:137: aborting test due to missing call(s)
--- FAIL: TestUnitDataLossPreventionPolicyResource_Validate_Update (0.03s)
=== RUN   TestUnitDataLossPreventionPolicyResource_Validate_Create
    resource_powerplatform_data_loss_prevention_policy_test.go:380: failed to create new working directory: unable to symlink directory "/workspaces/terraform-provider-power-platform/internal/powerplatform/helpers" to "/tmp/plugintest1961403429/work862533757/helpers": unable to set "/tmp/plugintest1961403429/work862533757/helpers" permissions: chmod /tmp/plugintest1961403429/work862533757/helpers: operation not permitted
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.DeletePolicy(is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_powerplatform_data_loss_prevention_policy_test.go:376
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.CreatePolicy(is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_powerplatform_data_loss_prevention_policy_test.go:365
    controller.go:137: aborting test due to missing call(s)
--- FAIL: TestUnitDataLossPreventionPolicyResource_Validate_Create (0.04s)
=== RUN   TestUnitSolutionResource_Validate_Create_With_Settings_File
    resource_powerplatform_solution_test.go:162: failed to create new working directory: unable to symlink directory "/workspaces/terraform-provider-power-platform/internal/powerplatform/helpers" to "/tmp/plugintest2862132898/work2916790355/helpers": unable to set "/tmp/plugintest2862132898/work2916790355/helpers" permissions: chmod /tmp/plugintest2862132898/work2916790355/helpers: operation not permitted
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.CreateEnvironment(is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_powerplatform_solution_test.go:122
    controller.go:137: aborting test due to missing call(s)
    controller.go:137: missing call(s) to *powerplatform_mocks.MockDataverseClientInterface.CreateSolution(is anything, is anything, is anything, is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_powerplatform_solution_test.go:156
    controller.go:137: aborting test due to missing call(s)
--- FAIL: TestUnitSolutionResource_Validate_Create_With_Settings_File (0.05s)
=== RUN   TestUnitSolutionResource_Validate_Create_No_Settings_File
    resource_powerplatform_solution_test.go:367: failed to create new working directory: unable to symlink directory "/workspaces/terraform-provider-power-platform/internal/powerplatform/helpers" to "/tmp/plugintest3364204633/work3042333727/helpers": unable to set "/tmp/plugintest3364204633/work3042333727/helpers" permissions: chmod /tmp/plugintest3364204633/work3042333727/helpers: operation not permitted
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.CreateEnvironment(is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_powerplatform_solution_test.go:327
    controller.go:137: aborting test due to missing call(s)
    controller.go:137: missing call(s) to *powerplatform_mocks.MockDataverseClientInterface.CreateSolution(is anything, is anything, is anything, is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_powerplatform_solution_test.go:361
    controller.go:137: aborting test due to missing call(s)
--- FAIL: TestUnitSolutionResource_Validate_Create_No_Settings_File (0.04s)
=== RUN   TestUnitSolutionResource_Validate_Create_And_Force_Recreate
    resource_powerplatform_solution_test.go:599: failed to create new working directory: unable to symlink directory "/workspaces/terraform-provider-power-platform/internal/powerplatform/helpers" to "/tmp/plugintest682267613/work1022383398/helpers": unable to set "/tmp/plugintest682267613/work1022383398/helpers" permissions: chmod /tmp/plugintest682267613/work1022383398/helpers: operation not permitted
    controller.go:137: missing call(s) to *powerplatform_mocks.MockBapiClientInterface.CreateEnvironment(is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_powerplatform_solution_test.go:559
    controller.go:137: aborting test due to missing call(s)
    controller.go:137: missing call(s) to *powerplatform_mocks.MockDataverseClientInterface.CreateSolution(is anything, is anything, is anything, is anything, is anything) /workspaces/terraform-provider-power-platform/internal/powerplatform/resource_powerplatform_solution_test.go:593
    controller.go:137: aborting test due to missing call(s)
--- FAIL: TestUnitSolutionResource_Validate_Create_And_Force_Recreate (0.05s)
FAIL
FAIL    github.com/microsoft/terraform-provider-power-platform/internal/powerplatform   0.523s
FAIL
make: *** [makefile:24: unittest] Error 1

Expected behavior

Unit test's executed with command: "make unittest" will run without permissions errors, if there is a previous required step, we will document the correct process.

System Information

  • Repository Dev Container

Additional context

Add any other context about the problem here.

Contribution

Contribution

Do you plan to raise a PR to address this issue?

  • [x ] Yes
  • No

DynamicsEntitlementMissing & LinkedAppMetadataUnauthorized exceptions when creating environment

Describe the bug

  1. Currently the environment's template metadata is hardcoded in env creation process, that should not be the case.
  2. If no template metadata is set in HCL, then no JSON object should be send for templates (check "omiempty in go lang). If a template is send and the tenant is not enabled for it then "DynamicsEntitlementMissing message:You do not have the required Dynamics 365 licenses to create databases with the 'Finance (Preview)' Dynamics app." is thrown, stopping env creation process.
  3. I also don't thing that TemplateMetadata property should be string, it should a a collection of ProvisionPackages (see HCL example)
  4. Same goes for LinkedApp metadata. JSON object should not send if no LinkedApp was set for the user (also no "" should be send as properties), otherwise BAPI returns " status: 401, body: map[error:map[code:LinkedAppMetadataUnauthorized
    message:Unauthorized to create environment with LinkedAppMetadata.]]" message as this is FCB feature right now
  5. We can consider splitting template metadata & linkedApp out for the environment if we can send it together is env creation keeping it a separate resource(s). Those can't be send on env update?

Sample Terraform Code

resource "powerplatform_environment" "development" {
  display_name     = "example_environment"
  location         = "europe"
  language_code    = "1033"
  currency_code    = "USD"
  environment_type = "Sandbox"
  domain           = "mydomain"
  templates = toset([ "aaa", "bbb" ])
  temapltes_metadata = toset([
   {
         application_name = "foo"
         params = "bar"
   },
   {
         application_name = "foo"
         params = "bar"
   }
  ])
  linked_app_type = "bla"
  linked_app_id = "bli"
  linked_app_url = "ble" 
}

Expected behavior

no JSON (sub)object for templates and linked apps should be send if those where not explicitly specified by the customer in HCL resource definition

System Information

  • Provider Version: [e.g. 0.2.2]
  • OS & Version: [e.g. Windows, Linux, MacOS]

Contribution

Do you plan to raise a PR to address this issue?

  • Yes
  • No

Support Policy

As a Terraform user, I want clear understanding of how this provider is supported.

Need to update the /SUPPORT.md file with the appropriate support information. See the current markdown file for sections that need to be completed and/or edited

Tasks

  1. 3 of 4
    security
    eduardodfmex

Change "environment_name" to be "environment_id" the required value is the ID number

Describe the bug

Change "environment_name" to be "environment_id" Terraform deployment may ask for the ID not the name, In the Admin Portal we show "environment_id".

Environment ID
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Users of the Platform need to get the "environment_id" value not the "environment_name"

In the

To Reproduce

Steps to reproduce the behavior:

  1. Go to 'Power Platform admin center'
  2. Click on your environment'
  3. Scroll down to 'find your environment id'
  4. If you use "environment_name" value the terraform deployment dont work

Sample Terraform Code

If applicable, add terraform code to help explain your problem.

REMINDER: REMOVE SENSITIVE DATA SUCH AS SECRETS, USER NAMES, EMAILS, TENANT INFORMATION, ETC.

Expected behavior

A clear and concise description of what you expected to happen.

System Information

  • Provider Version: [e.g. 0.2.2]
  • OS & Version: [e.g. Windows, Linux, MacOS]

Additional context

Add any other context about the problem here.

Contribution

Contribution

Do you plan to raise a PR to address this issue?

  • Yes
  • No

Tasks

No tasks being tracked yet.

Currency code missing on environment read operations

Describe the bug

Currently the currency code is a required value to create an environment resource but due to how BAPI is built, not available on retrieve on the environment. In order for terraform import to work on a given resource, all properties from needed to create it have to be expose on retrieve.

Expected behavior

read iso currency code from dataverse and expose currency_code on retrieve

System Information

  • Provider Version: [e.g. 0.2.2]
  • OS & Version: [e.g. Windows, Linux, MacOS]

Contribution

Do you plan to raise a PR to address this issue?

  • [ x] Yes
  • No

Data Source: powerplatform_environment_templates data source

Description

To automatically keep the provider's available options up to date, we need a datasource that returns the available environment template results from https://api.bap.microsoft.com/providers/Microsoft.BusinessAppPlatform/locations/[YOUR ENVIRONMENT LOCATION]//templates?api-version=2023-06-01. For starters, F&O deployments depend on this list, but other environment deployments will follow.

Data Source

Potential Terraform Configuration

# Sample Terraform config that describes how the new resource might look.

data "powerplatform_environment_templates" "us_templates" {
  location = "unitedstates"
}

Definition of Done

  • Data Transfer Objects (dtos)
  • Data Client functions
  • Resource Implementation
  • Resource Added to Provider
  • Unit Tests for Happy Path
  • Unit Tests for error path
  • Acceptance Tests
  • Example in the /examples folder
  • Schema Documentation in code
  • Updated auto-generated provider docs with make docs

Contributions

Do you plan to raise a PR to address this issue? YES

See the contributing guide for more information about what's expected for contributions.

Enable CodeQL for the repo

Turning on CodeQL for a GitHub repository enhances security by automatically identifying potential vulnerabilities and coding errors within the codebase. By using semantic code analysis, CodeQL helps developers understand potential risks, making it easier to remediate issues early in the development process, thereby improving the overall quality and robustness of the software.

Unit tests don't provide coverage for API client and DTO code

Describe the bug

Because unit tests are currently mocked at the client level. Any changes to api client code or DTO encoding do not get checked by unit tests.

To Reproduce

change the json encoding of a DTO object to something that is not in the API

Expected behavior

Expect that a unit test would fail because it is not properly encoding and decoding json according to API spec.

Will You Submit a PR?

  • Yes, I plan to submit a PR.

As a contributor, I want clear developer documentation

Tasks

Dlp Policy Resource

As a TF user, I want to be able to create and manage DLP policies

Tasks

Add .tfvars to better manage local variables

Describe the bug
We need a more persistent local mechanism for storing local variables than the current documented recommendation.

To Reproduce
Steps to reproduce the behavior:

  1. Go to the dev container
  2. Export variables
  3. Rebuild dev container
  4. Lose variables

Expected behavior
Local variables persist through broad dev container changes

Screenshots
If applicable, add screenshots to help explain your problem.

Additional context
.tfvars would need to be in the .gitignore, although we will also want a sample in the repo.

powerplatform_application_package Resource

Description

A resource that allows users to install application packages from the available application packages in the tenant.

Resource

  • Resource Name: powerplatform_application_package
  • API documentation:
  • Install Application Package
  • Get Application Package Install Status used to poll for status when creating/deleting the resource
  • Estimated complexity/effort: moderate
  • Related resources/data sources:
    • powerplatform_environment resource
    • powerplatform_environment_application_package data source - #101

Potential Terraform Configuration

# Sample Terraform config that describes how the new resource might look.

resource "powerplatform_application_package" {
  environment_id = "42114a70-3d0e-4c6d-b122-80f03ee11dbf"
  application_package = "package_unique_name"
}

Definition of Done

  • Data Transfer Objects (dtos)
  • Data Client functions
  • Resource Implementation
  • Resource Added to Provider
  • Unit Tests for Happy Path
  • Unit Tests for error path
  • Acceptance Tests
  • Example in the /examples folder
  • Schema Documentation in code
  • Updated auto-generated provider docs with make docs

Contributions

Do you plan to raise a PR to address this issue? YES

See the contributing guide for more information about what's expected for contributions.

SAP Connector Guide

As a user, I want a quick start guide that shows me how to use terraform to create and configure a connection from Power Platform to SAP via the data gateway.

Tasks

Test Coverage

As the TF provider maintainer, I want tests to achieve 85% coverage

  • implement GoLang code coverage for tests
  • implement missing tests to achieve 85% coverage
  • add coverage to repo build
  • Refactor TF plug-in framework
  • Developer documentation

Implement Solution Checker for Managed Environments

Solution Checker for Managed environments

Managed environments requires the configuration of Solution checker, You can use solution checker in Managed Environments to enforce rich static analysis checks on your solutions against a set of best practice rules and identify problematic patterns.

Solution Checker enforcement description

Automatically verify solution checker results for security and reliability issues before solution import. Learn more

Solution Checker ask for 3 kinds of enforcement:

• None, Turn off solution checker verification during solution import. You can continue to manually review the results in the solution explorer.
• Warm, Check for security and reliability issues in the solution checker results, but do not block solution import for any issues.
• Block, Check for security and reliability issues in the solution checker results and block the solution from being imported if critical issues are found.

Rule exclusions / Excluded Rules

You can select to exclude solution checker rules from enforcement. For example, a particular rule might take significant time and effort to fix across the solution, but you would still like the rest of the rules to be enforced. Use the Excluded Rules dropdown list to select the rules to exclude from enforcement.

Image

The list contains rule names and descriptions grouped by category and sorted by severity. As a reminder, only critical severity rules block a solution from being imported.

Image

Excluded Rules for Managed Environments
Image

Useful links:
Solution checker enforcement in Managed Environments - Power Platform | Microsoft Learn
Use solution checker to validate your solutions - Power Apps | Microsoft Learn

Resource

  • Resource Name: powerplatform_[your resource name]
  • API documentation:
  • Estimated complexity/effort:
  • Related resources/data sources:

Potential Terraform Configuration

# Sample Terraform config that describes how the new resource might look.

resource "example_resource" {
  name = "example"
  parameter1 = "value1"
  parameter2 = "value2"
}

Definition of Done

  • Data Transfer Objects (dtos)
  • Data Client functions
  • Resource Implementation
  • Resource Added to Provider
  • Unit Tests for Happy Path
  • Unit Tests for error path
  • Acceptance Tests
  • Example in the /examples folder
  • Schema Documentation in code
  • Updated auto-generated provider docs with make docs

Contributions

Do you plan to raise a PR to address this issue?

  • Yes
  • No

See the contributing guide for more information about what's expected for contributions.

Install PowerShell 7 in a VM

Description

As part of the SAP Integration infrastructure, it's necessary to install PowerShell 7 in order to enable the VM to install On-premises data gateway.

Example Details

  • Proposed Name: 301-sap-gateway
  • Supporting documentation:
  • Estimated complexity/effort: moderated
  • Related resources/data sources: azurerm_shared_image_gallery, azurerm_gallery_application, and azurerm_gallery_application_version

Pre-requisites:

Storage account with installation files or scripts.

Potential Terraform Configuration

# Sample Terraform config that describes how the new resource might look.

resource "azurerm_shared_image_gallery" "example" {
  name                = "examplegallery"
  resource_group_name = var.resource_group_name
  location            = var.region
}

resource "azurerm_gallery_application" "example" {
  name              = "example-app"
  gallery_id        = azurerm_shared_image_gallery.example.id
  location          = var.region
  supported_os_type = "Windows"
}

resource "azurerm_gallery_application_version" "example" {
  name                   = "0.0.1"
  gallery_application_id = azurerm_gallery_application.example.id
  location               = var.region

  manage_action {
    install = "move .\\PowerShell7 .\\PowerShell-7.3.7-win-x64.msi & start /wait %windir%\\system32\\msiexec.exe /i PowerShell-7.3.7-win-x64.msi /qn /L*V 'C:Install_Test'"
    remove  = "echo"
  }

  source {
    media_link = "https://opdgwsetup.blob.core.windows.net/binaries/PowerShell-7.3.7-win-x64.msi"
  }

  target_region {
    name                   = var.region
    regional_replica_count = 1
  }
}

Definition of Done

  • Example in the /examples/quickstarts folder
  • Example documentation in README.md.tmpl
  • Updated auto-generated provider docs with make quickstarts
  • Confirmation that you have manually tested this

Contributions

Do you plan to raise a PR to address this issue?

  • Yes
  • No

See the contributing guide for more information about what's expected for contributions.

User Resource

As a TF user, I want to be able to create and manage users

  • Create new users
  • Delete users
  • Deactivate users
  • Assign users to business units
  • Add user security roles
  • Remove user security roles

Terraform Provider Observability

As an IT Pro, I want to be able to observe and monitor my Terraform provider

  • Ability to import TF provider logs into Open Telemetry
  • Ability to export TF provider logs data to AppInsights
  • Add more logging
  • Create test cases
  • Documentation

As a maintainer, I want to create releases of the provider

Tasks

powerplatform_billing_policy resources and data sources

resource "powerplatform_billing_policy" "paygo" {
  location = "westus"
  name = "Sample PayGo"
  status = "Enabled"
  billing_instrument {
    resourceGroup = "mypaygoresourcegroup"
    subscriptionId = "00000000-0000-0000-0000-000000000000"
  }
}

resource "powerplatform_billing_policy_environment" "paygo_for_myenv" {
  billing_policy_id = powerplatform_billing_policy.paygo.id
  environment_ids = [ powerplatform_environment.myenv.id ]
}

Git connectivity from within the Dev container

Provide guidance or an improved solution for interacting with git from within the Dev container. This affects developer experience, but there is a workaround of using git outside the container. Ideally we could fix this but at least we should document the workarounds in the developer.md documentation.

  • Git doesn't work out-of-the-box within the dev container. Requires some configuration
  • Maybe installing github cli in container may be helpful and it's useful anyway for installing private releases
  • there is some documentation on containers.dev about sharing git context between host and dev container.

Minimize dependencies between features and services

Current structure of the provider requires resource/data source developers to touch a lot of parts of the provider when making their contributions. Contributions thus far have been inconsistent on actually implementing all of those places.

  • Refactor API clients so that APIs supporting a feature set are maintained with that feature set
  • Improve dependency injection and testability of features
  • Many of our unit tests are not actually testing anything valuable
  • Simplify the contribution experience for external developers

BAPI Authentication Token Needs to be Refreshed At Least Hourly

Describe the bug
Long-running operations using the current iteration of the provider will eventually time out due to the BAPI authentication token expiring (it looks like it's only good for an hour or so).

To Reproduce
Steps to reproduce the behavior:

  1. Run a long-running BAPI operation (a F&O environment deployment, for example)
  2. Leave the console running to observe the status updates
  3. After about an hour, see the error:

│ Error: Client error when creating powerplatform

│ with powerplatform_environment.development,
│ on resource.tf line 16, in resource "powerplatform_environment" "development":
│ 16: resource "powerplatform_environment" "development" {

│ status: 401, body: map[error:map[code:ExpiredAuthenticationToken message:The received access token has expiry UTC time '9/14/2023 6:03:16 PM'
│ which is earlier than current UTC time '9/14/2023 6:08:17 PM'.]]

Expected behavior
The provider should retrieve a new token when the current token is due to expire.

Screenshots

image

Action required: self-attest your goal for this repository

It's time to review and renew the intent of this repository

An owner or administrator of this repository has previously indicated that this repository can not be migrate to GitHub inside Microsoft because it is going public, open source, or it is used to collaborate with external parties (customers, partners, suppliers, etc.).

Action

👀 ✍️ In order to keep Microsoft secure, we require repository owners and administrators to review this repository and regularly renew the intent whether to opt-in or opt-out of migration to GitHub inside Microsoft which is specifically intended for private or internal projects.

❗Only users with admin permission in the repository are allowed to respond. Failure to provide a response will result to your repository getting automatically archived. 🔒

Instructions

❌ Opt-out of migration

If this repository can not be migrated to GitHub inside Microsoft, you can opt-out of migration by replying with a comment on this issue containing one of the following optout command options below.

@gimsvc optout --reason <staging|collaboration|delete|other>

Example: @gimsvc optout --reason staging

Options:

  • staging : My project will ship as Open Source
  • collaboration : Used for external or 3rd party collaboration with customers, partners, suppliers, etc.
  • delete : This repository will be deleted because it is no longer needed.
  • other : Other reasons not specified

✅ Opt-in to migrate

If the circumstances of this repository has changed and you decide that you need to migrate, then you can specify the optin command below. For example, the repository is no longer going public, open source or require external collaboration.

@gimsvc optin --date <target_migration_date in mm-dd-yyyy format>

Example: @gimsvc optin --date 03-15-2023

Click here for more information about optin and optout command options and examples

Opt-in

@gimsvc optin --date <target_migration_date>

When opting-in to migrate your repository, the --date option is required followed by your specified migration date using the format: mm-dd-yyyy

@gimsvc optin --date 03-15-2023

Opt-out

@gimsvc optout --reason <staging|collaboration|delete|other>

When opting-out of migration, you need to specify the --reason.

  • staging
    • My project will ship as Open Source
  • collaboration
    • Used for external or 3rd party collaboration with customers, partners, suppliers, etc.
  • delete
    • This repository will be deleted because it is no longer needed.
  • other
    • Other reasons not specified

Examples:

@gimsvc optout --reason staging

@gimsvc optout --reason collaboration

@gimsvc optout --reason delete

@gimsvc optout --reason other

Need more help? 🖐️

Terraform plugin version upgrade doesn't compile

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

Resource: powerplatform_data_record

As a Terraform user, I want to be able to create or set values to dataverse records so that I can manage configuration of some environment features and/or prepopulate some data fields. This user story is for the resource only (no data source).

Use Cases

  • Adding teams
  • Adding environments references to a Power Pipeline environment

Design Considerations

Type mapping

Terraform Type Dataverse Type Use
string StringType Single line of text
string UniqueidentifierType Unique identifiers
bool BoolType Boolean
number IntegerType Integer numbers
number DoubleType Floating point
number DecimalType Precision decimal
string DateTimeType Date Only or DateTime
set Maybe for multiple links to other tables?
list not supported
map not supported
null what to do with null?

You should be able to just pass as json types, but if you need to figure out what the type of the column is, use the EntityDefinition API documented here https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/query-metadata-web-api

Sample Terraform

Simple example

resource powerplatform_data_record {
	environment_id = "0000000"
	table_name = "systemusers"
	columns = {
		fullname = "Admin AdminOnMicrosoft"
		emailrouteraccessapproval = 1
		foo = "baar"
	}
}

Relationships can be expressed using the @data.bind syntax. We may need a custom type for object references. Don't implement this without a subsequent conversation.

resource powerplatform_data_record {
	environment_id = "0000000"
	table_name = "systemusers"
	columns = {
		fullname = "Admin AdminOnMicrosoft"
		emailrouteraccessapproval = 1
		foo = "baar"
                
		primarycontactid = {
			entity_logical_name = "teams"
			data_record_id = "0000000000"
		},
		Account_Tasks = [
			{
				entity_logical_name = "tasks"
				data_record_id = "0000000001"
			},
			{
				entity_logical_name = "tasks"
				data_record_id = "0000000002"
			}
 
		]
	}
}

Additional Information (Don't use without additional discussion)

Insert Type??

resource powerplatform_data_record {
	environment_id = "0000000"
	table_name = "account"
        insert_type = "upsert" # insert | upsert
	columns = {
        }
}

`domain` on `powerplatform_environment` should be optional

Describe the bug

The domain attribute in the resource is required but appears to only be optional in the Admin Center UX

image

Sample Terraform Code

resource "powerplatform_environment" "hello_power_platform" {
  location          = "unitedstates"
  language_code     = 1033
  display_name      = "Hello Power Platform"
  currency_code     = "USD"
  environment_type  = "Trial"
  security_group_id = "00000000-0000-0000-0000-000000000000"
}

results in

│ Error: Missing required argument
│ 
│   on main.tf line 27, in resource "powerplatform_environment" "hello_power_platform":
│   27: resource "powerplatform_environment" "hello_power_platform" {
│ 
│ The argument "domain" is required, but no definition was found.

Expected behavior

Accept the terraform and create a system generated domain

System Information

  • Provider Version: 0.4.0-preview
  • OS & Version: Linux

Additional context

Add any other context about the problem here.

Contribution

Do you plan to raise a PR to address this issue? NO

Resource: powerplatform_tenant_settings

Description

Power Platform Tenant settings allows administrators to manage and review tenant-level settings for all environments within your tenant. Most settings apply to all environments within your tenant, but some of these settings apply only to Managed Environments.

  • Copilot: Allows canvas app makers and admins to get AI-powered answers to how-to questions.
  • Weekly digest: Manage more recipients for the weekly digest email for Managed Environments.
  • Developer environment assignments: Control who can create and manage developer environments.
  • Production environment assignments: Control who can create and manage production and sandbox environments.
  • Trial environment assignments: Control who can create and manage trial environments.
  • Add-on capacity assignments: Control who can allocate add-on capacity to an environment.
  • Analytics: Enable tenant-level analytics.
  • Customer Lockbox: Enable the Customer Lockbox policy for Managed Environments.
  • Data sharing for Dynamics 365 Copilot and Power Platform Copilot AI Features: Enable Microsoft to capture and human review inputs, outputs, telemetry from Dynamics 365 Copilot and Power Platform Copilot AI features to build, improve, and validate Microsoft's machine leaning models, features, services, and related systems. By default, this setting is disabled.

Resource

  • Resource Name: powerplatform_tenant_settings
  • API documentation: BAPI
    • https:///providers/Microsoft.BusinessAppPlatform/tenantSettings?api-version={api-version}
  • Estimated complexity/effort: hard because tenant_settings can't be created or deleted. This creates a non-standard terraform resource that we need to figure out the best approach to implement.
  • Related resources/data sources:

Potential Terraform Configuration

# Sample Terraform config that describes how the new resource might look.

resource "powerplatform_tenant_settings" "settings" {
  disable_newsletter_sendout= true
}

Definition of Done

  • Data Transfer Objects (dtos)
  • Data Client functions
  • Resource Implementation
  • Resource Added to Provider
  • Unit Tests for Happy Path
  • Unit Tests for error path
  • Acceptance Tests
  • Example in the /examples folder
  • Schema Documentation in code
  • Updated auto-generated provider docs with make docs

Contributions

Do you plan to raise a PR to address this issue?

  • Yes
  • No

See the contributing guide for more information about what's expected for contributions.

Power Platform Export to Terraform Utility

As an IT Pro, I want the ability to export my current Power Platform infrastructure into Terraform modules so that I can manage my existing infrastructure using Terraform.

  • Documentation
  • Implementation:

powerplatform_environment_application_package DataSource

Design Proposal

Sample page;

https://admin.powerplatform.microsoft.com/resources/applications

image

Requirements

Users should be able to

  • get list of applications available on an environment
  • filter applications using
    • environment_id (datatype: guid)
    • environment_name (datatype: string)

Application data structure should at least provide the following fields

  • id
  • name
  • environment_id
  • environment_name

Proposed Solution

Scenario: As a user, I should be able to get list of all applications on an environment

terraform {
  required_providers {
    powerplatform = {
      version = "0.2"
      source  = "microsoft/power-platform"
    }
  }
}

data "powerplatform_applications" "applications_by_environment_id" {
  environment_id = "00000000-0000-0000-0000-000000000000"
}

Scenario: As a user, I should be able to filter applications

terraform {
  required_providers {
    powerplatform = {
      version = "0.2"
      source  = "microsoft/power-platform"
    }
  }
}

data "powerplatform_environments" "applications_by_status" {
  environment_id = "00000000-0000-0000-0000-000000000000"
  status = "installed"
}

Notes

Provider will fetch all the applications available on the target environment, then filter them based on the filters provided and returned to user

Provider doesn't support CREATE, UPDATE and DELETE methods

Authentication

API Endpoints

Official documentation can be found on; https://learn.microsoft.com/en-us/rest/api/power-platform/appmanagement/applications/get-environment-application-package

https://api.powerplatform.com will be used to communicate to PowerPlatform Api

  • GET all applications: /appmanagement/environments/{ENVIRONMENT_ID}/applicationPackages

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.