)]}'
{"setup.cfg":[{"author":{"_account_id":8532,"name":"Ryan Brady","email":"rbrady@redhat.com","username":"rbrady"},"change_message_id":"af5d3c2009f49598f069706a640795844fb6ee3f","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    tripleo.ansible-generate-inventory \u003d tripleo_common.actions.ansible:AnsibleGenerateInventoryAction"},{"line_number":139,"context_line":"    tripleo.undercloud.get_free_space \u003d tripleo_common.actions.undercloud:GetFreeSpace"},{"line_number":140,"context_line":"    tripleo.undercloud.create_backup_dir \u003d tripleo_common.actions.undercloud:CreateBackupDir"},{"line_number":141,"context_line":"    tripleo.undercloud.get_database_credentials \u003d tripleo_common.actions.undercloud:GetDatabaseCredentials"},{"line_number":142,"context_line":"    tripleo.undercloud.create_database_backup \u003d tripleo_common.actions.undercloud:CreateDatabaseBackup"},{"line_number":143,"context_line":"    tripleo.undercloud.create_file_system_backup \u003d tripleo_common.actions.undercloud:CreateFileSystemBackup"},{"line_number":144,"context_line":"    tripleo.undercloud.upload_backup_to_swift \u003d tripleo_common.actions.undercloud:UploadUndercloudBackupToSwift"}],"source_content_type":"text/x-ttcn-cfg","patch_set":30,"id":"9f91af0f_6e6143a9","line":141,"range":{"start_line":141,"start_character":4,"end_line":141,"end_character":106},"updated":"2018-01-08 19:59:38.000000000","message":"Unnecessary.  This action should just be a workflow task in yaml.","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"b86d77bdde8e889b4855f82df73aaf3bf8a9a78c","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    tripleo.ansible-generate-inventory \u003d tripleo_common.actions.ansible:AnsibleGenerateInventoryAction"},{"line_number":139,"context_line":"    tripleo.undercloud.get_free_space \u003d tripleo_common.actions.undercloud:GetFreeSpace"},{"line_number":140,"context_line":"    tripleo.undercloud.create_backup_dir \u003d tripleo_common.actions.undercloud:CreateBackupDir"},{"line_number":141,"context_line":"    tripleo.undercloud.get_database_credentials \u003d tripleo_common.actions.undercloud:GetDatabaseCredentials"},{"line_number":142,"context_line":"    tripleo.undercloud.create_database_backup \u003d tripleo_common.actions.undercloud:CreateDatabaseBackup"},{"line_number":143,"context_line":"    tripleo.undercloud.create_file_system_backup \u003d tripleo_common.actions.undercloud:CreateFileSystemBackup"},{"line_number":144,"context_line":"    tripleo.undercloud.upload_backup_to_swift \u003d tripleo_common.actions.undercloud:UploadUndercloudBackupToSwift"}],"source_content_type":"text/x-ttcn-cfg","patch_set":30,"id":"9f91af0f_f7743238","line":141,"range":{"start_line":141,"start_character":4,"end_line":141,"end_character":106},"in_reply_to":"9f91af0f_6e6143a9","updated":"2018-01-09 15:11:57.000000000","message":"Done","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"}],"tripleo_common/actions/undercloud.py":[{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"b038553c918eee5533d9cd3ac8bdac9cbf0ee035","unresolved":false,"context_lines":[{"line_number":35,"context_line":"       the default minimum size will be 2GB."},{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, path\u003d\u0027/tmp\u0027, min_space\u003d2000000):"},{"line_number":39,"context_line":"        self.path \u003d path + os.sep"},{"line_number":40,"context_line":"        self.min_space \u003d min_space"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"9f91af0f_961e87b8","line":38,"range":{"start_line":38,"start_character":36,"end_line":38,"end_character":50},"updated":"2018-01-03 08:14:28.000000000","message":"add to constants.py? MIN_BACKUP_SPACE for example","commit_id":"0e3b5d2237c0f72c4e944a3759c2aff5501a9b65"},{"author":{"_account_id":11090,"name":"Sergii Golovatiuk","email":"sgolovat@redhat.com","username":"holser"},"change_message_id":"a25ceaa640ad67465220b20998cd6e0f3b5f824a","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            tarball_name \u003d \u0027UC-backup-%s.tar.gz\u0027 % time.strftime("},{"line_number":213,"context_line":"                           \"%Y%m%d%H%M%S\")"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"            swiftutils.create_and_upload_tarball("},{"line_number":216,"context_line":"                swift, self.backup_path, container_tmp,"},{"line_number":217,"context_line":"                tarball_name, 36000)"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9f91af0f_11a7d451","line":215,"updated":"2018-01-03 19:11:56.000000000","message":"This creates a big overhead...\nI populated 10GB of data thus I had in /tmp\n10Gb of mysqldump file\n3Gb of compressed file\n\nI propose to use POpen to\n1. Archive on the fly\n2. Not to use a lot of RAM/IO/CPU\n\nHere is a piece of code that does that\n\nimport gzip\nimport subprocess\nbackup \u003d gzip.open(\u0027/tmp/all.sql.gz\u0027, \u0027wb\u0027)\nmysqldump \u003d subprocess.Popen([\u0027nice\u0027, \u0027-n\u0027, \u002719\u0027,\u0027ionice\u0027, \u0027-c2\u0027, \u0027-n7\u0027, \u0027mysqldump\u0027, \u0027-uroot\u0027, \u0027--opt\u0027, \u0027--all-databases\u0027, \u0027--single-transaction\u0027], stdout\u003dsubprocess.PIPE, stderr\u003dsubprocess.PIPE)\nwith gzip.open(\u0027/tmp/all.sql.gz\u0027, \u0027wb\u0027) as backup:\n    line \u003d mysqldump.stdout.readline()\n    while line:\n        backup.writelines(line)\n        line \u003d mysqldump.stdout.readline()\n\nIt reads line by line. If line is not processed it stops the process until the line is processed. This technique doesn\u0027t create load on CPU, doesn\u0027t require a lot of RAM, doesn\u0027t create IO and creates archive on the fly","commit_id":"374f304c7bd06c5dbca5c1e58152625be0392991"},{"author":{"_account_id":11090,"name":"Sergii Golovatiuk","email":"sgolovat@redhat.com","username":"holser"},"change_message_id":"b398a5b278ecc7e87e593af87cf6c6731e893cb7","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            tarball_name \u003d \u0027UC-backup-%s.tar.gz\u0027 % time.strftime("},{"line_number":213,"context_line":"                           \"%Y%m%d%H%M%S\")"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"            swiftutils.create_and_upload_tarball("},{"line_number":216,"context_line":"                swift, self.backup_path, container_tmp,"},{"line_number":217,"context_line":"                tarball_name, 36000)"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9f91af0f_5109dc2e","line":215,"in_reply_to":"9f91af0f_11a7d451","updated":"2018-01-03 19:19:27.000000000","message":"\u003e\u003e\u003e mysqldump \u003d subprocess.Popen([\u0027nice\u0027, \u0027-n\u0027, \u002719\u0027,\u0027ionice\u0027, \u0027-c2\u0027, \u0027-n7\u0027, \u0027ls\u0027], stdout\u003dsubprocess.PIPE, stderr\u003dsubprocess.PIPE)\n\u003e\u003e\u003e mysqldump.stdout.readline()\n\u0027a\\n\u0027\n\u003e\u003e\u003e rc \u003d mysqldump.poll()\n\u003e\u003e\u003e print rc\n0\n\u003e\u003e\u003e mysqldump \u003d subprocess.Popen([\u0027nice\u0027, \u0027-n\u0027, \u002719\u0027,\u0027ionice\u0027, \u0027-c2\u0027, \u0027-n7\u0027, \u0027exit 1\u0027], stdout\u003dsubprocess.PIPE, stderr\u003dsubprocess.PIPE)\n\u003e\u003e\u003e mysqldump.stdout.readline()\n\u0027\u0027\n\u003e\u003e\u003e rc \u003d mysqldump.poll()\n\u003e\u003e\u003e print rc\n1","commit_id":"374f304c7bd06c5dbca5c1e58152625be0392991"},{"author":{"_account_id":25899,"name":"Or Idgar","email":"oidgar@redhat.com","username":"oidgar"},"change_message_id":"a76375da1177292cbd1a5145936ddd567b863718","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        available_space \u003d ("},{"line_number":50,"context_line":"            (os.statvfs(temp_path).f_frsize * os.statvfs(temp_path).f_bavail) /"},{"line_number":51,"context_line":"            (1024 * 1024))"},{"line_number":52,"context_line":"        if (available_space \u003c min_space):"},{"line_number":53,"context_line":"            msg \u003d \"There is no enough space, avail. - %s KB\" % str(available_space)"},{"line_number":54,"context_line":"            return actions.Result(error\u003d{\u0027msg\u0027: msg})"},{"line_number":55,"context_line":"        else:"},{"line_number":56,"context_line":"            msg \u003d \"There is enough space, avail. - %s KB\" % str(available_space)"},{"line_number":57,"context_line":"            return actions.Result(data\u003d{\u0027msg\u0027: msg})"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"class CreateBackupDir(base.Action):"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f91af0f_3b962541","line":57,"range":{"start_line":52,"start_character":0,"end_line":57,"end_character":52},"updated":"2018-01-08 13:58:41.000000000","message":"NIT - I would use MB instead KB (especially when min_space is in MB). the many digits in KB are confusing compares to MB.","commit_id":"3bf80b761261fb3e005ab0fe6a8c45d00a4a7c4f"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"c04e91a3c927d5dd71a673afef5e832ad3591cb1","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        available_space \u003d ("},{"line_number":50,"context_line":"            (os.statvfs(temp_path).f_frsize * os.statvfs(temp_path).f_bavail) /"},{"line_number":51,"context_line":"            (1024 * 1024))"},{"line_number":52,"context_line":"        if (available_space \u003c min_space):"},{"line_number":53,"context_line":"            msg \u003d \"There is no enough space, avail. - %s KB\" % str(available_space)"},{"line_number":54,"context_line":"            return actions.Result(error\u003d{\u0027msg\u0027: msg})"},{"line_number":55,"context_line":"        else:"},{"line_number":56,"context_line":"            msg \u003d \"There is enough space, avail. - %s KB\" % str(available_space)"},{"line_number":57,"context_line":"            return actions.Result(data\u003d{\u0027msg\u0027: msg})"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"class CreateBackupDir(base.Action):"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f91af0f_54e413e1","line":57,"range":{"start_line":52,"start_character":0,"end_line":57,"end_character":52},"in_reply_to":"9f91af0f_3b962541","updated":"2018-01-08 17:56:44.000000000","message":"You are right here there is a nit in the message, its in MB.","commit_id":"3bf80b761261fb3e005ab0fe6a8c45d00a4a7c4f"},{"author":{"_account_id":25899,"name":"Or Idgar","email":"oidgar@redhat.com","username":"oidgar"},"change_message_id":"a76375da1177292cbd1a5145936ddd567b863718","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            mistralclient \u003d self.get_workflow_client(context)"},{"line_number":93,"context_line":"            mistral_env \u003d mistralclient.environments.get("},{"line_number":94,"context_line":"                \"tripleo.undercloud-config\")"},{"line_number":95,"context_line":"            dbuser \u003d \"root\""},{"line_number":96,"context_line":"            dbpassword \u003d mistral_env.variables[\u0027undercloud_db_password\u0027]"},{"line_number":97,"context_line":"            return actions.Result(data\u003d{\"dbuser\": dbuser,"},{"line_number":98,"context_line":"                                        \"dbpassword\": dbpassword})"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f91af0f_1b648149","line":95,"range":{"start_line":95,"start_character":21,"end_line":95,"end_character":27},"updated":"2018-01-08 13:58:41.000000000","message":"I think it\u0027s better to set this as an attribute with default value \"root\" rather than hard coded.\nIn CreateDatabaseBackup it works that way.","commit_id":"3bf80b761261fb3e005ab0fe6a8c45d00a4a7c4f"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"c04e91a3c927d5dd71a673afef5e832ad3591cb1","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            mistralclient \u003d self.get_workflow_client(context)"},{"line_number":93,"context_line":"            mistral_env \u003d mistralclient.environments.get("},{"line_number":94,"context_line":"                \"tripleo.undercloud-config\")"},{"line_number":95,"context_line":"            dbuser \u003d \"root\""},{"line_number":96,"context_line":"            dbpassword \u003d mistral_env.variables[\u0027undercloud_db_password\u0027]"},{"line_number":97,"context_line":"            return actions.Result(data\u003d{\"dbuser\": dbuser,"},{"line_number":98,"context_line":"                                        \"dbpassword\": dbpassword})"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f91af0f_541bb3ce","line":95,"range":{"start_line":95,"start_character":21,"end_line":95,"end_character":27},"in_reply_to":"9f91af0f_1b648149","updated":"2018-01-08 17:56:44.000000000","message":"The administrative DB User for a OOO deployment is root, and this password is stored in a Mistral environment, so this method is specific to get the DB root password stored in the undercloud-config environment.","commit_id":"3bf80b761261fb3e005ab0fe6a8c45d00a4a7c4f"},{"author":{"_account_id":25899,"name":"Or Idgar","email":"oidgar@redhat.com","username":"oidgar"},"change_message_id":"a76375da1177292cbd1a5145936ddd567b863718","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            mistral_env \u003d mistralclient.environments.get("},{"line_number":94,"context_line":"                \"tripleo.undercloud-config\")"},{"line_number":95,"context_line":"            dbuser \u003d \"root\""},{"line_number":96,"context_line":"            dbpassword \u003d mistral_env.variables[\u0027undercloud_db_password\u0027]"},{"line_number":97,"context_line":"            return actions.Result(data\u003d{\"dbuser\": dbuser,"},{"line_number":98,"context_line":"                                        \"dbpassword\": dbpassword})"},{"line_number":99,"context_line":"        except Exception as msg:"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f91af0f_fbec3d90","line":96,"range":{"start_line":96,"start_character":12,"end_line":96,"end_character":72},"updated":"2018-01-08 13:58:41.000000000","message":"same in here","commit_id":"3bf80b761261fb3e005ab0fe6a8c45d00a4a7c4f"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"c04e91a3c927d5dd71a673afef5e832ad3591cb1","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            mistral_env \u003d mistralclient.environments.get("},{"line_number":94,"context_line":"                \"tripleo.undercloud-config\")"},{"line_number":95,"context_line":"            dbuser \u003d \"root\""},{"line_number":96,"context_line":"            dbpassword \u003d mistral_env.variables[\u0027undercloud_db_password\u0027]"},{"line_number":97,"context_line":"            return actions.Result(data\u003d{\"dbuser\": dbuser,"},{"line_number":98,"context_line":"                                        \"dbpassword\": dbpassword})"},{"line_number":99,"context_line":"        except Exception as msg:"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f91af0f_34162faa","line":96,"range":{"start_line":96,"start_character":12,"end_line":96,"end_character":72},"in_reply_to":"9f91af0f_fbec3d90","updated":"2018-01-08 17:56:44.000000000","message":"This cant be configured.","commit_id":"3bf80b761261fb3e005ab0fe6a8c45d00a4a7c4f"},{"author":{"_account_id":25899,"name":"Or Idgar","email":"oidgar@redhat.com","username":"oidgar"},"change_message_id":"a76375da1177292cbd1a5145936ddd567b863718","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def run(self, context):"},{"line_number":209,"context_line":"        try:"},{"line_number":210,"context_line":"            LOG.warning(\u0027Uploading backup to swift\u0027)"},{"line_number":211,"context_line":"            swift \u003d self.get_object_client(context)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            container_tmp \u003d \u0027undercloud-backups\u0027"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f91af0f_5b576927","line":210,"range":{"start_line":210,"start_character":11,"end_line":210,"end_character":52},"updated":"2018-01-08 13:58:41.000000000","message":"I think LOG.info is more suitable for that message.","commit_id":"3bf80b761261fb3e005ab0fe6a8c45d00a4a7c4f"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"c04e91a3c927d5dd71a673afef5e832ad3591cb1","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def run(self, context):"},{"line_number":209,"context_line":"        try:"},{"line_number":210,"context_line":"            LOG.warning(\u0027Uploading backup to swift\u0027)"},{"line_number":211,"context_line":"            swift \u003d self.get_object_client(context)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            container_tmp \u003d \u0027undercloud-backups\u0027"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f91af0f_f459a78d","line":210,"range":{"start_line":210,"start_character":11,"end_line":210,"end_character":52},"in_reply_to":"9f91af0f_5b576927","updated":"2018-01-08 17:56:44.000000000","message":"Done","commit_id":"3bf80b761261fb3e005ab0fe6a8c45d00a4a7c4f"},{"author":{"_account_id":25899,"name":"Or Idgar","email":"oidgar@redhat.com","username":"oidgar"},"change_message_id":"a76375da1177292cbd1a5145936ddd567b863718","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            LOG.warning(\u0027Uploading backup to swift\u0027)"},{"line_number":211,"context_line":"            swift \u003d self.get_object_client(context)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            container_tmp \u003d \u0027undercloud-backups\u0027"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"            tarball_name \u003d \u0027UC-backup-%s.tar.gz\u0027 % time.strftime("},{"line_number":216,"context_line":"                           \"%Y%m%d%H%M%S\")"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f91af0f_36063c1f","line":213,"range":{"start_line":213,"start_character":28,"end_line":213,"end_character":48},"updated":"2018-01-08 13:58:41.000000000","message":"same as above, I would set this as default value for an attribute. if the user will want to use several containers for example, it will let him do it.","commit_id":"3bf80b761261fb3e005ab0fe6a8c45d00a4a7c4f"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"c04e91a3c927d5dd71a673afef5e832ad3591cb1","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            LOG.warning(\u0027Uploading backup to swift\u0027)"},{"line_number":211,"context_line":"            swift \u003d self.get_object_client(context)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            container_tmp \u003d \u0027undercloud-backups\u0027"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"            tarball_name \u003d \u0027UC-backup-%s.tar.gz\u0027 % time.strftime("},{"line_number":216,"context_line":"                           \"%Y%m%d%H%M%S\")"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f91af0f_5469731e","line":213,"range":{"start_line":213,"start_character":28,"end_line":213,"end_character":48},"in_reply_to":"9f91af0f_36063c1f","updated":"2018-01-08 17:56:44.000000000","message":"Done","commit_id":"3bf80b761261fb3e005ab0fe6a8c45d00a4a7c4f"},{"author":{"_account_id":8532,"name":"Ryan Brady","email":"rbrady@redhat.com","username":"rbrady"},"change_message_id":"af5d3c2009f49598f069706a640795844fb6ee3f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"       be 10240 MB (10GB)."},{"line_number":37,"context_line":"    \"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, path\u003d\u0027/tmp\u0027, min_space\u003d10240):"},{"line_number":40,"context_line":"        self.path \u003d path + os.sep"},{"line_number":41,"context_line":"        self.min_space \u003d min_space"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9f91af0f_8b2039ae","line":39,"range":{"start_line":39,"start_character":23,"end_line":39,"end_character":34},"updated":"2018-01-08 19:59:38.000000000","message":"Using the tempfile.gettempdir() method[1] is a better solution.\n\n[1] https://docs.python.org/2/library/tempfile.html","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"b86d77bdde8e889b4855f82df73aaf3bf8a9a78c","unresolved":false,"context_lines":[{"line_number":36,"context_line":"       be 10240 MB (10GB)."},{"line_number":37,"context_line":"    \"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, path\u003d\u0027/tmp\u0027, min_space\u003d10240):"},{"line_number":40,"context_line":"        self.path \u003d path + os.sep"},{"line_number":41,"context_line":"        self.min_space \u003d min_space"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9f91af0f_a600bd02","line":39,"range":{"start_line":39,"start_character":23,"end_line":39,"end_character":34},"in_reply_to":"9f91af0f_8b2039ae","updated":"2018-01-09 15:11:57.000000000","message":"Done","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":8532,"name":"Ryan Brady","email":"rbrady@redhat.com","username":"rbrady"},"change_message_id":"af5d3c2009f49598f069706a640795844fb6ee3f","unresolved":false,"context_lines":[{"line_number":65,"context_line":"       ^/tmp/undercloud-backup-[A-Za-z0-9_]{6}$"},{"line_number":66,"context_line":"    \"\"\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def __init__(self, path\u003d\u0027/tmp\u0027, prefix\u003d\u0027undercloud-backup-\u0027):"},{"line_number":69,"context_line":"        self.path \u003d path + os.sep"},{"line_number":70,"context_line":"        self.prefix \u003d prefix"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9f91af0f_8b6919fa","line":68,"range":{"start_line":68,"start_character":23,"end_line":68,"end_character":63},"updated":"2018-01-08 19:59:38.000000000","message":"If you allow override of the path variables, you cannot constrain the path for the deletion of the temporary directory and open a possible security risk.  See comment in RemoveTempDir.  Also same as above for \"/tmp\" literal string.","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"b86d77bdde8e889b4855f82df73aaf3bf8a9a78c","unresolved":false,"context_lines":[{"line_number":65,"context_line":"       ^/tmp/undercloud-backup-[A-Za-z0-9_]{6}$"},{"line_number":66,"context_line":"    \"\"\""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def __init__(self, path\u003d\u0027/tmp\u0027, prefix\u003d\u0027undercloud-backup-\u0027):"},{"line_number":69,"context_line":"        self.path \u003d path + os.sep"},{"line_number":70,"context_line":"        self.prefix \u003d prefix"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9f91af0f_6606351f","line":68,"range":{"start_line":68,"start_character":23,"end_line":68,"end_character":63},"in_reply_to":"9f91af0f_8b6919fa","updated":"2018-01-09 15:11:57.000000000","message":"Done","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":8532,"name":"Ryan Brady","email":"rbrady@redhat.com","username":"rbrady"},"change_message_id":"af5d3c2009f49598f069706a640795844fb6ee3f","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def run(self, context):"},{"line_number":94,"context_line":"        try:"},{"line_number":95,"context_line":"            mistralclient \u003d self.get_workflow_client(context)"},{"line_number":96,"context_line":"            mistral_env \u003d mistralclient.environments.get("},{"line_number":97,"context_line":"                \"tripleo.undercloud-config\")"},{"line_number":98,"context_line":"            dbpassword \u003d mistral_env.variables[\u0027undercloud_db_password\u0027]"},{"line_number":99,"context_line":"            return actions.Result(data\u003d{\"dbuser\": self.dbuser,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f91af0f_6e7703a2","line":96,"range":{"start_line":95,"start_character":11,"end_line":96,"end_character":57},"updated":"2018-01-08 19:59:38.000000000","message":"There is already an action for this in mistral[1].  You could represent this action entirely in a workflow task without having to create another python action.\n\n[1] https://github.com/openstack/mistral/blob/master/mistral/actions/openstack/mapping.json#L1161","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"b86d77bdde8e889b4855f82df73aaf3bf8a9a78c","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def run(self, context):"},{"line_number":94,"context_line":"        try:"},{"line_number":95,"context_line":"            mistralclient \u003d self.get_workflow_client(context)"},{"line_number":96,"context_line":"            mistral_env \u003d mistralclient.environments.get("},{"line_number":97,"context_line":"                \"tripleo.undercloud-config\")"},{"line_number":98,"context_line":"            dbpassword \u003d mistral_env.variables[\u0027undercloud_db_password\u0027]"},{"line_number":99,"context_line":"            return actions.Result(data\u003d{\"dbuser\": self.dbuser,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f91af0f_17a756a9","line":96,"range":{"start_line":95,"start_character":11,"end_line":96,"end_character":57},"in_reply_to":"9f91af0f_6e7703a2","updated":"2018-01-09 15:11:57.000000000","message":"Done","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":8532,"name":"Ryan Brady","email":"rbrady@redhat.com","username":"rbrady"},"change_message_id":"af5d3c2009f49598f069706a640795844fb6ee3f","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def run(self, context):"},{"line_number":239,"context_line":"        try:"},{"line_number":240,"context_line":"            shutil.rmtree(self.path)"},{"line_number":241,"context_line":"            msg \u003d \"Deleted directory %s\" % self.path"},{"line_number":242,"context_line":"            return actions.Result(data\u003d{\"msg\": msg})"},{"line_number":243,"context_line":"        except Exception as msg:"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f91af0f_aebc2b06","line":240,"range":{"start_line":240,"start_character":12,"end_line":240,"end_character":36},"updated":"2018-01-08 19:59:38.000000000","message":"Sorry I didn\u0027t catch this before.  What does the mistral user have access to delete?  This seems like an unnecessarily risky line of code.  I ran into this in actions/vcs.py early on.  If you constrain the naming convention of the temporary backup directory, you should be able to ensure here the path matches that name and not any random path.","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"b86d77bdde8e889b4855f82df73aaf3bf8a9a78c","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def run(self, context):"},{"line_number":239,"context_line":"        try:"},{"line_number":240,"context_line":"            shutil.rmtree(self.path)"},{"line_number":241,"context_line":"            msg \u003d \"Deleted directory %s\" % self.path"},{"line_number":242,"context_line":"            return actions.Result(data\u003d{\"msg\": msg})"},{"line_number":243,"context_line":"        except Exception as msg:"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f91af0f_29755e64","line":240,"range":{"start_line":240,"start_character":12,"end_line":240,"end_character":36},"in_reply_to":"9f91af0f_aebc2b06","updated":"2018-01-09 15:11:57.000000000","message":"Done","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":8042,"name":"Jiří Stránský","email":"jistr@redhat.com","username":"jistr"},"change_message_id":"4cfcf21989ee796185177b7ca06e8ca6f1a28602","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def run(self, context):"},{"line_number":74,"context_line":"        try:"},{"line_number":75,"context_line":"            _path \u003d tempfile.mkdtemp(prefix\u003d\u0027undercloud-backup-\u0027)"},{"line_number":76,"context_line":"            return actions.Result(data\u003d{\"path\": _path})"},{"line_number":77,"context_line":"        except Exception as msg:"},{"line_number":78,"context_line":"            return actions.Result(error\u003d{\"msg\": six.text_type(msg)})"}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_ad786d8f","line":75,"updated":"2018-01-18 11:31:17.000000000","message":"I think we should add\n\n    dir\u003d\u0027/var/tmp\u0027\n\n/tmp is usually in RAM, so putting putting there something as big as the whole filesystem backup could create trouble. At the very least the GetFreeSpace check could disqualify some underclouds from performing a backup, even if they still have enough disk space to do the backup. /var/tmp should be stored on disk, so it\u0027s better suited for large files.","commit_id":"343c1a78ab93ad5a0fff0f6d1cf99d9edc25a3aa"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"e555fd462c4f7385bcaa5513bccf56c3677272a5","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def run(self, context):"},{"line_number":74,"context_line":"        try:"},{"line_number":75,"context_line":"            _path \u003d tempfile.mkdtemp(prefix\u003d\u0027undercloud-backup-\u0027)"},{"line_number":76,"context_line":"            return actions.Result(data\u003d{\"path\": _path})"},{"line_number":77,"context_line":"        except Exception as msg:"},{"line_number":78,"context_line":"            return actions.Result(error\u003d{\"msg\": six.text_type(msg)})"}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_73ed1824","line":75,"in_reply_to":"7f96bb07_ad786d8f","updated":"2018-01-22 09:09:23.000000000","message":"Done, also changed sudoers","commit_id":"343c1a78ab93ad5a0fff0f6d1cf99d9edc25a3aa"},{"author":{"_account_id":8042,"name":"Jiří Stránský","email":"jistr@redhat.com","username":"jistr"},"change_message_id":"4cfcf21989ee796185177b7ca06e8ca6f1a28602","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"       This action will push the files in the temporary folder to the swift"},{"line_number":182,"context_line":"       container storing the Undercloud backups as uncompressed tarball file."},{"line_number":183,"context_line":"       The backup will be stored 1 day (86400 s)"},{"line_number":184,"context_line":"    \"\"\""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def __init__(self, backup_path, container\u003d\u0027undercloud-backups\u0027):"}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_0de08125","line":183,"range":{"start_line":183,"start_character":7,"end_line":183,"end_character":48},"updated":"2018-01-18 11:31:17.000000000","message":"This should probably be configurable? E.g. if i run a backup every 24h, i\u0027d probably like to have each backup stored for a bit more than 24h actually. (This can be done in a follow-up patch, not a blocker.)","commit_id":"343c1a78ab93ad5a0fff0f6d1cf99d9edc25a3aa"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"e555fd462c4f7385bcaa5513bccf56c3677272a5","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"       This action will push the files in the temporary folder to the swift"},{"line_number":182,"context_line":"       container storing the Undercloud backups as uncompressed tarball file."},{"line_number":183,"context_line":"       The backup will be stored 1 day (86400 s)"},{"line_number":184,"context_line":"    \"\"\""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def __init__(self, backup_path, container\u003d\u0027undercloud-backups\u0027):"}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_b3e2c02e","line":183,"range":{"start_line":183,"start_character":7,"end_line":183,"end_character":48},"in_reply_to":"7f96bb07_0de08125","updated":"2018-01-22 09:09:23.000000000","message":"Done","commit_id":"343c1a78ab93ad5a0fff0f6d1cf99d9edc25a3aa"},{"author":{"_account_id":7144,"name":"James Slagle","email":"jslagle@redhat.com","username":"slagle"},"change_message_id":"a7c5a9b492198ed49c77b29c2381411cd4d5bb0f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            (os.statvfs(temp_path).f_frsize * os.statvfs(temp_path).f_bavail) /"},{"line_number":51,"context_line":"            (1024 * 1024))"},{"line_number":52,"context_line":"        if (available_space \u003c min_space):"},{"line_number":53,"context_line":"            msg \u003d \"There is no enough space, avail. - %s MB\" \\"},{"line_number":54,"context_line":"                  % str(int(available_space))"},{"line_number":55,"context_line":"            return actions.Result(error\u003d{\u0027msg\u0027: msg})"},{"line_number":56,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":52,"id":"5f93b717_b399196f","line":53,"updated":"2018-01-29 19:18:39.000000000","message":"s/no/not","commit_id":"2390280d18f018b8bcc2c640c1fb6c18ee883950"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"96cd9d60c06652b1dc5d6662dde38a771da992c8","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            (os.statvfs(temp_path).f_frsize * os.statvfs(temp_path).f_bavail) /"},{"line_number":51,"context_line":"            (1024 * 1024))"},{"line_number":52,"context_line":"        if (available_space \u003c min_space):"},{"line_number":53,"context_line":"            msg \u003d \"There is no enough space, avail. - %s MB\" \\"},{"line_number":54,"context_line":"                  % str(int(available_space))"},{"line_number":55,"context_line":"            return actions.Result(error\u003d{\u0027msg\u0027: msg})"},{"line_number":56,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":52,"id":"5f93b717_b959ea8e","line":53,"in_reply_to":"5f93b717_b399196f","updated":"2018-01-30 09:33:30.000000000","message":"thanks James, fixed","commit_id":"2390280d18f018b8bcc2c640c1fb6c18ee883950"},{"author":{"_account_id":8042,"name":"Jiří Stránský","email":"jistr@redhat.com","username":"jistr"},"change_message_id":"4d2b717bb0ae7c92f580e6df6091e833842ff198","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.min_space \u003d min_space"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def run(self, context):"},{"line_number":44,"context_line":"        temp_path \u003d tempfile.gettempdir()"},{"line_number":45,"context_line":"        min_space \u003d self.min_space"},{"line_number":46,"context_line":"        while not os.path.isdir(temp_path):"},{"line_number":47,"context_line":"            head, tail \u003d os.path.split(temp_path)"}],"source_content_type":"text/x-python","patch_set":54,"id":"5f93b717_20cd3284","line":44,"range":{"start_line":44,"start_character":20,"end_line":44,"end_character":41},"updated":"2018-02-02 16:27:52.000000000","message":"This wasn\u0027t updated from /tmp to /var/tmp (on my system it would still check /tmp). It doesn\u0027t seem to matter for the statvfs check below though, which seems to report 28 GB free (my free disk space on the VM i\u0027m testing, not free RAM). I\u0027m not sure which disk would it look at, or if it\u0027s the sum of all free disk space... \u003d\u003e Might be worth to still update this so that we\u0027re sure we\u0027re checking the correct filesystem, in case the undercloud has partitioned disks? Just hardcoding /var/tmp would be great.\n\nSorry it took me so long since my last review. This is a lot of nice work and i\u0027m looking forward to merging it. Feel free nag me on IRC for a +2 if i happen to neglect this patch again.","commit_id":"8d918eee310b8102485adac9ab5d143afb456fcf"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"0273608e29eed9051c4f41327c96e2a8c69331fd","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.min_space \u003d min_space"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def run(self, context):"},{"line_number":44,"context_line":"        temp_path \u003d tempfile.gettempdir()"},{"line_number":45,"context_line":"        min_space \u003d self.min_space"},{"line_number":46,"context_line":"        while not os.path.isdir(temp_path):"},{"line_number":47,"context_line":"            head, tail \u003d os.path.split(temp_path)"}],"source_content_type":"text/x-python","patch_set":54,"id":"3fa0c359_c8bc95bd","line":44,"range":{"start_line":44,"start_character":20,"end_line":44,"end_character":41},"in_reply_to":"5f93b717_20cd3284","updated":"2018-02-05 15:55:27.000000000","message":"Hey Jirka thanks!! FIxed now.","commit_id":"8d918eee310b8102485adac9ab5d143afb456fcf"}],"workbooks/undercloud_backup.yaml":[{"author":{"_account_id":8532,"name":"Ryan Brady","email":"rbrady@redhat.com","username":"rbrady"},"change_message_id":"af5d3c2009f49598f069706a640795844fb6ee3f","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":"workflows:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"  launch:"},{"line_number":9,"context_line":"    description: This workflow will launch the Undercloud backup"},{"line_number":10,"context_line":"    tags:"},{"line_number":11,"context_line":"      - tripleo-common-managed"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"9f91af0f_4e9b1f65","line":8,"range":{"start_line":8,"start_character":2,"end_line":8,"end_character":8},"updated":"2018-01-08 19:59:38.000000000","message":"You might just want to name this \"backup\" as a more descriptive name.","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":8532,"name":"Ryan Brady","email":"rbrady@redhat.com","username":"rbrady"},"change_message_id":"71df5e0045b340d682c9ece0a615c346188058b0","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":"workflows:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"  launch:"},{"line_number":9,"context_line":"    description: This workflow will launch the Undercloud backup"},{"line_number":10,"context_line":"    tags:"},{"line_number":11,"context_line":"      - tripleo-common-managed"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"7f96bb07_c25b0685","line":8,"range":{"start_line":8,"start_character":2,"end_line":8,"end_character":8},"in_reply_to":"7f96bb07_1d04f616","updated":"2018-01-11 17:02:54.000000000","message":"Carlos,\n\nTaking a look at the conventions we already have in workflow naming[1] may help illustrate what I have been suggesting.  For example, we don\u0027t have a \"start_introspection\" or \"introspection.launch\", we simply use the name \"introspect\".  For deployment we use \"deploy_plan\" instead of \"start_deployment\".  If you use a verb like \"start\", is there a matching \"end\" operation as well? Is it an operation that may or may not finish?  \n\nI think you could use a more descriptive name like \"tripleo.undercloud_backup.v1.backup\" using backup as a verb, or you could use a verb-noun pattern like \"tripleo.undercloud_backup.v1.create_backup\".  \n\n[1] https://docs.openstack.org/tripleo-common/latest/reference/index.html#workbooks","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"ab62de137ced0bf2b498d42d62625cc419ce5a40","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":"workflows:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"  launch:"},{"line_number":9,"context_line":"    description: This workflow will launch the Undercloud backup"},{"line_number":10,"context_line":"    tags:"},{"line_number":11,"context_line":"      - tripleo-common-managed"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"7f96bb07_9874949b","line":8,"range":{"start_line":8,"start_character":2,"end_line":8,"end_character":8},"in_reply_to":"7f96bb07_1d04f616","updated":"2018-01-11 16:00:39.000000000","message":"done","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"13d7973f368b38ec3b204f981934b4e1a085b834","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":"workflows:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"  launch:"},{"line_number":9,"context_line":"    description: This workflow will launch the Undercloud backup"},{"line_number":10,"context_line":"    tags:"},{"line_number":11,"context_line":"      - tripleo-common-managed"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"7f96bb07_1d04f616","line":8,"range":{"start_line":8,"start_character":2,"end_line":8,"end_character":8},"in_reply_to":"7f96bb07_490de43c","updated":"2018-01-11 15:57:07.000000000","message":"Hey Ryan, what about start_backup ??","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"491f2e2a92bf2501a9698c85690c730e397d58bd","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":"workflows:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"  launch:"},{"line_number":9,"context_line":"    description: This workflow will launch the Undercloud backup"},{"line_number":10,"context_line":"    tags:"},{"line_number":11,"context_line":"      - tripleo-common-managed"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"7f96bb07_627d52b0","line":8,"range":{"start_line":8,"start_character":2,"end_line":8,"end_character":8},"in_reply_to":"7f96bb07_c25b0685","updated":"2018-01-11 17:13:13.000000000","message":"Done","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"b86d77bdde8e889b4855f82df73aaf3bf8a9a78c","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":"workflows:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"  launch:"},{"line_number":9,"context_line":"    description: This workflow will launch the Undercloud backup"},{"line_number":10,"context_line":"    tags:"},{"line_number":11,"context_line":"      - tripleo-common-managed"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"9f91af0f_7759028c","line":8,"range":{"start_line":8,"start_character":2,"end_line":8,"end_character":8},"in_reply_to":"9f91af0f_4e9b1f65","updated":"2018-01-09 15:11:57.000000000","message":"This is referenced as tripleo.undercloud_backup.v1.launch","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":8532,"name":"Ryan Brady","email":"rbrady@redhat.com","username":"rbrady"},"change_message_id":"f4284fa2bd840b7812ff41b447869b7838745b37","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":"workflows:"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"  launch:"},{"line_number":9,"context_line":"    description: This workflow will launch the Undercloud backup"},{"line_number":10,"context_line":"    tags:"},{"line_number":11,"context_line":"      - tripleo-common-managed"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"7f96bb07_490de43c","line":8,"range":{"start_line":8,"start_character":2,"end_line":8,"end_character":8},"in_reply_to":"9f91af0f_7759028c","updated":"2018-01-11 13:16:39.000000000","message":"Yes, but I think \"launch\" is a poor naming choice.  I realize launch is used as \"start\" or \"initiate\", but there is no other workflows here for additional processing or completion.  Using a name for the workflow that describes what\u0027s actually happening makes more sense.  I\u0027m not going to block on this, but I think you should consider this before this lands and becomes part of the public API.","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":8532,"name":"Ryan Brady","email":"rbrady@redhat.com","username":"rbrady"},"change_message_id":"af5d3c2009f49598f069706a640795844fb6ee3f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    tags:"},{"line_number":11,"context_line":"      - tripleo-common-managed"},{"line_number":12,"context_line":"    input:"},{"line_number":13,"context_line":"      - path: \u0027/tmp/\u0027"},{"line_number":14,"context_line":"      - sources_path: \u0027/home/stack/\u0027"},{"line_number":15,"context_line":"      - queue_name: tripleo"},{"line_number":16,"context_line":"    tasks:"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"9f91af0f_8e34c794","line":13,"range":{"start_line":13,"start_character":6,"end_line":13,"end_character":21},"updated":"2018-01-08 19:59:38.000000000","message":"Not a portable way to denote the temp file.  See comments on action.","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"b86d77bdde8e889b4855f82df73aaf3bf8a9a78c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    tags:"},{"line_number":11,"context_line":"      - tripleo-common-managed"},{"line_number":12,"context_line":"    input:"},{"line_number":13,"context_line":"      - path: \u0027/tmp/\u0027"},{"line_number":14,"context_line":"      - sources_path: \u0027/home/stack/\u0027"},{"line_number":15,"context_line":"      - queue_name: tripleo"},{"line_number":16,"context_line":"    tasks:"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"9f91af0f_976fe6fa","line":13,"range":{"start_line":13,"start_character":6,"end_line":13,"end_character":21},"in_reply_to":"9f91af0f_8e34c794","updated":"2018-01-09 15:11:57.000000000","message":"Ok, we will make it mandatory and defined correctly on the action.","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":8532,"name":"Ryan Brady","email":"rbrady@redhat.com","username":"rbrady"},"change_message_id":"af5d3c2009f49598f069706a640795844fb6ee3f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        on-success: create_backup_dir"},{"line_number":24,"context_line":"        on-error: set_get_free_space_status_failed"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"      set_get_free_space_status_failed:"},{"line_number":27,"context_line":"        on-complete: send_message"},{"line_number":28,"context_line":"        publish:"},{"line_number":29,"context_line":"          status: FAILED"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"9f91af0f_4ead5f99","line":26,"range":{"start_line":26,"start_character":6,"end_line":26,"end_character":39},"updated":"2018-01-08 19:59:38.000000000","message":"We\u0027ve moved away from the pattern of having separate tasks to set status.  Please see the pattern illustrated in https://review.openstack.org/#/c/508567/36/workbooks/plan_management.yaml .  It will reduce the amount of tasks in the workflow.","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"},{"author":{"_account_id":20775,"name":"Carlos Camacho","email":"ccamacho@redhat.com","username":"ccamacho"},"change_message_id":"b86d77bdde8e889b4855f82df73aaf3bf8a9a78c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        on-success: create_backup_dir"},{"line_number":24,"context_line":"        on-error: set_get_free_space_status_failed"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"      set_get_free_space_status_failed:"},{"line_number":27,"context_line":"        on-complete: send_message"},{"line_number":28,"context_line":"        publish:"},{"line_number":29,"context_line":"          status: FAILED"}],"source_content_type":"text/x-yaml","patch_set":30,"id":"9f91af0f_778102fb","line":26,"range":{"start_line":26,"start_character":6,"end_line":26,"end_character":39},"in_reply_to":"9f91af0f_4ead5f99","updated":"2018-01-09 15:11:57.000000000","message":"Done","commit_id":"6576cf933c4d66bd3d2b8f1b05b5707dbc912b1d"}]}
