У вас есть два разумных подхода, которые вы можете попробовать здесь, чтобы уменьшить повторение.
У вас может быть отдельный каталог shared-files
, который будет находиться в качестве родного брата в ваших папках ролей следующим образом:
play.yml
roles/
web/
tasks/
files/
other-multiple-files
role-2/
tasks/
files/
other-multiple-files
role-3/
tasks/
role-4/
tasks/
shared-files/
common-1
common-2
Затем вы должны ссылаться на это в задачах с относительным расположением файлов, из которых будет папка role / files:
- name: copy common-1
copy:
src: ../../common-1
dest: /path/to/dest/common-1
- name: copy role specific file
src: other-multiple-files
dest: /path/to/dest/other-multiple-files
Или, альтернативно, использовать относительный путь к папке , вы могли бы символизировать такие вещи следующим образом:
play.yml
roles/
web/
tasks/
files/
common-1 -> ../../common-1
common-2 -> ../../common-2
other-multiple-files
role-2/
tasks/
files/
common-1 -> ../../common-1
common-2 -> ../../common-2
other-multiple-files
role-3/
tasks/
files/
common-2 -> ../../common-2
role-4/
tasks/
files/
common-1 -> ../../common-1
shared-files/
common-1
common-2
И вы можете ссылаться на файл так, как если бы он был в каталоге role / files напрямую:
- name: copy common-1
copy:
src: common-1
dest: /path/to/dest/common-1
- name: copy role specific file
src: other-multiple-files
dest: /path/to/dest/other-multiple-files
Можно достигнуть этого путем создания пользовательского режима из direct_select режима:
import * as MapboxDraw from '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw';
import createSupplementaryPoints from '@mapbox/mapbox-gl-draw/src/lib/create_supplementary_points';
import Constants from '@mapbox/mapbox-gl-draw/src/constants';
const DirectSelectWithoutMiddleVertexMode = MapboxDraw.modes.direct_select;
DirectSelectWithoutMiddleVertexMode.toDisplayFeatures = function (state, geojson, push) {
if (state.featureId === geojson.properties.id) {
geojson.properties.active = Constants.activeStates.ACTIVE;
push(geojson);
createSupplementaryPoints(geojson, {
map: this.map,
midpoints: false,
selectedPaths: state.selectedCoordPaths
}).forEach(push);
} else {
geojson.properties.active = Constants.activeStates.INACTIVE;
push(geojson);
}
this.fireActionable(state);
};
export default DirectSelectWithoutMiddleVertexMode;
единственная вещь сделать состоит в том, чтобы установить midpoints
свойство к false
, который избегает создания средней точки.
После этого, используйте пользовательский режим для переопределения direct_select режима в опциях ничьей:
import DirectSelectWithoutMiddleVertexMode from './DirectSelectWithoutMiddleVertexMode';
const drawOptions = {
modes: Object.assign({
direct_select: DirectSelectWithoutMiddleVertexMode
}, MapboxDraw.modes)
};
const draw = new MapboxDraw(drawOptions);