)]}'
{"devstack/lib/ironic":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"4764c71842f5ce630fdd2ed92d7c1304d848a092","unresolved":false,"context_lines":[{"line_number":200,"context_line":"# Set resource_classes for nodes to use Nova\u0027s placement engine"},{"line_number":201,"context_line":"IRONIC_DEFAULT_RESOURCE_CLASS\u003d${IRONIC_DEFAULT_RESOURCE_CLASS:-baremetal}"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"# Set traits for nodes."},{"line_number":204,"context_line":"IRONIC_DEFAULT_TRAITS\u003d${IRONIC_DEFAULT_TRAITS:-CUSTOM_GOLD}"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"# Whether to build the ramdisk or download a prebuilt one."}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"3fa0c359_908896c6","line":203,"updated":"2018-02-20 06:52:27.000000000","message":"It might be helpful to tell multiple traits can be set by separating with whitespaces.","commit_id":"83f4cb5488fc3f28474892b6e5a3b9bac01183b7"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7c914822a9f3665ccc767b844833f34ea9f1b19a","unresolved":false,"context_lines":[{"line_number":200,"context_line":"# Set resource_classes for nodes to use Nova\u0027s placement engine"},{"line_number":201,"context_line":"IRONIC_DEFAULT_RESOURCE_CLASS\u003d${IRONIC_DEFAULT_RESOURCE_CLASS:-baremetal}"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"# Set traits for nodes."},{"line_number":204,"context_line":"IRONIC_DEFAULT_TRAITS\u003d${IRONIC_DEFAULT_TRAITS:-CUSTOM_GOLD}"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"# Whether to build the ramdisk or download a prebuilt one."}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"3fa0c359_5fba190a","line":203,"in_reply_to":"3fa0c359_908896c6","updated":"2018-02-20 10:34:50.000000000","message":"Done","commit_id":"83f4cb5488fc3f28474892b6e5a3b9bac01183b7"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"4764c71842f5ce630fdd2ed92d7c1304d848a092","unresolved":false,"context_lines":[{"line_number":1648,"context_line":""},{"line_number":1649,"context_line":"            # Check whether the resource provider has traits registered against"},{"line_number":1650,"context_line":"            # it."},{"line_number":1651,"context_line":"            rp_traits\u003d$(curl -sH \"X-Auth-Token: $token\" $endpoint/resource_providers/$p/traits)"},{"line_number":1652,"context_line":"            for trait in $IRONIC_DEFAULT_TRAITS; do"},{"line_number":1653,"context_line":"                if [[ $(echo \"$rp_traits\" | jq \".traits | contains(\\\"$trait\\\")\") \u003d\u003d false ]]; then"},{"line_number":1654,"context_line":"                    amount\u003d0"}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"3fa0c359_10c7a614","line":1651,"updated":"2018-02-20 06:52:27.000000000","message":"We need to specify API microversion to get traits[1] like: \n -H \"OpenStack-API-Version: placement 1.6\"\n\n[1] https://docs.openstack.org/nova/latest/user/placement.html#traits-api","commit_id":"83f4cb5488fc3f28474892b6e5a3b9bac01183b7"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7c914822a9f3665ccc767b844833f34ea9f1b19a","unresolved":false,"context_lines":[{"line_number":1648,"context_line":""},{"line_number":1649,"context_line":"            # Check whether the resource provider has traits registered against"},{"line_number":1650,"context_line":"            # it."},{"line_number":1651,"context_line":"            rp_traits\u003d$(curl -sH \"X-Auth-Token: $token\" $endpoint/resource_providers/$p/traits)"},{"line_number":1652,"context_line":"            for trait in $IRONIC_DEFAULT_TRAITS; do"},{"line_number":1653,"context_line":"                if [[ $(echo \"$rp_traits\" | jq \".traits | contains(\\\"$trait\\\")\") \u003d\u003d false ]]; then"},{"line_number":1654,"context_line":"                    amount\u003d0"}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"3fa0c359_df438912","line":1651,"in_reply_to":"3fa0c359_10c7a614","updated":"2018-02-20 10:34:50.000000000","message":"Hmm, I guess this isn\u0027t working  then.","commit_id":"83f4cb5488fc3f28474892b6e5a3b9bac01183b7"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"4764c71842f5ce630fdd2ed92d7c1304d848a092","unresolved":false,"context_lines":[{"line_number":1650,"context_line":"            # it."},{"line_number":1651,"context_line":"            rp_traits\u003d$(curl -sH \"X-Auth-Token: $token\" $endpoint/resource_providers/$p/traits)"},{"line_number":1652,"context_line":"            for trait in $IRONIC_DEFAULT_TRAITS; do"},{"line_number":1653,"context_line":"                if [[ $(echo \"$rp_traits\" | jq \".traits | contains(\\\"$trait\\\")\") \u003d\u003d false ]]; then"},{"line_number":1654,"context_line":"                    amount\u003d0"},{"line_number":1655,"context_line":"                fi"},{"line_number":1656,"context_line":"            done"}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"3fa0c359_109566e4","line":1653,"range":{"start_line":1653,"start_character":58,"end_line":1653,"end_character":78},"updated":"2018-02-20 06:52:27.000000000","message":"Square brackets are necessary like:\n  contains([\\\"$trait\\\"])","commit_id":"83f4cb5488fc3f28474892b6e5a3b9bac01183b7"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7c914822a9f3665ccc767b844833f34ea9f1b19a","unresolved":false,"context_lines":[{"line_number":1650,"context_line":"            # it."},{"line_number":1651,"context_line":"            rp_traits\u003d$(curl -sH \"X-Auth-Token: $token\" $endpoint/resource_providers/$p/traits)"},{"line_number":1652,"context_line":"            for trait in $IRONIC_DEFAULT_TRAITS; do"},{"line_number":1653,"context_line":"                if [[ $(echo \"$rp_traits\" | jq \".traits | contains(\\\"$trait\\\")\") \u003d\u003d false ]]; then"},{"line_number":1654,"context_line":"                    amount\u003d0"},{"line_number":1655,"context_line":"                fi"},{"line_number":1656,"context_line":"            done"}],"source_content_type":"application/x-shellscript","patch_set":3,"id":"3fa0c359_9f450118","line":1653,"range":{"start_line":1653,"start_character":58,"end_line":1653,"end_character":78},"in_reply_to":"3fa0c359_109566e4","updated":"2018-02-20 10:34:50.000000000","message":"Done","commit_id":"83f4cb5488fc3f28474892b6e5a3b9bac01183b7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2622207f150da805c9a0d1621d02739c7778c333","unresolved":false,"context_lines":[{"line_number":1642,"context_line":"            # A resource class inventory record looks something like"},{"line_number":1643,"context_line":"            # {\"max_unit\": 1, \"min_unit\": 1, \"step_size\": 1, \"reserved\": 0, \"total\": 1, \"allocation_ratio\": 1}"},{"line_number":1644,"context_line":"            # Subtrack reserved from total (defaulting both to 0)"},{"line_number":1645,"context_line":"            amount\u003d$(curl -sH \"X-Auth-Token: $token\" $endpoint/resource_providers/$p/inventories \\"},{"line_number":1646,"context_line":"                | jq \".inventories.CUSTOM_$resource_class as \\$cls"},{"line_number":1647,"context_line":"                    | (\\$cls.total // 0) - (\\$cls.reserved // 0)\")"},{"line_number":1648,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":9,"id":"3fa0c359_a25d0c7a","line":1645,"updated":"2018-02-22 10:00:25.000000000","message":"side note: we should start switching to https://docs.openstack.org/osc-placement/latest/cli/index.html#resource-provider-inventory-list","commit_id":"c7ec607f73ee483bde17f0e03a3265578b6af686"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7a19c3a27798f8fb17148afe30748b4de1460512","unresolved":false,"context_lines":[{"line_number":1642,"context_line":"            # A resource class inventory record looks something like"},{"line_number":1643,"context_line":"            # {\"max_unit\": 1, \"min_unit\": 1, \"step_size\": 1, \"reserved\": 0, \"total\": 1, \"allocation_ratio\": 1}"},{"line_number":1644,"context_line":"            # Subtrack reserved from total (defaulting both to 0)"},{"line_number":1645,"context_line":"            amount\u003d$(curl -sH \"X-Auth-Token: $token\" $endpoint/resource_providers/$p/inventories \\"},{"line_number":1646,"context_line":"                | jq \".inventories.CUSTOM_$resource_class as \\$cls"},{"line_number":1647,"context_line":"                    | (\\$cls.total // 0) - (\\$cls.reserved // 0)\")"},{"line_number":1648,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":9,"id":"3fa0c359_c52b82e8","line":1645,"in_reply_to":"3fa0c359_a25d0c7a","updated":"2018-02-22 10:51:57.000000000","message":"That would be a lot easier than wrestling with curl.","commit_id":"c7ec607f73ee483bde17f0e03a3265578b6af686"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f4840eb2986a5134cc77cfe909702751462bac0a","unresolved":false,"context_lines":[{"line_number":204,"context_line":"IRONIC_DEFAULT_RESOURCE_CLASS\u003d${IRONIC_DEFAULT_RESOURCE_CLASS:-baremetal}"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"# Set traits for nodes. Traits should be separated by whitespace."},{"line_number":207,"context_line":"IRONIC_DEFAULT_TRAITS\u003d${IRONIC_DEFAULT_TRAITS-CUSTOM_GOLD}"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"# Whether to build the ramdisk or download a prebuilt one."},{"line_number":210,"context_line":"IRONIC_BUILD_DEPLOY_RAMDISK\u003d$(trueorfalse True IRONIC_BUILD_DEPLOY_RAMDISK)"}],"source_content_type":"application/x-shellscript","patch_set":11,"id":"df7087c5_cd31c40d","line":207,"updated":"2018-03-09 15:16:31.000000000","message":"no action required: Instead of gold, should this be like magic ;)","commit_id":"c8ae2457c7fd86975d77d6bc67b50b155f602944"}],"devstack/upgrade/settings":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"2622207f150da805c9a0d1621d02739c7778c333","unresolved":false,"context_lines":[{"line_number":38,"context_line":"# support for registering traits."},{"line_number":39,"context_line":"if [[ $BASE_DEVSTACK_BRANCH \u003d\u003d stable/queens ]]; then"},{"line_number":40,"context_line":"    export IRONIC_DEFAULT_TRAITS\u003d\"\""},{"line_number":41,"context_line":"fi"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"# NOTE(vdrok): Do not setup multicell during upgrade"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"3fa0c359_4256885e","line":41,"updated":"2018-02-22 10:00:25.000000000","message":"why cannot we do it in the grenade job definition instead?","commit_id":"c7ec607f73ee483bde17f0e03a3265578b6af686"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7a19c3a27798f8fb17148afe30748b4de1460512","unresolved":false,"context_lines":[{"line_number":38,"context_line":"# support for registering traits."},{"line_number":39,"context_line":"if [[ $BASE_DEVSTACK_BRANCH \u003d\u003d stable/queens ]]; then"},{"line_number":40,"context_line":"    export IRONIC_DEFAULT_TRAITS\u003d\"\""},{"line_number":41,"context_line":"fi"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"# NOTE(vdrok): Do not setup multicell during upgrade"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"3fa0c359_c8ff19ff","line":41,"in_reply_to":"3fa0c359_4256885e","updated":"2018-02-22 10:51:57.000000000","message":"As discussed in IRC, I\u0027ll move them.","commit_id":"c7ec607f73ee483bde17f0e03a3265578b6af686"}],"devstack/upgrade/upgrade.sh":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"a72fb1f119bdd90f5bc489e20b6188f57876068a","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    wait_for_keystone"},{"line_number":115,"context_line":"    start_nova_compute"},{"line_number":116,"context_line":"    # NOTE(mgoddard): Wait for traits to be registered in placement."},{"line_number":117,"context_line":"    wait_for_nova_resources $IRONIC_VM_COUNT 1"},{"line_number":118,"context_line":"fi"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"if [[ -n \"$ensure_stopped\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":7,"id":"3fa0c359_81490eb8","line":117,"range":{"start_line":117,"start_character":45,"end_line":117,"end_character":46},"updated":"2018-02-21 08:08:40.000000000","message":"This cannot be set. IIUC, traits are not added to ironic nodes because they are created with the older devstack.","commit_id":"3f439aca6a85bbe11c6a91ca5f223d43dfddf059"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"c7bdbff0e00204ad5f4da261b82fdf079e1c0860","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    wait_for_keystone"},{"line_number":115,"context_line":"    start_nova_compute"},{"line_number":116,"context_line":"    # NOTE(mgoddard): Wait for traits to be registered in placement."},{"line_number":117,"context_line":"    wait_for_nova_resources $IRONIC_VM_COUNT 1"},{"line_number":118,"context_line":"fi"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"if [[ -n \"$ensure_stopped\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":7,"id":"3fa0c359_a501af08","line":117,"range":{"start_line":117,"start_character":45,"end_line":117,"end_character":46},"in_reply_to":"3fa0c359_81490eb8","updated":"2018-02-21 14:05:39.000000000","message":"Hmm, I see. I guess we either create node traits and update the flavor at this point, or just set IRONIC_DEFAULT_TRAITS\u003d\u0027\u0027 for upgrade tests. I\u0027m tempted to go with the latter, given that this problem goes away once we\u0027re testing upgrades from queens.","commit_id":"3f439aca6a85bbe11c6a91ca5f223d43dfddf059"}],"playbooks/legacy/grenade-dsvm-ironic-multinode-multitenant/run.yaml":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f4840eb2986a5134cc77cfe909702751462bac0a","unresolved":false,"context_lines":[{"line_number":135,"context_line":"          cat \u003c\u003c \u0027EOF\u0027 \u003e\u003e ironic-extra-vars"},{"line_number":136,"context_line":"            export DEVSTACK_LOCAL_CONFIG+\u003d$\u0027\\n\u0027\"IRONIC_VM_SPECS_RAM\u003d384\""},{"line_number":137,"context_line":"            export DEVSTACK_LOCAL_CONFIG+\u003d$\u0027\\n\u0027\"IRONIC_RAMDISK_TYPE\u003dtinyipa\""},{"line_number":138,"context_line":"            # TODO(mgoddard): Remove this when the queens ironic devstack"},{"line_number":139,"context_line":"            # plugin has support for registering traits."},{"line_number":140,"context_line":"            export DEVSTACK_LOCAL_CONFIG+\u003d$\u0027\\n\u0027\"IRONIC_DEFAULT_TRAITS\u003d\\\"\\\"\""},{"line_number":141,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"df7087c5_a00c973b","line":138,"updated":"2018-03-09 15:16:31.000000000","message":"Makes sense, backport then this can be removed.","commit_id":"c8ae2457c7fd86975d77d6bc67b50b155f602944"}]}
