This project is mirrored from https://:*****@github.com/hashicorp/terraform.git. Pull mirroring failed .
Repository mirroring has been paused due to too many failed attempts. It can be resumed by a project maintainer.
  1. 09 Jun, 2021 1 commit
    • Nick Fagerlund's avatar
      Remote backend: Stop setting message when creating runs · ab70879b
      Nick Fagerlund authored
      Historically, we've used TFC's default run messages as a sort of dumping
      ground for metadata about the run. We've recently decided to mostly stop
      doing that, in favor of:
      
      - Only specifying the run's source in the default message.
      - Letting TFC itself handle the default messages.
      
      Today, the remote backend explicitly sets a run message, overriding
      any default that TFC might set. This commit removes that explicit message
      so we can allow TFC to sort it out.
      
      This shouldn't have any bad effect on TFE out in the wild, because it's
      known how to set a default message for remote backend runs since late 2018.
      ab70879b
  2. 08 Jun, 2021 7 commits
  3. 03 Jun, 2021 10 commits
    • Kristin Laemmert's avatar
      tools: remove terraform-bundle. (#28876) · 5a48530f
      Kristin Laemmert authored
      * tools: remove terraform-bundle.
      
      terraform-bundle is no longer supported in the main branch of terraform. Users can build terraform-bundle from terraform tagged v0.15 and older.
      
      * add a README pointing users to the v0.15 branch
      Unverified
      5a48530f
    • Martin Atkins's avatar
      Update CHANGELOG.md · 79c61095
      Martin Atkins authored
      Unverified
      79c61095
    • Martin Atkins's avatar
      addrs: ModuleRegistryPackage for representing module registry packages · 51b0aee3
      Martin Atkins authored
      Previously we had a separation between ModuleSourceRemote and
      ModulePackage as a way to represent within the type system that there's an
      important difference between a module source address and a package address,
      because module packages often contain multiple modules and so a
      ModuleSourceRemote combines a ModulePackage with a subdirectory to
      represent one specific module.
      
      This commit applies that same strategy to ModuleSourceRegistry, creating
      a new type ModuleRegistryPackage to represent the different sort of
      package that we use for registry modules. Again, the main goal here is
      to try to reflect the conceptual modelling more directly in the type
      system so that we can more easily verify that uses of these different
      address types are correct.
      
      To make use of that, I've also lightly reworked initwd's module installer
      to use addrs.ModuleRegistryPackage directly, instead of a string
      representation thereof. This was in response to some earlier commits where
      I found myself accidentally mixing up package addresses and source
      addresses in the installRegistryModule method; with this new organization
      those bugs would've been caught at compile time, rather than only at
      unit and integration testing time.
      
      While in the area anyway, I also took this opportunity to fix some
      historical confusing names of fields in initwd.ModuleInstaller, to be
      clearer that they are only for registry packages and not for all module
      source address types.
      51b0aee3
    • Martin Atkins's avatar
      initwd: Fix registry acceptance tests for upstream registry changes · 7b2a0284
      Martin Atkins authored
      We have some tests in this package that install real modules from the real
      registry at registry.terraform.io. Those tests were written at an earlier
      time when the registry's behavior was to return the URL of a .tar.gz
      archive generated automatically by GitHub, which included an extra level
      of subdirectory that would then be reflected in the paths to the local
      copies of these modules.
      
      GitHub started rate limiting those tar archives in a way that Terraform's
      module installer couldn't authenticate to, and so the registry switched
      to returning direct git repository URLs instead, which don't have that
      extra subdirectory and so the local paths on disk now end up being a
      little different, because the actual module directories are at a different
      subdirectory of the package.
      7b2a0284
    • Martin Atkins's avatar
      configs: EntersNewPackage methods for descendant modules · 17b766c3
      Martin Atkins authored
      Now that we (in the previous commit) refactored how we deal with module
      sources to do the parsing at config loading time rather than at module
      installation time, we can expose a method to centralize the determination
      for whether a particular module call (and its resulting Config object)
      enters a new external package.
      
      We don't use this for anything yet, but in later commits we will use this
      for some cross-module features that are available only for modules
      belonging to the same package, because we assume that modules grouped
      together in a package can change together and thus it's okay to permit a
      little more coupling of internal details in that case, which would not
      be appropriate between modules that are versioned separately.
      17b766c3
    • Martin Atkins's avatar
      Refactoring of module source addresses and module installation · 1a8da653
      Martin Atkins authored
      It's been a long while since we gave close attention to the codepaths for
      module source address parsing and external module package installation.
      Due to their age, these codepaths often diverged from our modern practices
      such as representing address types in the addrs package, and encapsulating
      package installation details only in a particular location.
      
      In particular, this refactor makes source address parsing a separate step
      from module installation, which therefore makes the result of that parsing
      available to other Terraform subsystems which work with the configuration
      representation objects.
      
      This also presented the opportunity to better encapsulate our use of
      go-getter into a new package "getmodules" (echoing "getproviders"), which
      is intended to be the only part of Terraform that directly interacts with
      go-getter.
      
      This is largely just a refactor of the existing functionality into a new
      code organization, but there is one notable change in behavior here: the
      source address parsing now happens during configuration loading rather
      than module installation, which may cause errors about invalid addresses
      to be returned in different situations than before. That counts as
      backward compatible because we only promise to remain compatible with
      configurations that are _valid_, which means that they can be initialized,
      planned, and applied without any errors. This doesn't introduce any new
      error cases, and instead just makes a pre-existing error case be detected
      earlier.
      
      Our module registry client is still using its own special module address
      type from registry/regsrc for now, with a small shim from the new
      addrs.ModuleSourceRegistry type. Hopefully in a later commit we'll also
      rework the registry client to work with the new address type, but this
      commit is already big enough as it is.
      1a8da653
    • Martin Atkins's avatar
      addrs: Representation of module source addresses · 2e7db649
      Martin Atkins authored
      We've previously had the syntax and representation of module source
      addresses pretty sprawled around the codebase and intermingled with other
      systems such as the module installer.
      
      I've created a factored-out implementation here with the intention of
      enabling some later refactoring to centralize the address parsing as part
      of configuration decoding, and thus in turn allow the parsing result to
      be seen by other parts of Terraform that interact with configuration
      objects, so that they can more robustly handle differences between local
      and remote modules, and can present module addresses consistently in the
      UI.
      2e7db649
    • Martin Atkins's avatar
      getmodules: Beginnings of a new package about Terraform module packages · f2593564
      Martin Atkins authored
      This new package aims to encapsulate all of our interactions with
      go-getter to fetch remote module packages, to ensure that the rest of
      Terraform will only use the small subset of go-getter functionality that
      our modern module installer uses.
      
      In older versions of Terraform, go-getter was the entire implementation
      of module installation, but along the way we found that several aspects of
      its design are poor fit for Terraform's needs, and so now we're using it
      as just an implementation detail of Terraform's handling of remote module
      packages only, hiding it behind this wrapper API which exposes only
      the services that our module installer needs.
      
      This new package isn't actually used yet, but in a later commit we will
      change all of the other callers to go-getter to only work indirectly
      through this package, so that this will be the only package that actually
      imports the go-getter packages.
      f2593564
    • Martin Atkins's avatar
      addrs: Rename DefaultRegistryHost to DefaultProviderRegistryHost · e5f52e56
      Martin Atkins authored
      As the comment notes, this hostname is the default for provide source
      addresses. We'll shortly be adding some address types to represent module
      source addresses too, and so we'll also have DefaultModuleRegistryHost
      for that situation.
      
      (They'll actually both contain the the same hostname, but that's a
      coincidence rather than a requirement.)
      e5f52e56
    • Martin Atkins's avatar
      docs: Some notes on adopting new Unicode versions · 0f015a7f
      Martin Atkins authored
      Previously this is a task that I've just taken on using my own knowledge
      of how these parts fit together, but that's not at all a sustainable
      situation, and so here I've just documented the steps I've followed in for
      previous Unicode version upgrades, and thus which I'd expect to follow
      for future Unicode version upgrades too.
      
      I hope this is also a somewhat-interesting overview of how Terraform makes
      use of Unicode, even for folks who are just working on the other relevant
      features of Terraform and not specifically trying to change Terraform's
      Unicode support.
      
      Since I'm the primary maintainer of two of the dependencies involved in
      this it seems likely that following this process will still involve me
      in _some_ capacity, but hopefully only necessarily in the form of
      reviewing PRs and cutting new releases of those libraries.
      0f015a7f
  4. 02 Jun, 2021 8 commits
  5. 29 May, 2021 1 commit
  6. 28 May, 2021 2 commits
  7. 27 May, 2021 4 commits
    • Martin Atkins's avatar
      initwd: Error message for local paths escaping module packages · 4e74a7a4
      Martin Atkins authored
      Our module installer has a somewhat-informal idea of a "module package",
      which is some external thing we can go fetch in order to add one or more
      modules to the current configuration. Our documentation doesn't talk much
      about it because most users seem to have found the distinction between
      external and local modules pretty intuitive without us throwing a lot of
      funny terminology at them, but there are some situations where the
      distinction between a module and a module package are material to the
      end-user.
      
      One such situation is when using an absolute rather than relative
      filesystem path: we treat that as an external package in order to make the
      resulting working directory theoretically "portable" (although users can
      do various other things to defeat that), and so Terraform will copy the
      directory into .terraform/modules in the same way as it would download and
      extract a remote archive package or clone a git repository.
      
      A consequence of this, though, is that any relative paths called from
      inside a module loaded from an absolute path will fail if they try to
      traverse upward into the parent directory, because at runtime we're
      actually running from a copy of the directory that's been taking out of
      its original context.
      
      A similar sort of situation can occur in a truly remote module package if
      the author accidentally writes a "../" source path that traverses up out
      of the package root, and so this commit introduces a special error message
      for both situations that tries to be a bit clearer about there being a
      package boundary and use that to explain why installation failed.
      
      We would ideally have made escaping local references like that illegal in
      the first place, but sadly we did not and so when we rebuilt the module
      installer for Terraform v0.12 we ended up keeping the previous behavior of
      just trying it and letting it succeed if there happened to somehow be a
      matching directory at the given path, in order to remain compatible with
      situations that had worked by coincidence rather than intention. For that
      same reason, I've implemented this as a replacement error message we will
      return only if local module installation was going to fail anyway, and
      thus it only modifies the error message for some existing error situations
      rather than introducing new error situations.
      
      This also includes some light updates to the documentation to say a little
      more about how Terraform treats absolute paths, though aiming not to get
      too much into the weeds about module packages since it's something that
      most users can get away with never knowing.
      4e74a7a4
    • CJ Horton's avatar
      Merge pull request #28820 from hashicorp/radditude/refresh-error-message · 2f980f1d
      CJ Horton authored
      backend/remote: point refresh users towards -refresh-only
      Unverified
      2f980f1d
    • Alisdair McDiarmid's avatar
      Merge pull request #28819 from hashicorp/alisdair/fix-stuck-lock-when-applying-state-plan · 875f4dc4
      Alisdair McDiarmid authored
      backend/local: Fix lock when applying stale plan
      Unverified
      875f4dc4
    • CJ Horton's avatar
      314d322b
  8. 26 May, 2021 6 commits
  9. 25 May, 2021 1 commit
    • James Bardin's avatar
      return error for invalid resource import · 99d02665
      James Bardin authored
      Most legacy provider resources do not implement any import functionality
      other than returning an empty object with the given ID, relying on core
      to later read that resource and obtain the complete state. Because of
      this, we need to check the response from ReadResource for a null value,
      and use that as an indication the import id was invalid.
      99d02665