Skip to Main Content
Status Under review
Created by Fraz Hamid
Created on Jan 8, 2022

RingCentral Terraform Provider - Infrastructure as Code for Admins

As a RingCentral customer I would like to see the development team look to offer infrastructure as code support for RingCentral, such as Terraform or Ansible. Allowing customers to automate the provision and ongoing management of resoruces in RingCentral accounts.

As a customer with over 230 sites each with multiple users, IVRs, Queues and devices, being able to manage this as code provides both consistency and an ability to scale.


Although the APIs are useful, our engineers prefer to work with Infrastructure as Code (IaC) as it is a lot easier. Allowing us to focus on meeting business requests, rather than developing scripts and code!



  • Fraz Hamid
    May 28, 2022

    Hi Yatin & Bryne,


    I suggest just picking one. Terraform is certainly the go-to tool that we are seeing.


    If you are looking to build something yourselves, a yaml-based configuration might work well, particularly if we can work with supplying variables as objects so that we can build out complex setups.

    As a large retailer, each of our stores consists of a site, 2x IVRs, 3x Groups and 16 users. Being able to provision this as code would be so much easier as we could re-use the code to create each site or with Terraform build a module.


    Below is a basic example in YAML I was thinking of, although its very akin to Ansible not Terraform:


    tasks:
    - name: create cost centre
    rc_costcentre:
    cost_centre_name: "{{ name }}"
    billing_code: "{{ billing_code }}"

    - name: create site
    rc_site:
    site_name: "{{ name }}"
    site_code: "{{ site_code }}"
    site_address: "{{ address }}"
    cost_centre: "{{ name }}"

    - name: create local number
    rc_local_number:
    number_location: "United Kingdom"
    number_type: "Local Number"
    county: "Hertfordshire"
    area_code: "Watford"
    assignment_type: "site"
    assign_to: "{{ name }}"

    - name: create user
    rc_user:
    license_type: "MVP"
    email: "{{ item.email }}"
    first_name: "{{ item.first_name }}"
    surname: "{{ item.surname }}"
    site_name: "{{ name }}"
    cost_centre: "{{ name }}"
    extension: "{{ item.extension }}"
    number_location: "United Kingdom"
    number_type: "Local Number"
    county: "Hertfordshire"
    area_code: "Watford"
    loop:
    {email: 'joe.bloggs@ringcentral.co.uk', first_name: 'Joe', last_name: 'Bloggs', extension: '301'}
    {email: 'jane.bloggs@ringcentral.co.uk', first_name: 'Jane', last_name: 'Bloggs', extension: '302'}

  • Admin
    Byrne Reese
    Apr 29, 2022

    Fraz - building on Yatin's question. I am a Product Manager on the Platform team and want to learn more about this request. I would love a more detailed description of the kind of experience you are looking for, with examples, etc. Because It sounds like you are describing a new type of product. For example, what kinds of things would you need a definition file to enable you to perform?

  • Yatin Gera
    Jan 20, 2022

    Hi Fraz. Thanks for submitting the idea.

    IaC could make things easier. That being said, the challenge might be to create and maintain different configurations for popular provisioning tools like Terraform, Ansible, and Puppet (and there could be more)

    We might want to look into a solution that translates a common config into a tool-specific config (or at least the most popular ones) to reduce redundancy

    Do you have anything in mind in terms of how the common configuration file should look like?

    Also, are you guys using a tool that helps you achieve something similar?