internal string Deconfigure(string cartName) { StringBuilder output = new StringBuilder(); Manifest cartridge = null; try { cartridge = GetCartridge(cartName); } catch { output.AppendLine(string.Format("CLIENT_ERROR: Corrupted cartridge {0} removed. There may be extraneous data left on system.", cartName)); string name = cartName.Split('-')[0]; string version = cartName.Split('-')[1]; try { cartridge = GetCartridgeFallback(cartName); } catch { cartridge = CartridgeRepository.Instance.Select(name, version); } string ident = Manifest.BuildIdent(cartridge.CartridgeVendor, cartridge.Name, version, cartridge.CartridgeVersion); WriteEnvironmentVariables(Path.Combine(this.container.ContainerDir, cartridge.Dir, "env"), new Dictionary <string, string>() { { string.Format("{0}_IDENT", cartridge.ShortName), ident } }); } try { StopCartridge(cartridge, new Dictionary <string, object>() { { "user_initiated", true } }); output.AppendLine(CartridgeTeardown(cartridge.Dir, true)); } catch (Exception e) { output.AppendLine(Utils.Sdk.TranslateOutForClient(e.Message, Utils.Sdk.ERROR)); } finally { DeleteCartridgeDirectory(cartridge); } return(output.ToString()); }
private void CreateCartridgeDirectory(Manifest cartridge, string softwareVersion) { string target = Path.Combine(this.container.ContainerDir, cartridge.Dir); CartridgeRepository.InstantiateCartridge(cartridge, target); string ident = Manifest.BuildIdent(cartridge.CartridgeVendor, cartridge.Name, softwareVersion, cartridge.CartridgeVersion); Dictionary <string, string> envs = new Dictionary <string, string>(); envs[string.Format("{0}_DIR", cartridge.ShortName)] = target + Path.DirectorySeparatorChar; envs[string.Format("{0}_IDENT", cartridge.ShortName)] = ident; WriteEnvironmentVariables(Path.Combine(target, "env"), envs); envs = new Dictionary <string, string>(); if (!string.IsNullOrEmpty(this.container.Namespace)) { envs["namespace"] = this.container.Namespace; } Dictionary <string, string> currentGearEnv = Environ.ForGear(this.container.ContainerDir); if (!currentGearEnv.ContainsKey("OPENSHIFT_PRIMARY_CARTRIDGE_DIR")) { envs["PRIMARY_CARTRIDGE_DIR"] = target + Path.DirectorySeparatorChar; } if (envs.Count > 0) { WriteEnvironmentVariables(Path.Combine(this.container.ContainerDir, ".env"), envs); } var prison = Prison.Prison.LoadPrisonNoAttach(PrisonIdConverter.Generate(this.container.Uuid)); Logger.Debug("Setting permisions to dir {0}, prison user {1}", target, prison.User.Username); LinuxFiles.TakeOwnership(target, prison.User.Username); Logger.Info("Created cartridge directory {0}/{1}", container.Uuid, cartridge.Dir); }