mirror of https://github.com/apache/cloudstack.git
[CLOUDSTACK-10301] Allow updating the network ACL list name and Description (#2462)
* [CLOUDSTACK-10301] Allow updating the network ACL list name and description * Fixes suggested by Daan
This commit is contained in:
parent
50042680b0
commit
b08f9e053f
|
|
@ -22,6 +22,7 @@ import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
|
|||
import org.apache.cloudstack.api.command.user.network.ListNetworkACLListsCmd;
|
||||
import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;
|
||||
import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLItemCmd;
|
||||
import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLListCmd;
|
||||
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.utils.Pair;
|
||||
|
|
@ -38,7 +39,7 @@ public interface NetworkACLService {
|
|||
NetworkACL getNetworkACL(long id);
|
||||
|
||||
/**
|
||||
* List NetworkACLs by Id/Name/Network or Vpc it belongs to
|
||||
* List NetworkACLs by Id/Name/Network or VPC it belongs to
|
||||
*/
|
||||
Pair<List<? extends NetworkACL>, Integer> listNetworkACLs(ListNetworkACLListsCmd cmd);
|
||||
|
||||
|
|
@ -87,6 +88,6 @@ public interface NetworkACLService {
|
|||
*/
|
||||
boolean replaceNetworkACLonPrivateGw(long aclId, long privateGatewayId) throws ResourceUnavailableException;
|
||||
|
||||
NetworkACL updateNetworkACL(Long id, String customId, Boolean forDisplay);
|
||||
NetworkACL updateNetworkACL(UpdateNetworkACLListCmd updateNetworkACLListCmd);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,8 +31,7 @@ import com.cloud.exception.ResourceUnavailableException;
|
|||
import com.cloud.network.vpc.NetworkACL;
|
||||
import com.cloud.user.Account;
|
||||
|
||||
@APICommand(name = "updateNetworkACLList", description = "Updates network ACL list", responseObject = SuccessResponse.class, since = "4.4",
|
||||
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
|
||||
@APICommand(name = "updateNetworkACLList", description = "Updates network ACL list", responseObject = SuccessResponse.class, since = "4.4", requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
|
||||
public class UpdateNetworkACLListCmd extends BaseAsyncCustomIdCmd {
|
||||
public static final Logger s_logger = Logger.getLogger(UpdateNetworkACLListCmd.class.getName());
|
||||
private static final String s_name = "updatenetworkacllistresponse";
|
||||
|
|
@ -44,9 +43,16 @@ public class UpdateNetworkACLListCmd extends BaseAsyncCustomIdCmd {
|
|||
@Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = NetworkACLResponse.class, required = true, description = "the ID of the network ACL")
|
||||
private Long id;
|
||||
|
||||
@Parameter(name = ApiConstants.FOR_DISPLAY, type = CommandType.BOOLEAN, description = "an optional field, whether to the display the list to the end user or not", since = "4.4", authorized = {RoleType.Admin})
|
||||
@Parameter(name = ApiConstants.FOR_DISPLAY, type = CommandType.BOOLEAN, description = "an optional field, whether to the display the list to the end user or not", since = "4.4", authorized = {
|
||||
RoleType.Admin})
|
||||
private Boolean display;
|
||||
|
||||
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, description = "Name of the network ACL list")
|
||||
private String name;
|
||||
|
||||
@Parameter(name = ApiConstants.DESCRIPTION, type = CommandType.STRING, description = "Description of the network ACL list")
|
||||
private String description;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
/////////////////// Accessors ///////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -85,7 +91,7 @@ public class UpdateNetworkACLListCmd extends BaseAsyncCustomIdCmd {
|
|||
|
||||
@Override
|
||||
public void execute() throws ResourceUnavailableException {
|
||||
NetworkACL acl = _networkACLService.updateNetworkACL(id, this.getCustomId(), getDisplay());
|
||||
NetworkACL acl = _networkACLService.updateNetworkACL(this);
|
||||
NetworkACLResponse aclResponse = _responseGenerator.createNetworkACLResponse(acl);
|
||||
setResponseObject(aclResponse);
|
||||
aclResponse.setResponseName(getCommandName());
|
||||
|
|
@ -97,4 +103,12 @@ public class UpdateNetworkACLListCmd extends BaseAsyncCustomIdCmd {
|
|||
_uuidMgr.checkUuid(this.getCustomId(), NetworkACL.class);
|
||||
}
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,4 +101,12 @@ public class NetworkACLVO implements NetworkACL {
|
|||
public boolean isDisplay() {
|
||||
return display;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
|
|||
import org.apache.cloudstack.api.command.user.network.ListNetworkACLListsCmd;
|
||||
import org.apache.cloudstack.api.command.user.network.ListNetworkACLsCmd;
|
||||
import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLItemCmd;
|
||||
import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLListCmd;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
|
@ -907,20 +908,30 @@ public class NetworkACLServiceImpl extends ManagerBase implements NetworkACLServ
|
|||
|
||||
@Override
|
||||
@ActionEvent(eventType = EventTypes.EVENT_NETWORK_ACL_UPDATE, eventDescription = "updating network acl", async = true)
|
||||
public NetworkACL updateNetworkACL(final Long id, final String customId, final Boolean forDisplay) {
|
||||
final NetworkACLVO acl = _networkACLDao.findById(id);
|
||||
final Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
|
||||
final Account caller = CallContext.current().getCallingAccount();
|
||||
public NetworkACL updateNetworkACL(UpdateNetworkACLListCmd updateNetworkACLListCmd) {
|
||||
Long id = updateNetworkACLListCmd.getId();
|
||||
NetworkACLVO acl = _networkACLDao.findById(id);
|
||||
Vpc vpc = _entityMgr.findById(Vpc.class, acl.getVpcId());
|
||||
|
||||
Account caller = CallContext.current().getCallingAccount();
|
||||
_accountMgr.checkAccess(caller, null, true, vpc);
|
||||
|
||||
if (customId != null) {
|
||||
String name = updateNetworkACLListCmd.getName();
|
||||
if (StringUtils.isNotBlank(name)) {
|
||||
acl.setName(name);
|
||||
}
|
||||
String description = updateNetworkACLListCmd.getDescription();
|
||||
if (StringUtils.isNotBlank(description)) {
|
||||
acl.setDescription(description);
|
||||
}
|
||||
String customId = updateNetworkACLListCmd.getCustomId();
|
||||
if (StringUtils.isNotBlank(customId)) {
|
||||
acl.setUuid(customId);
|
||||
}
|
||||
|
||||
Boolean forDisplay = updateNetworkACLListCmd.getDisplay();
|
||||
if (forDisplay != null) {
|
||||
acl.setDisplay(forDisplay);
|
||||
}
|
||||
|
||||
_networkACLDao.update(id, acl);
|
||||
return _networkACLDao.findById(id);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import org.apache.cloudstack.acl.SecurityChecker.AccessType;
|
|||
import org.apache.cloudstack.api.ServerApiException;
|
||||
import org.apache.cloudstack.api.command.user.network.CreateNetworkACLCmd;
|
||||
import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLItemCmd;
|
||||
import org.apache.cloudstack.api.command.user.network.UpdateNetworkACLListCmd;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
|
|
@ -46,12 +47,14 @@ import com.cloud.network.NetworkModel;
|
|||
import com.cloud.network.dao.NetworkVO;
|
||||
import com.cloud.network.vpc.NetworkACLItem.Action;
|
||||
import com.cloud.network.vpc.NetworkACLItem.TrafficType;
|
||||
import com.cloud.network.vpc.dao.NetworkACLDao;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.user.AccountManager;
|
||||
import com.cloud.utils.db.EntityManager;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest(CallContext.class)
|
||||
public class NetworkACLServiceImplTest {
|
||||
|
||||
@Spy
|
||||
|
|
@ -64,9 +67,11 @@ public class NetworkACLServiceImplTest {
|
|||
@Mock
|
||||
private NetworkACLItemDao networkAclItemDaoMock;
|
||||
@Mock
|
||||
private EntityManager EntityManagerMock;
|
||||
private EntityManager entityManagerMock;
|
||||
@Mock
|
||||
private AccountManager AccountManager;
|
||||
private AccountManager accountManagerMock;
|
||||
@Mock
|
||||
private NetworkACLDao networkAclDaoMock;
|
||||
|
||||
@Mock
|
||||
private CreateNetworkACLCmd createNetworkAclCmdMock;
|
||||
|
|
@ -78,13 +83,22 @@ public class NetworkACLServiceImplTest {
|
|||
private NetworkACL networkAclMock;
|
||||
@Mock
|
||||
private NetworkACLItemVO networkAclItemVoMock;
|
||||
@Mock
|
||||
private NetworkACLVO networkACLVOMock;
|
||||
@Mock
|
||||
private UpdateNetworkACLListCmd updateNetworkACLListCmdMock;
|
||||
|
||||
private Long networkAclMockId = 1L;
|
||||
private Long networkOfferingMockId = 2L;
|
||||
private Long networkMockVpcMockId = 3L;
|
||||
private long networkAclListId = 1l;
|
||||
|
||||
@Before
|
||||
public void befoteTest() {
|
||||
PowerMockito.mockStatic(CallContext.class);
|
||||
PowerMockito.when(CallContext.current()).thenReturn(Mockito.mock(CallContext.class));
|
||||
|
||||
Mockito.when(networkAclDaoMock.findById(networkAclListId)).thenReturn(networkACLVOMock);
|
||||
Mockito.when(createNetworkAclCmdMock.getNetworkId()).thenReturn(1L);
|
||||
Mockito.when(createNetworkAclCmdMock.getProtocol()).thenReturn("tcp");
|
||||
|
||||
|
|
@ -215,7 +229,7 @@ public class NetworkACLServiceImplTest {
|
|||
@Test(expected = InvalidParameterValueException.class)
|
||||
public void createAclListForNetworkAndReturnAclListIdTestServicesSupportedByNetworkOfferingButVpcNotFound() {
|
||||
Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId, Network.Service.NetworkACL);
|
||||
Mockito.doReturn(null).when(EntityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
Mockito.doReturn(null).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
|
||||
networkAclServiceImpl.createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock, networkMock);
|
||||
}
|
||||
|
|
@ -223,7 +237,7 @@ public class NetworkACLServiceImplTest {
|
|||
@Test(expected = CloudRuntimeException.class)
|
||||
public void createAclListForNetworkAndReturnAclListIdTestCreateNetworkAclReturnsNull() {
|
||||
Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId, Network.Service.NetworkACL);
|
||||
Mockito.doReturn(Mockito.mock(Vpc.class)).when(EntityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
Mockito.doReturn(null).when(networkAclManager).createNetworkACL(Mockito.anyString(), Mockito.anyString(), Mockito.anyLong(), Mockito.anyBoolean());
|
||||
|
||||
networkAclServiceImpl.createAclListForNetworkAndReturnAclListId(createNetworkAclCmdMock, networkMock);
|
||||
|
|
@ -232,7 +246,7 @@ public class NetworkACLServiceImplTest {
|
|||
@Test(expected = CloudRuntimeException.class)
|
||||
public void createAclListForNetworkAndReturnAclListIdTestAclNetworkIsCreatedButNotApplied() throws ResourceUnavailableException {
|
||||
Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId, Network.Service.NetworkACL);
|
||||
Mockito.doReturn(Mockito.mock(Vpc.class)).when(EntityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
Mockito.doReturn(Mockito.mock(NetworkACL.class)).when(networkAclManager).createNetworkACL(Mockito.anyString(), Mockito.anyString(), Mockito.anyLong(), Mockito.anyBoolean());
|
||||
Mockito.doReturn(false).when(networkAclManager).replaceNetworkACL(Mockito.any(NetworkACL.class), Mockito.any(NetworkVO.class));
|
||||
|
||||
|
|
@ -246,7 +260,7 @@ public class NetworkACLServiceImplTest {
|
|||
@Test(expected = CloudRuntimeException.class)
|
||||
public void createAclListForNetworkAndReturnAclListIdTestAclNetworkIsCreatedButNotAppliedWithException() throws ResourceUnavailableException {
|
||||
Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId, Network.Service.NetworkACL);
|
||||
Mockito.doReturn(Mockito.mock(Vpc.class)).when(EntityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
Mockito.doReturn(Mockito.mock(NetworkACL.class)).when(networkAclManager).createNetworkACL(Mockito.anyString(), Mockito.anyString(), Mockito.anyLong(), Mockito.anyBoolean());
|
||||
|
||||
Mockito.doThrow(ResourceUnavailableException.class).when(networkAclManager).replaceNetworkACL(Mockito.any(NetworkACL.class), Mockito.any(NetworkVO.class));
|
||||
|
|
@ -261,7 +275,7 @@ public class NetworkACLServiceImplTest {
|
|||
@Test
|
||||
public void createAclListForNetworkAndReturnAclListIdTestAclIsCreatedAndAppliedWithSuccess() throws ResourceUnavailableException {
|
||||
Mockito.doReturn(true).when(networkModelMock).areServicesSupportedByNetworkOffering(networkOfferingMockId, Network.Service.NetworkACL);
|
||||
Mockito.doReturn(Mockito.mock(Vpc.class)).when(EntityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
|
||||
NetworkACL networkAclMock = Mockito.mock(NetworkACL.class);
|
||||
Long expectedNetworkAclId = 5L;
|
||||
|
|
@ -339,7 +353,7 @@ public class NetworkACLServiceImplTest {
|
|||
@Test(expected = InvalidParameterValueException.class)
|
||||
public void validateNetworkAclTestAclNotDefaulWithoutVpc() {
|
||||
Mockito.when(networkAclMock.getId()).thenReturn(3L);
|
||||
Mockito.doReturn(null).when(EntityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
Mockito.doReturn(null).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
;
|
||||
|
||||
networkAclServiceImpl.validateNetworkAcl(networkAclMock);
|
||||
|
|
@ -357,13 +371,13 @@ public class NetworkACLServiceImplTest {
|
|||
Mockito.when(networkAclMock.getId()).thenReturn(3L);
|
||||
Mockito.when(networkAclMock.getVpcId()).thenReturn(networkMockVpcMockId);
|
||||
|
||||
Mockito.doReturn(Mockito.mock(Vpc.class)).when(EntityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
Mockito.doNothing().when(AccountManager).checkAccess(Mockito.any(Account.class), Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
|
||||
Mockito.doReturn(Mockito.mock(Vpc.class)).when(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
Mockito.doNothing().when(accountManagerMock).checkAccess(Mockito.any(Account.class), Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
|
||||
|
||||
networkAclServiceImpl.validateNetworkAcl(networkAclMock);
|
||||
|
||||
Mockito.verify(EntityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
Mockito.verify(AccountManager).checkAccess(Mockito.any(Account.class), Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
|
||||
Mockito.verify(entityManagerMock).findById(Vpc.class, networkMockVpcMockId);
|
||||
Mockito.verify(accountManagerMock).checkAccess(Mockito.any(Account.class), Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
|
||||
|
||||
PowerMockito.verifyStatic();
|
||||
CallContext.current();
|
||||
|
|
@ -808,4 +822,60 @@ public class NetworkACLServiceImplTest {
|
|||
Mockito.verify(networkAclServiceImpl).validateAndCreateNetworkAclRuleAction("deny");
|
||||
}
|
||||
|
||||
@Test
|
||||
@PrepareForTest(CallContext.class)
|
||||
public void updateNetworkACLTestParametersNotNull() {
|
||||
String name = "name";
|
||||
String description = "desc";
|
||||
String customId = "customId";
|
||||
|
||||
Mockito.when(updateNetworkACLListCmdMock.getName()).thenReturn(name);
|
||||
Mockito.when(updateNetworkACLListCmdMock.getDescription()).thenReturn(description);
|
||||
Mockito.when(updateNetworkACLListCmdMock.getCustomId()).thenReturn(customId);
|
||||
Mockito.when(updateNetworkACLListCmdMock.getId()).thenReturn(networkAclListId);
|
||||
Mockito.when(updateNetworkACLListCmdMock.getDisplay()).thenReturn(false);
|
||||
|
||||
networkAclServiceImpl.updateNetworkACL(updateNetworkACLListCmdMock);
|
||||
|
||||
InOrder inOrder = Mockito.inOrder(networkAclDaoMock, entityManagerMock, entityManagerMock, accountManagerMock, networkACLVOMock);
|
||||
|
||||
inOrder.verify(networkAclDaoMock).findById(networkAclListId);
|
||||
inOrder.verify(entityManagerMock).findById(Mockito.eq(Vpc.class), Mockito.anyLong());
|
||||
inOrder.verify(accountManagerMock).checkAccess(Mockito.any(Account.class), Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
|
||||
|
||||
inOrder.verify(networkACLVOMock).setName(name);
|
||||
inOrder.verify(networkACLVOMock).setDescription(description);
|
||||
inOrder.verify(networkACLVOMock).setUuid(customId);
|
||||
inOrder.verify(networkACLVOMock).setDisplay(false);
|
||||
|
||||
inOrder.verify(networkAclDaoMock).update(networkAclListId, networkACLVOMock);
|
||||
inOrder.verify(networkAclDaoMock).findById(networkAclListId);
|
||||
}
|
||||
|
||||
@Test
|
||||
@PrepareForTest(CallContext.class)
|
||||
public void updateNetworkACLTestParametersWithNullValues() {
|
||||
Mockito.when(updateNetworkACLListCmdMock.getName()).thenReturn(null);
|
||||
Mockito.when(updateNetworkACLListCmdMock.getDescription()).thenReturn(null);
|
||||
Mockito.when(updateNetworkACLListCmdMock.getCustomId()).thenReturn(null);
|
||||
Mockito.when(updateNetworkACLListCmdMock.getId()).thenReturn(networkAclListId);
|
||||
Mockito.when(updateNetworkACLListCmdMock.getDisplay()).thenReturn(null);
|
||||
|
||||
networkAclServiceImpl.updateNetworkACL(updateNetworkACLListCmdMock);
|
||||
|
||||
InOrder inOrder = Mockito.inOrder(networkAclDaoMock, entityManagerMock, entityManagerMock, accountManagerMock, networkACLVOMock);
|
||||
|
||||
inOrder.verify(networkAclDaoMock).findById(networkAclListId);
|
||||
inOrder.verify(entityManagerMock).findById(Mockito.eq(Vpc.class), Mockito.anyLong());
|
||||
inOrder.verify(accountManagerMock).checkAccess(Mockito.any(Account.class), Mockito.isNull(AccessType.class), Mockito.eq(true), Mockito.any(Vpc.class));
|
||||
|
||||
Mockito.verify(networkACLVOMock, Mockito.times(0)).setName(null);
|
||||
inOrder.verify(networkACLVOMock, Mockito.times(0)).setDescription(null);
|
||||
inOrder.verify(networkACLVOMock, Mockito.times(0)).setUuid(null);
|
||||
inOrder.verify(networkACLVOMock, Mockito.times(0)).setDisplay(false);
|
||||
|
||||
inOrder.verify(networkAclDaoMock).update(networkAclListId, networkACLVOMock);
|
||||
inOrder.verify(networkAclDaoMock).findById(networkAclListId);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "إضافة حسابات",
|
||||
"label.add.accounts.to": "إضافة حسابات إلى",
|
||||
"label.add.acl.list": "Add ACL List",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "Add new affinity group",
|
||||
"label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
|
||||
"label.add.baremetal.rack.configuration": "Add Baremetal Rack Configuration",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "Afegir comptes",
|
||||
"label.add.accounts.to": "Afegir comptes a",
|
||||
"label.add.acl.list": "Add ACL List",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "Add new affinity group",
|
||||
"label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
|
||||
"label.add.baremetal.rack.configuration": "Add Baremetal Rack Configuration",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "Konten hinzufügen",
|
||||
"label.add.accounts.to": "Konten hinzufügen zu",
|
||||
"label.add.acl.list": "ACL-Liste hinzufügen",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "Neue Affinitätsgruppe hinzufügen",
|
||||
"label.add.baremetal.dhcp.device": "Baremetal DHCP-Gerät hinzufügen",
|
||||
"label.add.baremetal.rack.configuration": "Baremetal Rackkonfiguration hinzufügen",
|
||||
|
|
|
|||
|
|
@ -320,6 +320,7 @@ var dictionary = {
|
|||
"label.add.accounts":"Add accounts",
|
||||
"label.add.accounts.to":"Add accounts to",
|
||||
"label.add.acl.list":"Add ACL List",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group":"Add new affinity group",
|
||||
"label.add.baremetal.dhcp.device":"Add Baremetal DHCP Device",
|
||||
"label.add.baremetal.rack.configuration":"Add Baremetal Rack Configuration",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "Agregar Cuentas",
|
||||
"label.add.accounts.to": "Agregar Cuentas a",
|
||||
"label.add.acl.list": "Agregar Lista ACL",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "Agregar un nuevo grupo de afinidad",
|
||||
"label.add.baremetal.dhcp.device": "Agregar dispositivo DHCP Baremetal",
|
||||
"label.add.baremetal.rack.configuration": "Agregar Configuración de Rack Baremetal",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "Ajouter des comptes",
|
||||
"label.add.accounts.to": "Ajouter des comptes sur",
|
||||
"label.add.acl.list": "Ajouter Liste ACL",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "Ajouter nouveau groupe d'affinité",
|
||||
"label.add.baremetal.dhcp.device": "Ajouter un DHCP Baremetal",
|
||||
"label.add.baremetal.rack.configuration": "Ajouter Configuration Rack Baremetal",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "Számlák felvétele",
|
||||
"label.add.accounts.to": "Számla felvétele:",
|
||||
"label.add.acl.list": "ACL lista felvétele",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "Új affinítási csoport felvétele",
|
||||
"label.add.baremetal.dhcp.device": "Baremetal DHCP eszköz felvétele",
|
||||
"label.add.baremetal.rack.configuration": "Baremetal rack konfiguráció felvétele",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "Aggiungere utenti",
|
||||
"label.add.accounts.to": "Aggiungere utenti a",
|
||||
"label.add.acl.list": "Add ACL List",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "Aggiungere un nuovo gruppo di affinità",
|
||||
"label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
|
||||
"label.add.baremetal.rack.configuration": "Add Baremetal Rack Configuration",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "アカウントの追加",
|
||||
"label.add.accounts.to": "アカウントの追加先:",
|
||||
"label.add.acl.list": "ACL 一覧の追加",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "新しいアフィニティ グループの追加",
|
||||
"label.add.baremetal.dhcp.device": "ベアメタル DHCP デバイスの追加",
|
||||
"label.add.baremetal.rack.configuration": "ベアメタルラック設定の追加",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "계정 정보 추가",
|
||||
"label.add.accounts.to": "계정 정보 추가:",
|
||||
"label.add.acl.list": "Add ACL List",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "Add new affinity group",
|
||||
"label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
|
||||
"label.add.baremetal.rack.configuration": "Add Baremetal Rack Configuration",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "Legg til kontoer",
|
||||
"label.add.accounts.to": "Legg kontoer til",
|
||||
"label.add.acl.list": "Legg til ACL liste",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "Legg til affinitetsgruppe",
|
||||
"label.add.baremetal.dhcp.device": "Legg Til Barmetall DHCP Enhet",
|
||||
"label.add.baremetal.rack.configuration": "Legg Til Barmetall Rack Konfigurering",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "Voeg accounts toe",
|
||||
"label.add.accounts.to": "Voeg accounts toe aan",
|
||||
"label.add.acl.list": "voeg een ACL lijst toe",
|
||||
"label.edit.acl.list": "Verander een ACL lijst",
|
||||
"label.add.affinity.group": "Nieuwe affinity groep toevoegen",
|
||||
"label.add.baremetal.dhcp.device": "Voeg Baremetal DHCP Apparaat toe",
|
||||
"label.add.baremetal.rack.configuration": "voeg baremetal rek configuratie toe",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "Dodaj konta",
|
||||
"label.add.accounts.to": "Dodaj konto do",
|
||||
"label.add.acl.list": "Add ACL List",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "Add new affinity group",
|
||||
"label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
|
||||
"label.add.baremetal.rack.configuration": "Add Baremetal Rack Configuration",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "Adicionar contas",
|
||||
"label.add.accounts.to": "Adicionar contas para",
|
||||
"label.add.acl.list": "Adiciona Lista ACL",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "Adicionar um grupo de afinidade",
|
||||
"label.add.baremetal.dhcp.device": "Adiciona Dispositivo DHCP Baremetal",
|
||||
"label.add.baremetal.rack.configuration": "Adicionar Configuração de Rack de Baremetal",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "Добавить учётные записи",
|
||||
"label.add.accounts.to": "Добавить учётные записи",
|
||||
"label.add.acl.list": "Add ACL List",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "Добавить новую affinity group",
|
||||
"label.add.baremetal.dhcp.device": "Add Baremetal DHCP Device",
|
||||
"label.add.baremetal.rack.configuration": "Add Baremetal Rack Configuration",
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@ var dictionary = {
|
|||
"label.add.accounts": "添加帐户",
|
||||
"label.add.accounts.to": "添加帐户至",
|
||||
"label.add.acl.list": "添加 ACL 列表",
|
||||
"label.edit.acl.list": "Edit ACL List",
|
||||
"label.add.affinity.group": "添加新关联性组",
|
||||
"label.add.baremetal.dhcp.device": "添加裸机 DHCP 设备",
|
||||
"label.add.baremetal.rack.configuration": "添加 Baremetal Rack 配置",
|
||||
|
|
|
|||
|
|
@ -606,7 +606,7 @@
|
|||
} else {
|
||||
$loading.appendTo($detailView);
|
||||
cloudStack.ui.notifications.add(
|
||||
$.extend(true, {}, action.notification, notificationArgs),
|
||||
$.extend(true, {}, notificationArgs, action.notification),
|
||||
function(args) {
|
||||
replaceListViewItem($detailView, data);
|
||||
|
||||
|
|
|
|||
|
|
@ -1330,6 +1330,37 @@
|
|||
notification: {
|
||||
poll: pollAsyncJobResult
|
||||
}
|
||||
},
|
||||
edit: {
|
||||
label: 'label.edit.acl.list',
|
||||
action: function(args) {
|
||||
var data = args.data;
|
||||
data.id = args.context.aclLists[0].id;
|
||||
$.ajax({
|
||||
url: createURL('updateNetworkACLList'),
|
||||
type: "POST",
|
||||
data: data,
|
||||
success: function(json) {
|
||||
var jid = json.updatenetworkacllistresponse.jobid;
|
||||
args.response.success({
|
||||
_custom: {
|
||||
jobId: jid,
|
||||
getUpdatedItem: function() {
|
||||
$(window).trigger('cloudStack.fullRefresh');
|
||||
jQuery('div[id=breadcrumbs] ul:visible li span').last().html(data.name);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
error: function(json) {
|
||||
args.response.error(parseXMLHttpResponse(json));
|
||||
}
|
||||
});
|
||||
},
|
||||
notification: {
|
||||
poll: pollAsyncJobResult,
|
||||
desc: 'label.edit.acl.list'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -1342,7 +1373,8 @@
|
|||
isEditable: true
|
||||
},
|
||||
description: {
|
||||
label: 'label.description'
|
||||
label: 'label.description',
|
||||
isEditable: true
|
||||
},
|
||||
id: {
|
||||
label: 'label.id'
|
||||
|
|
@ -1357,6 +1389,7 @@
|
|||
var allowedActions = [];
|
||||
if (items.vpcid != null) {
|
||||
allowedActions.push("remove");
|
||||
allowedActions.push("edit");
|
||||
}
|
||||
return allowedActions;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue