#Licensed to the Apache Software Foundation (ASF) under one
#or more contributor license agreements.  See the NOTICE file
#distributed with this work for additional information
#regarding copyright ownership.  The ASF licenses this file
#to you under the Apache License, Version 2.0 (the
#"License"); you may not use this file except in compliance
#with the License.  You may obtain a copy of the License at
#http://www.apache.org/licenses/LICENSE-2.0
#Unless required by applicable law or agreed to in writing,
#software distributed under the License is distributed on an
#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#KIND, either express or implied.  See the License for the
#specific language governing permissions and limitations
#under the License.
msgid ""
msgstr ""
"Project-Id-Version: 0\n"
"POT-Creation-Date: 2013-02-02T20:11:57\n"
"PO-Revision-Date: 2013-02-02T20:11:57\n"
"Last-Translator: Automatically generated\n"
"Language-Team: None\n"
"MIME-Version: 1.0\n"
"Content-Type: application/x-publican; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#. Tag: title
#, no-c-format
msgid "Changing the Database Password"
msgstr ""

#. Tag: para
#, no-c-format
msgid "You may need to change the password for the MySQL account used by CloudStack. If so, you'll need to change the password in MySQL, and then add the encrypted password to <filename>/etc/cloud/management/db.properties</filename>."
msgstr ""

#. Tag: para
#, no-c-format
msgid "Before changing the password, you'll need to stop CloudStack's management server and the usage engine if you've deployed that component."
msgstr ""

#. Tag: screen
#, no-c-format
msgid "\n"
"<command># service cloud-management stop</command>\n"
"<command># service cloud-usage stop</command>\n"
""
msgstr ""

#. Tag: para
#, no-c-format
msgid "Next, you'll update the password for the CloudStack user on the MySQL server."
msgstr ""

#. Tag: screen
#, no-c-format
msgid "\n"
"<command># mysql -u root -p</command>\n"
""
msgstr ""

#. Tag: para
#, no-c-format
msgid "At the MySQL shell, you'll change the password and flush privileges:"
msgstr ""

#. Tag: screen
#, no-c-format
msgid "\n"
"<command>update mysql.user set password=PASSWORD(\"newpassword123\") where User='cloud';</command>\n"
"<command>flush privileges;</command>\n"
"<command>quit;</command>\n"
""
msgstr ""

#. Tag: para
#, no-c-format
msgid "The next step is to encrypt the password and copy the encrypted password to CloudStack's database configuration (<filename>/etc/cloud/management/db.properties</filename>)."
msgstr ""

#. Tag: screen
#, no-c-format
msgid "\n"
"<command># java -classpath /usr/share/java/cloud-jasypt-1.8.jar \\\n"
"org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI encrypt.sh \\ \n"
"input=\"newpassword123\" password=\"`cat /etc/cloud/management/key`\" \\\n"
"verbose=false \n"
"</command>\n"
""
msgstr ""

#. Tag: title
#, no-c-format
msgid "File encryption type"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Note that this is for the file encryption type. If you're using the web encryption type then you'll use password=\"management_server_secret_key\""
msgstr ""

#. Tag: para
#, no-c-format
msgid "Now, you'll update <filename>/etc/cloud/management/db.properties</filename> with the new ciphertext. Open <filename>/etc/cloud/management/db.properties</filename> in a text editor, and update these parameters:"
msgstr ""

#. Tag: programlisting
#, no-c-format
msgid "\n"
"db.cloud.password=ENC(encrypted_password_from_above) \n"
"db.usage.password=ENC(encrypted_password_from_above) \n"
""
msgstr ""

#. Tag: para
#, no-c-format
msgid "After copying the new password over, you can now start CloudStack (and the usage engine, if necessary)."
msgstr ""

#. Tag: screen
#, no-c-format
msgid "\n"
"        <command># service cloud-management start</command>\n"
"        <command># service cloud-usage start</command>\n"
"    "
msgstr ""

