예제 #1
0
        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());
        }
예제 #2
0
        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);
        }