本文整理汇总了Golang中github.com/Azure/azure-sdk-for-go/Godeps/_workspace/src/github.com/Azure/go-autorest/autorest/to.String函数的典型用法代码示例。如果您正苦于以下问题:Golang String函数的具体用法?Golang String怎么用?Golang String使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了String函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: Addresses
// Addresses is specified in the Instance interface.
func (inst *azureInstance) Addresses() ([]jujunetwork.Address, error) {
addresses := make([]jujunetwork.Address, 0, len(inst.networkInterfaces)+len(inst.publicIPAddresses))
for _, nic := range inst.networkInterfaces {
if nic.Properties.IPConfigurations == nil {
continue
}
for _, ipConfiguration := range *nic.Properties.IPConfigurations {
privateIpAddress := ipConfiguration.Properties.PrivateIPAddress
if privateIpAddress == nil {
continue
}
addresses = append(addresses, jujunetwork.NewScopedAddress(
to.String(privateIpAddress),
jujunetwork.ScopeCloudLocal,
))
}
}
for _, pip := range inst.publicIPAddresses {
if pip.Properties.IPAddress == nil {
continue
}
addresses = append(addresses, jujunetwork.NewScopedAddress(
to.String(pip.Properties.IPAddress),
jujunetwork.ScopePublic,
))
}
return addresses, nil
}
开发者ID:imoapps,项目名称:juju,代码行数:29,代码来源:instance.go
示例2: internalNetworkAddress
// internalNetworkAddress returns the instance's jujunetwork.Address for the
// internal virtual network. This address is used to identify the machine in
// network security rules.
func (inst *azureInstance) internalNetworkAddress() (jujunetwork.Address, error) {
inst.env.mu.Lock()
subscriptionId := inst.env.config.subscriptionId
resourceGroup := inst.env.resourceGroup
controllerResourceGroup := inst.env.controllerResourceGroup
inst.env.mu.Unlock()
internalSubnetId := internalSubnetId(
resourceGroup, controllerResourceGroup, subscriptionId,
)
for _, nic := range inst.networkInterfaces {
if nic.Properties.IPConfigurations == nil {
continue
}
for _, ipConfiguration := range *nic.Properties.IPConfigurations {
if ipConfiguration.Properties.Subnet == nil {
continue
}
if strings.ToLower(to.String(ipConfiguration.Properties.Subnet.ID)) != strings.ToLower(internalSubnetId) {
continue
}
privateIpAddress := ipConfiguration.Properties.PrivateIPAddress
if privateIpAddress == nil {
continue
}
return jujunetwork.NewScopedAddress(
to.String(privateIpAddress),
jujunetwork.ScopeCloudLocal,
), nil
}
}
return jujunetwork.Address{}, errors.NotFoundf("internal network address")
}
开发者ID:imoapps,项目名称:juju,代码行数:36,代码来源:instance.go
示例3: detachVolume
func (v *azureVolumeSource) detachVolume(
vm *compute.VirtualMachine,
p storage.VolumeAttachmentParams,
) (updated bool) {
dataDisksRoot := dataDiskVhdRoot(v.env.config.location, v.env.config.storageAccount)
dataDiskName := p.VolumeId
vhdURI := dataDisksRoot + dataDiskName + vhdExtension
var dataDisks []compute.DataDisk
if vm.Properties.StorageProfile.DataDisks != nil {
dataDisks = *vm.Properties.StorageProfile.DataDisks
}
for i, disk := range dataDisks {
if to.String(disk.Name) != p.VolumeId {
continue
}
if to.String(disk.Vhd.URI) != vhdURI {
continue
}
dataDisks = append(dataDisks[:i], dataDisks[i+1:]...)
if len(dataDisks) == 0 {
vm.Properties.StorageProfile.DataDisks = nil
} else {
*vm.Properties.StorageProfile.DataDisks = dataDisks
}
return true
}
return false
}
开发者ID:imoapps,项目名称:juju,代码行数:30,代码来源:storage.go
示例4: nextSubnetIPAddress
// nextSubnetIPAddress returns the next available IP address in the given subnet.
func nextSubnetIPAddress(
nicClient network.InterfacesClient,
resourceGroup string,
subnet *network.Subnet,
) (string, error) {
_, ipnet, err := net.ParseCIDR(to.String(subnet.Properties.AddressPrefix))
if err != nil {
return "", errors.Annotate(err, "parsing subnet prefix")
}
results, err := nicClient.List(resourceGroup)
if err != nil {
return "", errors.Annotate(err, "listing NICs")
}
// Azure reserves the first 4 addresses in the subnet.
var ipsInUse []net.IP
if results.Value != nil {
ipsInUse = make([]net.IP, 0, len(*results.Value))
for _, item := range *results.Value {
if item.Properties.IPConfigurations == nil {
continue
}
for _, ipConfiguration := range *item.Properties.IPConfigurations {
if to.String(ipConfiguration.Properties.Subnet.ID) != to.String(subnet.ID) {
continue
}
ip := net.ParseIP(to.String(ipConfiguration.Properties.PrivateIPAddress))
if ip != nil {
ipsInUse = append(ipsInUse, ip)
}
}
}
}
ip, err := iputils.NextSubnetIP(ipnet, ipsInUse)
if err != nil {
return "", errors.Trace(err)
}
return ip.String(), nil
}
开发者ID:xushiwei,项目名称:juju,代码行数:39,代码来源:networking.go
示例5: JobListResultPreparer
// JobListResultPreparer prepares a request to retrieve the next set of results. It returns
// nil if no more results exist.
func (client JobListResult) JobListResultPreparer() (*http.Request, error) {
if client.NextLink == nil || len(to.String(client.NextLink)) <= 0 {
return nil, nil
}
return autorest.Prepare(&http.Request{},
autorest.AsJSON(),
autorest.AsGet(),
autorest.WithBaseURL(to.String(client.NextLink)))
}
开发者ID:higebu,项目名称:terraform,代码行数:11,代码来源:models.go
示例6: OperationResultCollectionPreparer
// OperationResultCollectionPreparer prepares a request to retrieve the next set of results. It returns
// nil if no more results exist.
func (client OperationResultCollection) OperationResultCollectionPreparer() (*http.Request, error) {
if client.Nextlink == nil || len(to.String(client.Nextlink)) <= 0 {
return nil, nil
}
return autorest.Prepare(&http.Request{},
autorest.AsJSON(),
autorest.AsGet(),
autorest.WithBaseURL(to.String(client.Nextlink)))
}
开发者ID:freimer,项目名称:azure-sdk-for-go,代码行数:11,代码来源:models.go
示例7: VirtualMachineScaleSetListWithLinkResultPreparer
// VirtualMachineScaleSetListWithLinkResultPreparer prepares a request to retrieve the next set of results. It returns
// nil if no more results exist.
func (client VirtualMachineScaleSetListWithLinkResult) VirtualMachineScaleSetListWithLinkResultPreparer() (*http.Request, error) {
if client.NextLink == nil || len(to.String(client.NextLink)) <= 0 {
return nil, nil
}
return autorest.Prepare(&http.Request{},
autorest.AsJSON(),
autorest.AsGet(),
autorest.WithBaseURL(to.String(client.NextLink)))
}
开发者ID:axier,项目名称:azure-sdk-for-go,代码行数:11,代码来源:models.go
示例8: ResourceProviderOperationDetailListResultPreparer
// ResourceProviderOperationDetailListResultPreparer prepares a request to retrieve the next set of results. It returns
// nil if no more results exist.
func (client ResourceProviderOperationDetailListResult) ResourceProviderOperationDetailListResultPreparer() (*http.Request, error) {
if client.NextLink == nil || len(to.String(client.NextLink)) <= 0 {
return nil, nil
}
return autorest.Prepare(&http.Request{},
autorest.AsJSON(),
autorest.AsGet(),
autorest.WithBaseURL(to.String(client.NextLink)))
}
开发者ID:higebu,项目名称:terraform,代码行数:11,代码来源:models.go
示例9: SharedAccessAuthorizationRuleListResultPreparer
// SharedAccessAuthorizationRuleListResultPreparer prepares a request to retrieve the next set of results. It returns
// nil if no more results exist.
func (client SharedAccessAuthorizationRuleListResult) SharedAccessAuthorizationRuleListResultPreparer() (*http.Request, error) {
if client.NextLink == nil || len(to.String(client.NextLink)) <= 0 {
return nil, nil
}
return autorest.Prepare(&http.Request{},
autorest.AsJSON(),
autorest.AsGet(),
autorest.WithBaseURL(to.String(client.NextLink)))
}
开发者ID:freimer,项目名称:azure-sdk-for-go,代码行数:11,代码来源:models.go
示例10: attachVolume
func (v *azureVolumeSource) attachVolume(
vm *compute.VirtualMachine,
p storage.VolumeAttachmentParams,
) (_ *storage.VolumeAttachment, updated bool, _ error) {
dataDisksRoot := dataDiskVhdRoot(v.env.config.location, v.env.config.storageAccount)
dataDiskName := p.VolumeId
vhdURI := dataDisksRoot + dataDiskName + vhdExtension
var dataDisks []compute.DataDisk
if vm.Properties.StorageProfile.DataDisks != nil {
dataDisks = *vm.Properties.StorageProfile.DataDisks
}
for _, disk := range dataDisks {
if to.String(disk.Name) != p.VolumeId {
continue
}
if to.String(disk.Vhd.URI) != vhdURI {
continue
}
// Disk is already attached.
volumeAttachment := &storage.VolumeAttachment{
p.Volume,
p.Machine,
storage.VolumeAttachmentInfo{
BusAddress: diskBusAddress(to.Int(disk.Lun)),
},
}
return volumeAttachment, false, nil
}
lun, err := nextAvailableLUN(vm)
if err != nil {
return nil, false, errors.Annotate(err, "choosing LUN")
}
dataDisk := compute.DataDisk{
Lun: to.IntPtr(lun),
Name: to.StringPtr(dataDiskName),
Vhd: &compute.VirtualHardDisk{to.StringPtr(vhdURI)},
Caching: compute.ReadWrite,
CreateOption: compute.Attach,
}
dataDisks = append(dataDisks, dataDisk)
vm.Properties.StorageProfile.DataDisks = &dataDisks
volumeAttachment := storage.VolumeAttachment{
p.Volume,
p.Machine,
storage.VolumeAttachmentInfo{
BusAddress: diskBusAddress(lun),
},
}
return &volumeAttachment, true, nil
}
开发者ID:imoapps,项目名称:juju,代码行数:55,代码来源:storage.go
示例11: checkName
func checkName(name string) {
c, err := helpers.LoadCredentials()
if err != nil {
log.Fatalf("Error: %v", err)
}
ac := storage.NewAccountsClient(c["subscriptionID"])
spt, err := helpers.NewServicePrincipalTokenFromCredentials(c, azure.AzureResourceManagerScope)
if err != nil {
log.Fatalf("Error: %v", err)
}
ac.Authorizer = spt
ac.Sender = autorest.CreateSender(
autorest.WithLogging(log.New(os.Stdout, "sdk-example: ", log.LstdFlags)))
ac.RequestInspector = withInspection()
ac.ResponseInspector = byInspecting()
cna, err := ac.CheckNameAvailability(
storage.AccountCheckNameAvailabilityParameters{
Name: to.StringPtr(name),
Type: to.StringPtr("Microsoft.Storage/storageAccounts")})
if err != nil {
log.Fatalf("Error: %v", err)
} else {
if to.Bool(cna.NameAvailable) {
fmt.Printf("The name '%s' is available\n", name)
} else {
fmt.Printf("The name '%s' is unavailable because %s\n", name, to.String(cna.Message))
}
}
}
开发者ID:freimer,项目名称:azure-sdk-for-go,代码行数:35,代码来源:check.go
示例12: deleteInstanceNetworkSecurityRules
// deleteInstanceNetworkSecurityRules deletes network security rules in the
// internal network security group that correspond to the specified machine.
//
// This is expected to delete *all* security rules related to the instance,
// i.e. both the ones opened by OpenPorts above, and the ones opened for API
// access.
func deleteInstanceNetworkSecurityRules(
resourceGroup string, id instance.Id,
nsgClient network.SecurityGroupsClient,
securityRuleClient network.SecurityRulesClient,
) error {
nsg, err := nsgClient.Get(resourceGroup, internalSecurityGroupName)
if err != nil {
return errors.Annotate(err, "querying network security group")
}
if nsg.Properties.SecurityRules == nil {
return nil
}
prefix := instanceNetworkSecurityRulePrefix(id)
for _, rule := range *nsg.Properties.SecurityRules {
ruleName := to.String(rule.Name)
if !strings.HasPrefix(ruleName, prefix) {
continue
}
result, err := securityRuleClient.Delete(
resourceGroup,
internalSecurityGroupName,
ruleName,
)
if err != nil {
if result.Response == nil || result.StatusCode != http.StatusNotFound {
return errors.Annotatef(err, "deleting security rule %q", ruleName)
}
}
}
return nil
}
开发者ID:imoapps,项目名称:juju,代码行数:37,代码来源:instance.go
示例13: Status
// Status is specified in the Instance interface.
func (inst *azureInstance) Status() string {
// NOTE(axw) ideally we would use the power state, but that is only
// available when using the "instance view". Instance view is only
// delivered when explicitly requested, and you can only request it
// when querying a single VM. This means the results of AllInstances
// or Instances would have the instance view missing.
return to.String(inst.Properties.ProvisioningState)
}
开发者ID:imoapps,项目名称:juju,代码行数:9,代码来源:instance.go
示例14: createStorageAccount
func createStorageAccount(
client storage.AccountsClient,
accountType storage.AccountType,
resourceGroup string,
location string,
tags map[string]string,
accountNameGenerator func() string,
) (string, string, error) {
logger.Debugf("creating storage account (finding available name)")
const maxAttempts = 10
for remaining := maxAttempts; remaining > 0; remaining-- {
accountName := accountNameGenerator()
logger.Debugf("- checking storage account name %q", accountName)
result, err := client.CheckNameAvailability(
storage.AccountCheckNameAvailabilityParameters{
Name: to.StringPtr(accountName),
// Azure is a little inconsistent with when Type is
// required. It's required here.
Type: to.StringPtr("Microsoft.Storage/storageAccounts"),
},
)
if err != nil {
return "", "", errors.Annotate(err, "checking account name availability")
}
if !to.Bool(result.NameAvailable) {
logger.Debugf(
"%q is not available (%v): %v",
accountName, result.Reason, result.Message,
)
continue
}
createParams := storage.AccountCreateParameters{
Location: to.StringPtr(location),
Tags: toTagsPtr(tags),
Properties: &storage.AccountPropertiesCreateParameters{
AccountType: accountType,
},
}
logger.Debugf("- creating %q storage account %q", accountType, accountName)
// TODO(axw) account creation can fail if the account name is
// available, but contains profanity. We should retry a set
// number of times even if creating fails.
if _, err := client.Create(resourceGroup, accountName, createParams); err != nil {
return "", "", errors.Trace(err)
}
logger.Debugf("- listing storage account keys")
listKeysResult, err := client.ListKeys(resourceGroup, accountName)
if err != nil {
return "", "", errors.Annotate(err, "listing storage account keys")
}
return accountName, to.String(listKeysResult.Key1), nil
}
return "", "", errors.New("could not find available storage account name")
}
开发者ID:makyo,项目名称:juju,代码行数:54,代码来源:environ.go
示例15: assertStartInstanceRequests
func (s *environSuite) assertStartInstanceRequests(c *gc.C) startInstanceRequests {
// Clear the fields that don't get sent in the request.
s.publicIPAddress.ID = nil
s.publicIPAddress.Name = nil
s.publicIPAddress.Properties.IPAddress = nil
s.newNetworkInterface.ID = nil
s.newNetworkInterface.Name = nil
(*s.newNetworkInterface.Properties.IPConfigurations)[0].ID = nil
s.jujuAvailabilitySet.ID = nil
s.jujuAvailabilitySet.Name = nil
s.virtualMachine.ID = nil
s.virtualMachine.Name = nil
s.virtualMachine.Properties.ProvisioningState = nil
// Validate HTTP request bodies.
c.Assert(s.requests, gc.HasLen, 8)
c.Assert(s.requests[0].Method, gc.Equals, "GET") // vmSizes
c.Assert(s.requests[1].Method, gc.Equals, "GET") // juju-testenv-model-deadbeef-0bad-400d-8000-4b1d0d06f00d
c.Assert(s.requests[2].Method, gc.Equals, "GET") // skus
c.Assert(s.requests[3].Method, gc.Equals, "PUT")
assertRequestBody(c, s.requests[3], s.publicIPAddress)
c.Assert(s.requests[4].Method, gc.Equals, "GET") // NICs
c.Assert(s.requests[5].Method, gc.Equals, "PUT")
assertRequestBody(c, s.requests[5], s.newNetworkInterface)
c.Assert(s.requests[6].Method, gc.Equals, "PUT")
assertRequestBody(c, s.requests[6], s.jujuAvailabilitySet)
c.Assert(s.requests[7].Method, gc.Equals, "PUT")
// CustomData is non-deterministic, so don't compare it.
// TODO(axw) shouldn't CustomData be deterministic? Look into this.
var virtualMachine compute.VirtualMachine
unmarshalRequestBody(c, s.requests[7], &virtualMachine)
c.Assert(to.String(virtualMachine.Properties.OsProfile.CustomData), gc.Not(gc.HasLen), 0)
virtualMachine.Properties.OsProfile.CustomData = to.StringPtr("<juju-goes-here>")
c.Assert(&virtualMachine, jc.DeepEquals, s.virtualMachine)
return startInstanceRequests{
vmSizes: s.requests[0],
subnet: s.requests[1],
skus: s.requests[2],
publicIPAddress: s.requests[3],
nics: s.requests[4],
networkInterface: s.requests[5],
availabilitySet: s.requests[6],
virtualMachine: s.requests[7],
}
}
开发者ID:makyo,项目名称:juju,代码行数:47,代码来源:environ_test.go
示例16: ubuntuSKU
// ubuntuSKU returns the best SKU for the Canonical:UbuntuServer offering,
// matching the given series.
func ubuntuSKU(series, stream, location string, client compute.VirtualMachineImagesClient) (string, error) {
seriesVersion, err := jujuseries.SeriesVersion(series)
if err != nil {
return "", errors.Trace(err)
}
logger.Debugf("listing SKUs: Location=%s, Publisher=%s, Offer=%s", location, ubuntuPublisher, ubuntuOffering)
result, err := client.ListSkus(location, ubuntuPublisher, ubuntuOffering)
if err != nil {
return "", errors.Annotate(err, "listing Ubuntu SKUs")
}
if result.Value == nil || len(*result.Value) == 0 {
return "", errors.NotFoundf("Ubuntu SKUs")
}
skuNamesByVersion := make(map[ubuntuVersion]string)
var versions ubuntuVersions
for _, result := range *result.Value {
skuName := to.String(result.Name)
if !strings.HasPrefix(skuName, seriesVersion) {
logger.Debugf("ignoring SKU %q (does not match series %q)", skuName, series)
continue
}
version, tag, err := parseUbuntuSKU(skuName)
if err != nil {
logger.Errorf("ignoring SKU %q (failed to parse: %s)", skuName, err)
continue
}
var skuStream string
switch tag {
case "", "LTS":
skuStream = imagemetadata.ReleasedStream
case "DAILY", "DAILY-LTS":
skuStream = dailyStream
}
if skuStream == "" || skuStream != stream {
logger.Debugf("ignoring SKU %q (not in %q stream)", skuName, stream)
continue
}
skuNamesByVersion[version] = skuName
versions = append(versions, version)
}
if len(versions) == 0 {
return "", errors.NotFoundf("Ubuntu SKUs for %s stream", stream)
}
sort.Sort(versions)
bestVersion := versions[len(versions)-1]
return skuNamesByVersion[bestVersion], nil
}
开发者ID:exekias,项目名称:juju,代码行数:49,代码来源:images.go
示例17: main
func main() {
name := "storage-account-name"
c, err := helpers.LoadCredentials()
if err != nil {
log.Fatalf("Error: %v", err)
}
sid := c["subscriptionID"]
tid := c["tenantID"]
cid := c["clientID"]
secret := c["clientSecret"]
spt, err := azure.NewServicePrincipalToken(cid, secret, tid, azure.AzureResourceManagerScope)
if err != nil {
log.Fatalf("Error: %v", err)
}
arm := arm.NewClient(sid, spt)
arm.RequestInspector = helpers.WithInspection()
arm.ResponseInspector = helpers.ByInspecting()
ac := arm.StorageAccounts()
cna, err := ac.CheckNameAvailability(
storage.AccountCheckNameAvailabilityParameters{
Name: to.StringPtr(name),
Type: to.StringPtr("Microsoft.Storage/storageAccounts")})
if err != nil {
log.Fatalf("Error: %v", err)
} else {
if to.Bool(cna.NameAvailable) {
fmt.Printf("The name '%s' is available\n", name)
} else {
fmt.Printf("The name '%s' is unavailable because %s\n", name, to.String(cna.Message))
}
}
}
开发者ID:NiklasGustafsson,项目名称:azure-go-samples,代码行数:40,代码来源:check.go
示例18: updateVirtualMachines
// updateVirtualMachines updates virtual machines in the given map by iterating
// through the list of instance IDs in order, and updating each corresponding
// virtual machine at most once.
func (v *azureVolumeSource) updateVirtualMachines(
virtualMachines map[instance.Id]*maybeVirtualMachine, instanceIds []instance.Id,
) ([]error, error) {
results := make([]error, len(instanceIds))
vmsClient := compute.VirtualMachinesClient{v.env.compute}
for i, instanceId := range instanceIds {
vm, ok := virtualMachines[instanceId]
if !ok {
continue
}
if vm.err != nil {
results[i] = vm.err
continue
}
if _, err := vmsClient.CreateOrUpdate(v.env.resourceGroup, to.String(vm.vm.Name), *vm.vm); err != nil {
results[i] = err
vm.err = err
continue
}
// successfully updated, don't update again
delete(virtualMachines, instanceId)
}
return results, nil
}
开发者ID:imoapps,项目名称:juju,代码行数:27,代码来源:storage.go
示例19: deleteInstance
// deleteInstances deletes a virtual machine and all of the resources that
// it owns, and any corresponding network security rules.
func deleteInstance(
inst *azureInstance,
computeClient compute.ManagementClient,
networkClient network.ManagementClient,
storageClient internalazurestorage.Client,
) error {
vmName := string(inst.Id())
vmClient := compute.VirtualMachinesClient{computeClient}
nicClient := network.InterfacesClient{networkClient}
nsgClient := network.SecurityGroupsClient{networkClient}
securityRuleClient := network.SecurityRulesClient{networkClient}
publicIPClient := network.PublicIPAddressesClient{networkClient}
logger.Debugf("deleting instance %q", vmName)
logger.Debugf("- deleting virtual machine")
deleteResult, err := vmClient.Delete(inst.env.resourceGroup, vmName)
if err != nil {
if deleteResult.Response == nil || deleteResult.StatusCode != http.StatusNotFound {
return errors.Annotate(err, "deleting virtual machine")
}
}
// Delete the VM's OS disk VHD.
logger.Debugf("- deleting OS VHD")
blobClient := storageClient.GetBlobService()
if _, err := blobClient.DeleteBlobIfExists(osDiskVHDContainer, vmName); err != nil {
return errors.Annotate(err, "deleting OS VHD")
}
// Delete network security rules that refer to the VM.
logger.Debugf("- deleting security rules")
if err := deleteInstanceNetworkSecurityRules(
inst.env.resourceGroup, inst.Id(), nsgClient, securityRuleClient,
); err != nil {
return errors.Annotate(err, "deleting network security rules")
}
// Detach public IPs from NICs. This must be done before public
// IPs can be deleted. In the future, VMs may not necessarily
// have a public IP, so we don't use the presence of a public
// IP to indicate the existence of an instance.
logger.Debugf("- detaching public IP addresses")
for _, nic := range inst.networkInterfaces {
if nic.Properties.IPConfigurations == nil {
continue
}
var detached bool
for i, ipConfiguration := range *nic.Properties.IPConfigurations {
if ipConfiguration.Properties.PublicIPAddress == nil {
continue
}
ipConfiguration.Properties.PublicIPAddress = nil
(*nic.Properties.IPConfigurations)[i] = ipConfiguration
detached = true
}
if detached {
if _, err := nicClient.CreateOrUpdate(
inst.env.resourceGroup, to.String(nic.Name), nic,
); err != nil {
return errors.Annotate(err, "detaching public IP addresses")
}
}
}
// Delete public IPs.
logger.Debugf("- deleting public IPs")
for _, pip := range inst.publicIPAddresses {
pipName := to.String(pip.Name)
logger.Tracef("deleting public IP %q", pipName)
result, err := publicIPClient.Delete(inst.env.resourceGroup, pipName)
if err != nil {
if result.Response == nil || result.StatusCode != http.StatusNotFound {
return errors.Annotate(err, "deleting public IP")
}
}
}
// Delete NICs.
//
// NOTE(axw) this *must* be deleted last, or we risk leaking resources.
logger.Debugf("- deleting network interfaces")
for _, nic := range inst.networkInterfaces {
nicName := to.String(nic.Name)
logger.Tracef("deleting NIC %q", nicName)
result, err := nicClient.Delete(inst.env.resourceGroup, nicName)
if err != nil {
if result.Response == nil || result.StatusCode != http.StatusNotFound {
return errors.Annotate(err, "deleting NIC")
}
}
}
return nil
}
开发者ID:makyo,项目名称:juju,代码行数:96,代码来源:environ.go
示例20: createAvailabilitySet
// createAvailabilitySet creates the availability set for a machine to use
// if it doesn't already exist, and returns the availability set's ID. The
// algorithm used for choosing the availability set is:
// - if there is a distribution group, use the same availability set as
// the instances in that group. Instances in the group may be in
// different availability sets (when multiple services colocated on a
// machine), so we pick one arbitrarily
// - if there is no distribution group, create an availability name with
// a name based on the value of the tags.JujuUnitsDeployed tag in vmTags,
// if it exists
// - if there are no units assigned to the machine, then use the "juju"
// availability set
func createAvailabilitySet(
client compute.AvailabilitySetsClient,
vmName, resourceGroup, location string,
vmTags, envTags map[string]string,
distributionGroupFunc func() ([]instance.Id, error),
instancesFunc func([]instance.Id) ([]instance.Instance, error),
) (string, error) {
logger.Debugf("selecting availability set for %q", vmName)
// First we check if there's a distribution group, and if so,
// use the availability set of the first instance we find in it.
var instanceIds []instance.Id
if distributionGroupFunc != nil {
var err error
instanceIds, err = distributionGroupFunc()
if err != nil {
return "", errors.Annotate(
err, "querying distribution group",
)
}
}
instances, err := instancesFunc(instanceIds)
switch err {
case nil, environs.ErrPartialInstances, environs.ErrNoInstances:
default:
return "", errors.Annotate(
err, "querying distribution group instances",
)
}
for _, instance := range instances {
if instance == nil {
continue
}
instance := instance.(*azureInstance)
availabilitySetSubResource := instance.Properties.AvailabilitySet
if availabilitySetSubResource == nil || availabilitySetSubResource.ID == nil {
continue
}
logger.Debugf("- selecting availability set of %q", instance.Name)
return to.String(availabilitySetSubResource.ID), nil
}
// We'll have to create an availability set. Use the name of one of the
// services assigned to the machine.
availabilitySetName := "juju"
if unitNames, ok := vmTags[tags.JujuUnitsDeployed]; ok {
for _, unitName := range strings.Fields(unitNames) {
if !names.IsValidUnit(unitName) {
continue
}
serviceName, err := names.UnitService(unitName)
if err != nil {
return "", errors.Annotate(
err, "getting service name",
)
}
availabilitySetName = serviceName
break
}
}
logger.Debugf("- creating availability set %q", availabilitySetName)
availabilitySet, err := client.CreateOrUpdate(
resourceGroup, availabilitySetName, compute.AvailabilitySet{
Location: to.StringPtr(location),
// NOTE(axw) we do *not* want to use vmTags here,
// because an availability set is shared by machines.
Tags: toTagsPtr(envTags),
},
)
if err != nil {
return "", errors.Annotatef(
err, "creating availability set %q", availabilitySetName,
)
}
return to.String(availabilitySet.ID), nil
}
开发者ID:makyo,项目名称:juju,代码行数:89,代码来源:environ.go
注:本文中的github.com/Azure/azure-sdk-for-go/Godeps/_workspace/src/github.com/Azure/go-autorest/autorest/to.String函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论