github.com/GoogleCloudPlatform/terraformer@v0.8.18/providers/octopusdeploy/generic_resources.go (about)

     1  package octopusdeploy
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/GoogleCloudPlatform/terraformer/terraformutils"
     7  	"github.com/OctopusDeploy/go-octopusdeploy/octopusdeploy"
     8  )
     9  
    10  type GenericGenerator struct {
    11  	OctopusDeployService
    12  	APIService string
    13  }
    14  
    15  // InitResources initialize the process to generate the Terraform resources from the
    16  // Octopus Deploy API.
    17  func (g *GenericGenerator) InitResources() error {
    18  	client, err := g.Client()
    19  	if err != nil {
    20  		return err
    21  	}
    22  
    23  	funcs := []func(*octopusdeploy.Client) error{
    24  		g.createResources,
    25  	}
    26  
    27  	for _, f := range funcs {
    28  		err := f(client)
    29  		if err != nil {
    30  			return err
    31  		}
    32  	}
    33  
    34  	return nil
    35  }
    36  
    37  func (g *GenericGenerator) createResources(client *octopusdeploy.Client) error {
    38  	switch strings.ToLower(g.APIService) {
    39  	case "accounts":
    40  		resources, err := client.Account.GetAll()
    41  		if err != nil {
    42  			return err
    43  		}
    44  
    45  		for _, ressource := range *resources {
    46  			g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
    47  				ressource.ID,
    48  				ressource.Name,
    49  				"octopusdeploy_account",
    50  				g.ProviderName,
    51  				[]string{},
    52  			))
    53  		}
    54  	case "certificates":
    55  		resources, err := client.Certificate.GetAll()
    56  		if err != nil {
    57  			return err
    58  		}
    59  
    60  		for _, ressource := range *resources {
    61  			g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
    62  				ressource.ID,
    63  				ressource.Name,
    64  				"octopusdeploy_certificate",
    65  				g.ProviderName,
    66  				[]string{},
    67  			))
    68  		}
    69  	// case "channels":
    70  	// TODO: Somehow there is an issue with the channels:
    71  	//    2020/02/24 16:35:55 octopusdeploy importing... channels
    72  	//    2020/02/24 16:35:55 cannot find the item
    73  
    74  	// 	resources, err := client.Channel.GetAll()
    75  	// 	if err != nil {
    76  	// 		return err
    77  	// 	}
    78  
    79  	// 	for _, ressource := range *resources {
    80  	// 		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
    81  	// 			ressource.ID,
    82  	// 			ressource.Name
    83  	// 			"octopusdeploy_channel",
    84  	// 			g.ProviderName,
    85  	// 			[]string{},
    86  	// 		))
    87  	// 	}
    88  	case "environments":
    89  		resources, err := client.Environment.GetAll()
    90  		if err != nil {
    91  			return err
    92  		}
    93  
    94  		for _, ressource := range *resources {
    95  			g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
    96  				ressource.ID,
    97  				ressource.Name,
    98  				"octopusdeploy_environment",
    99  				g.ProviderName,
   100  				[]string{},
   101  			))
   102  		}
   103  	case "feeds":
   104  		resources, err := client.Feed.GetAll()
   105  		if err != nil {
   106  			return err
   107  		}
   108  
   109  		for _, ressource := range *resources {
   110  			g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   111  				ressource.ID,
   112  				ressource.Name,
   113  				"octopusdeploy_feed",
   114  				g.ProviderName,
   115  				[]string{},
   116  			))
   117  		}
   118  	case "libraryvariablesets":
   119  		resources, err := client.LibraryVariableSet.GetAll()
   120  		if err != nil {
   121  			return err
   122  		}
   123  
   124  		for _, ressource := range *resources {
   125  			g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   126  				ressource.ID,
   127  				ressource.Name,
   128  				"octopusdeploy_library_variable_set",
   129  				g.ProviderName,
   130  				[]string{},
   131  			))
   132  		}
   133  	case "lifecycles":
   134  		resources, err := client.Lifecycle.GetAll()
   135  		if err != nil {
   136  			return err
   137  		}
   138  
   139  		for _, ressource := range *resources {
   140  			g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   141  				ressource.ID,
   142  				ressource.Name,
   143  				"octopusdeploy_lifecycle",
   144  				g.ProviderName,
   145  				[]string{},
   146  			))
   147  		}
   148  	case "projects":
   149  		resources, err := client.Project.GetAll()
   150  		if err != nil {
   151  			return err
   152  		}
   153  
   154  		for _, ressource := range *resources {
   155  			g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   156  				ressource.ID,
   157  				ressource.Name,
   158  				"octopusdeploy_project",
   159  				g.ProviderName,
   160  				[]string{},
   161  			))
   162  		}
   163  	case "projectgroups":
   164  		resources, err := client.ProjectGroup.GetAll()
   165  		if err != nil {
   166  			return err
   167  		}
   168  
   169  		for _, ressource := range *resources {
   170  			g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   171  				ressource.ID,
   172  				ressource.Name,
   173  				"octopusdeploy_project_group",
   174  				g.ProviderName,
   175  				[]string{},
   176  			))
   177  		}
   178  	case "projecttriggers":
   179  		resources, err := client.ProjectTrigger.GetAll()
   180  		if err != nil {
   181  			return err
   182  		}
   183  
   184  		for _, ressource := range *resources {
   185  			g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   186  				ressource.ID,
   187  				ressource.Name,
   188  				"octopusdeploy_project_deployment_target_trigger",
   189  				g.ProviderName,
   190  				[]string{},
   191  			))
   192  		}
   193  	case "tagsets":
   194  		resources, err := client.TagSet.GetAll()
   195  		if err != nil {
   196  			return err
   197  		}
   198  
   199  		for _, ressource := range *resources {
   200  			g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   201  				ressource.ID,
   202  				ressource.Name,
   203  				"octopusdeploy_tag_set",
   204  				g.ProviderName,
   205  				[]string{},
   206  			))
   207  		}
   208  		// case "variables":
   209  		// TODO: This cannot generate a `variables.tf` file as there is already one.
   210  
   211  		// projects, err := client.Project.GetAll()
   212  		// if err != nil {
   213  		// 	return err
   214  		// }
   215  
   216  		// for _, project := range *projects {
   217  		// 	// Variable.GetAll() returns all the variables for a specific project ID.
   218  		// 	resources, err := client.Variable.GetAll(project.ID)
   219  		// 	if err != nil {
   220  		// 		return err
   221  		// 	}
   222  
   223  		// 	for _, ressource := range resources.Variables {
   224  		// 		g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
   225  		// 			ressource.ID,
   226  		// 			ressource.Name
   227  		// 			"octopusdeploy_variable",
   228  		// 			g.ProviderName,
   229  		// 			[]string{},
   230  		// 		))
   231  		// 	}
   232  		// }
   233  	}
   234  
   235  	return nil
   236  }