mirror of https://github.com/pulumi/pulumi.git
17b66dfc56
In order for PCL to serve as an authoritative intermediate language for Pulumi programs, it needs to be able to express all the concepts available to a Pulumi program written in a high-level programming language. Put another way, it must be capable of expressing all the functionality exposed by the `ResourceMonitor` interface. Presently, the ability to `Call` methods on component resources is not available in PCL. This change adds a new `call` intrinsic to fix that. `call` has three required arguments: the receiver (that will become the `__self__` argument under the hood), the method name (that must exist in the resource's `Methods` map in schema), and an object of arguments (whose specifications must appear in the corresponding `Function` in the schema). An example use of `call` might thus look as follows: ```hcl resource "c" "pkg:index:Callable" { ... } output "o" { value = call(c, "method", { x = 1, y = 2 }) } ``` In order to type check and applications of `call` when binding PCL programs, we use the recently powered-up annotations feature to look up the resource node of the receiver from its expression. With this, we are able to grab the schema and validate the method name and arguments. While we add unit tests for binding programs that use `call`, this change does not extend program generation or the conformance test suite. This will be done in a subsequent set of changes. Part of fixing pulumi/pulumi-java#262 |
||
---|---|---|
.. | ||
cgstrings | ||
convert | ||
dotnet | ||
gen_program_test | ||
go | ||
hcl2 | ||
nodejs | ||
pcl | ||
python | ||
report | ||
schema | ||
testing | ||
README.md | ||
docs.go | ||
docs_test.go | ||
programs.md | ||
sdks.md | ||
utilities.go | ||
utilities_test.go | ||
utilities_types.go |
README.md
(codegen)= (crosscode)=
Code generation
Code generation is essential to Pulumi's ability to support both a variety of programming languages and a variety of cloud providers. This package defines the core components of Pulumi's code generation functionality (known as Pulumi CrossCode). At a high level, code generation is used to manage three categories of output: SDKs, programs, and documentation. At a lower level, these all make use of a number of shared concepts such as schema and Pulumi Configuration Language (PCL).
:::{toctree} :maxdepth: 1 :titlesonly:
/pkg/codegen/sdks.md /pkg/codegen/programs.md /pkg/codegen/docs/README /pkg/codegen/schema/README /pkg/codegen/pcl/README :::