in main.go [35:92]
func prepareConfigFile(ctx *cli.Context) error {
// Prepare the config directory at $HOME/.aztfexport
homeDir, err := os.UserHomeDir()
if err != nil {
return fmt.Errorf("retrieving the user's HOME directory: %v", err)
}
configDir := filepath.Join(homeDir, cfgfile.CfgDirName)
if err := os.MkdirAll(configDir, 0750); err != nil {
return fmt.Errorf("creating the config directory at %s: %v", configDir, err)
}
configFile := filepath.Join(configDir, cfgfile.CfgFileName)
_, err = os.Stat(configFile)
if err == nil {
return nil
}
if !os.IsNotExist(err) {
return nil
}
// Generate a configuration file if not exist.
// Get the installation id from following sources in order:
// 1. The Azure CLI's configuration file
// 2. The Azure PWSH's configuration file
// 3. Generate one
id, err := func() (string, error) {
if id, err := cfgfile.GetInstallationIdFromCLI(); err == nil {
return id, nil
}
if id, err := cfgfile.GetInstallationIdFromPWSH(); err == nil {
return id, nil
}
uuid, err := uuid.NewV4()
if err != nil {
return "", fmt.Errorf("generating installation id: %w", err)
}
return uuid.String(), nil
}()
if err != nil {
return err
}
cfg := cfgfile.Configuration{
InstallationId: id,
TelemetryEnabled: true,
}
b, err := json.Marshal(cfg)
if err != nil {
return fmt.Errorf("marshalling the configuration file: %v", err)
}
// #nosec G306
if err := os.WriteFile(configFile, b, 0644); err != nil {
return fmt.Errorf("writing the configuration file: %v", err)
}
return nil
}